Pārlūkot izejas kodu

fix(ksu): selinux_hide 6.6+ pointer-bool-conversion sed

- Drivers/kernelsu/feature/selinux_hide.c checks if(func) where func
  is a function pointer var guarded by >=6.6, but newer clang treats
  'if (security_dump_masked_av_fn)' as -Werror=pointer-bool-conversion
  (address of function always true). Fix by -> 'if (func != NULL)'
  for both security_dump_masked_av_fn and context_struct_compute_av_fn.
- Gated on kernel_version >=6.6 via sort -V, finds any selinux_hide.c,
  seds only if pattern present, idempotent (second run no double patch).
- 6.1/5.15 etc skipped.
TheWildJames 2 nedēļas atpakaļ
vecāks
revīzija
39361287dd
1 mainītis faili ar 37 papildinājumiem un 0 dzēšanām
  1. 37 0
      .github/actions/kernel-fixes/action.yml

+ 37 - 0
.github/actions/kernel-fixes/action.yml

@@ -86,6 +86,33 @@ runs:
         sed -i 's/\s*vm_flags_clear(new_vma, VM_PAD_MASK);/                new_vma->vm_flags \&= ~VM_PAD_MASK;/' mm/mmap.c
         echo "MMAP_VM_FLAGS_FIX=true" >> "$GITHUB_ENV"
 
+    - name: 'Fix selinux_hide pointer-bool-conversion on 6.6+'
+      shell: bash
+      working-directory: ${{ github.workspace }}/kernel/common
+      run: |
+        set -euo pipefail
+        KVER="${{ inputs.kernel_version }}"
+        # version >= 6.6 ?
+        if [ "$(printf '%s\n' "6.6" "$KVER" | sort -V | head -n1)" = "6.6" ]; then
+          echo "[INFO] KVER $KVER >= 6.6, checking selinux_hide.c"
+          for f in $(find . -name selinux_hide.c 2>/dev/null); do
+            if grep -q "security_dump_masked_av_fn" "$f" && grep -q "if (security_dump_masked_av_fn)" "$f"; then
+              echo "[INFO] Patching $f (security_dump_masked_av_fn)"
+              sed -i 's/if (security_dump_masked_av_fn)/if (security_dump_masked_av_fn != NULL)/g' "$f"
+              sed -i 's/if (context_struct_compute_av_fn)/if (context_struct_compute_av_fn != NULL)/g' "$f"
+              echo "SELINUX_HIDE_FIX=patched:$f" >> "$GITHUB_ENV"
+            else
+              echo "[INFO] $f already patched or no pattern"
+            fi
+          done
+          if [ -z "${SELINUX_HIDE_FIX:-}" ]; then
+            echo "SELINUX_HIDE_FIX=not_needed" >> "$GITHUB_ENV"
+          fi
+        else
+          echo "[SKIP] KVER $KVER < 6.6, no selinux_hide fix"
+          echo "SELINUX_HIDE_FIX=skipped" >> "$GITHUB_ENV"
+        fi
+
     - name: 'Final Kernel Fixes Summary'
       shell: bash
       run: |
@@ -129,3 +156,13 @@ runs:
         else
           echo "- mm/mmap.c VM_PAD_MASK fix: not applicable" >> "$SUMMARY_FILE"
         fi
+
+        if [[ "${SELINUX_HIDE_FIX:-not_applicable}" == patched:* ]]; then
+          echo "- selinux_hide.c 6.6+ pointer-bool fix: ${SELINUX_HIDE_FIX#patched:}" >> "$SUMMARY_FILE"
+        elif [ "${SELINUX_HIDE_FIX:-not_applicable}" = "not_needed" ]; then
+          echo "- selinux_hide.c 6.6+ pointer-bool fix: already patched / not needed" >> "$SUMMARY_FILE"
+        elif [ "${SELINUX_HIDE_FIX:-not_applicable}" = "skipped" ]; then
+          echo "- selinux_hide.c 6.6+ pointer-bool fix: skipped (<6.6)" >> "$SUMMARY_FILE"
+        else
+          echo "- selinux_hide.c 6.6+ pointer-bool fix: not applicable" >> "$SUMMARY_FILE"
+        fi