action.yml 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. name: 'Kernel Fixes'
  2. description: 'Applies compatibility fixes based on android/kernel/sublevel'
  3. inputs:
  4. android_version:
  5. required: true
  6. type: string
  7. kernel_version:
  8. required: true
  9. type: string
  10. sublevel:
  11. required: true
  12. type: string
  13. os_patch_level:
  14. required: true
  15. type: string
  16. runs:
  17. using: composite
  18. steps:
  19. - name: 'Apply Makefile and parse-options.c fixes for GLIBC >= 2.38'
  20. working-directory: ${{ github.workspace }}/kernel/common
  21. shell: bash
  22. run: |
  23. set -euo pipefail
  24. GLIBC_VERSION="$(ldd --version 2>/dev/null | head -n 1 | awk '{print $NF}')"
  25. echo "[INFO] Detected GLIBC version: $GLIBC_VERSION"
  26. if [ "$(printf '%s\n' "2.38" "$GLIBC_VERSION" | sort -V | head -n 1)" = "2.38" ]; then
  27. echo "[INFO] GLIBC >= 2.38, attempting Makefile fix."
  28. # Check if the pattern that needs fixing actually exists
  29. if grep -q '\$(Q)\$(MAKE) -C \$(SUBCMD_SRC) OUTPUT=\$(abspath \$(dir \$@))\/ \$(abspath \$@)' tools/bpf/resolve_btfids/Makefile; then
  30. echo "[INFO] Found pattern to fix, applying sed."
  31. sed -i '/\$(Q)\$(MAKE) -C \$(SUBCMD_SRC) OUTPUT=\$(abspath \$(dir \$@))\/ \$(abspath \$@)/s//$(Q)$(MAKE) -C $(SUBCMD_SRC) EXTRA_CFLAGS="$(CFLAGS)" OUTPUT=$(abspath $(dir $@))\/ $(abspath $@)/' tools/bpf/resolve_btfids/Makefile
  32. MAKEFILE_FIXED="true"
  33. elif grep -q 'EXTRA_CFLAGS' tools/bpf/resolve_btfids/Makefile; then
  34. echo "[INFO] EXTRA_CFLAGS already present, no fix needed."
  35. MAKEFILE_FIXED="already_fixed"
  36. else
  37. echo "[WARN] Neither pattern found in Makefile."
  38. MAKEFILE_FIXED="false"
  39. fi
  40. echo "MAKEFILE_FIXED=$MAKEFILE_FIXED" >> $GITHUB_ENV
  41. if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" && "${{ inputs.sublevel }}" -le 186 ]] || \
  42. [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" && "${{ inputs.sublevel }}" -le 119 ]] || \
  43. [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" && "${{ inputs.sublevel }}" -le 110 ]]; then
  44. echo "[INFO] Applying parse-options.c fixes."
  45. sed -i '/char \*buf = NULL;/a int i;' tools/lib/subcmd/parse-options.c 2>/dev/null || true
  46. sed -i 's/for (int i = 0; subcommands\[i\]; i++) {/for (i = 0; subcommands[i]; i++) {/' tools/lib/subcmd/parse-options.c 2>/dev/null || true
  47. sed -i '/if (subcommands) {/a int i;' tools/lib/subcmd/parse-options.c 2>/dev/null || true
  48. sed -i 's/for (int i = 0; subcommands\[i\]; i++)/for (i = 0; subcommands[i]; i++)/' tools/lib/subcmd/parse-options.c 2>/dev/null || true
  49. echo "PARSE_OPTIONS_FIXED=true" >> $GITHUB_ENV
  50. else
  51. echo "PARSE_OPTIONS_FIXED=false" >> $GITHUB_ENV
  52. fi
  53. else
  54. echo "[SKIP] GLIBC version < 2.38, skipping Makefile fix."
  55. fi
  56. - name: 'Create GitHub Summary for Makefile changes'
  57. shell: bash
  58. working-directory: ${{ github.workspace }}/kernel/common
  59. run: |
  60. echo "## Makefile and parse-options.c Fixes Applied" >> $GITHUB_STEP_SUMMARY
  61. echo "" >> $GITHUB_STEP_SUMMARY
  62. echo "### GLIBC Check" >> $GITHUB_STEP_SUMMARY
  63. GLIBC_VERSION="$(ldd --version 2>/dev/null | head -n 1 | awk '{print $NF}')"
  64. echo "- Detected GLIBC Version: **$GLIBC_VERSION**" >> $GITHUB_STEP_SUMMARY
  65. echo "" >> $GITHUB_STEP_SUMMARY
  66. if [ "$(printf '%s\n' "2.38" "$GLIBC_VERSION" | sort -V | head -n 1)" = "2.38" ]; then
  67. echo "### Makefile Changes" >> $GITHUB_STEP_SUMMARY
  68. if [ "$MAKEFILE_FIXED" = "true" ]; then
  69. echo "✅ **Makefile Fixed**: Found and replaced pattern with EXTRA_CFLAGS" >> $GITHUB_STEP_SUMMARY
  70. elif [ "$MAKEFILE_FIXED" = "already_fixed" ]; then
  71. echo "ℹ️ **Makefile Already Fixed**: EXTRA_CFLAGS already present" >> $GITHUB_STEP_SUMMARY
  72. else
  73. echo "❌ **Makefile Not Fixed**: Pattern not found (may not need fixing)" >> $GITHUB_STEP_SUMMARY
  74. fi
  75. echo "" >> $GITHUB_STEP_SUMMARY
  76. # Check parse-options.c changes - only report if version conditions match
  77. if [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.10" && "${{ inputs.sublevel }}" -le 186 ]] || \
  78. [[ "${{ inputs.android_version }}" == "android13" && "${{ inputs.kernel_version }}" == "5.15" && "${{ inputs.sublevel }}" -le 119 ]] || \
  79. [[ "${{ inputs.android_version }}" == "android14" && "${{ inputs.kernel_version }}" == "5.15" && "${{ inputs.sublevel }}" -le 110 ]]; then
  80. echo "### parse-options.c Changes" >> $GITHUB_STEP_SUMMARY
  81. echo "✅ Version ${{ inputs.android_version }} + kernel ${{ inputs.kernel_version }} (sublevel ${{ inputs.sublevel }}) matched conditions" >> $GITHUB_STEP_SUMMARY
  82. echo "- Applied variable declarations and loop syntax fixes to parse-options.c" >> $GITHUB_STEP_SUMMARY
  83. else
  84. echo "### parse-options.c Changes" >> $GITHUB_STEP_SUMMARY
  85. echo "❌ Version ${{ inputs.android_version }} + kernel ${{ inputs.kernel_version }} (sublevel ${{ inputs.sublevel }}) did not match fix conditions" >> $GITHUB_STEP_SUMMARY
  86. fi
  87. else
  88. echo "### No Changes Applied" >> $GITHUB_STEP_SUMMARY
  89. echo "- GLIBC < 2.38 detected, skipping all fixes" >> $GITHUB_STEP_SUMMARY
  90. fi
  91. - name: 'Final Kernel Fixes Summary'
  92. shell: bash
  93. run: |
  94. echo "## Final Kernel Fixes Summary" >> $GITHUB_STEP_SUMMARY
  95. echo "" >> $GITHUB_STEP_SUMMARY
  96. echo "**Kernel Version:** ${{ inputs.android_version }} + ${{ inputs.kernel_version }} (sublevel ${{ inputs.sublevel }})" >> $GITHUB_STEP_SUMMARY
  97. echo "" >> $GITHUB_STEP_SUMMARY
  98. echo "### ✅ Fixes Applied/Matched" >> $GITHUB_STEP_SUMMARY
  99. MATCHED_COUNT=0
  100. if [ "$MAKEFILE_FIXED" = "true" ] || [ "$MAKEFILE_FIXED" = "already_fixed" ]; then
  101. echo "- Makefile EXTRA_CFLAGS fix" >> $GITHUB_STEP_SUMMARY
  102. MATCHED_COUNT=$((MATCHED_COUNT + 1))
  103. fi
  104. if [ "$PARSE_OPTIONS_FIXED" = "true" ]; then
  105. echo "- parse-options.c variable declaration fixes" >> $GITHUB_STEP_SUMMARY
  106. MATCHED_COUNT=$((MATCHED_COUNT + 1))
  107. fi
  108. if [ $MATCHED_COUNT -eq 0 ]; then
  109. echo "- *None*" >> $GITHUB_STEP_SUMMARY
  110. fi
  111. echo "" >> $GITHUB_STEP_SUMMARY
  112. echo "### ❌ Fixes Not Applicable" >> $GITHUB_STEP_SUMMARY
  113. NOT_MATCHED_COUNT=0
  114. if [ "$MAKEFILE_FIXED" = "false" ]; then
  115. echo "- Makefile EXTRA_CFLAGS fix (pattern not found)" >> $GITHUB_STEP_SUMMARY
  116. NOT_MATCHED_COUNT=$((NOT_MATCHED_COUNT + 1))
  117. fi
  118. if [ "$PARSE_OPTIONS_FIXED" = "false" ]; then
  119. echo "- parse-options.c fixes (version doesn't match conditions)" >> $GITHUB_STEP_SUMMARY
  120. NOT_MATCHED_COUNT=$((NOT_MATCHED_COUNT + 1))
  121. fi
  122. if [ $NOT_MATCHED_COUNT -eq 0 ]; then
  123. echo "- *None*" >> $GITHUB_STEP_SUMMARY
  124. fi
  125. - name: 'Apply mmap.c fix for specific versions'
  126. shell: bash
  127. if: ${{ inputs.kernel_version == '6.6' && inputs.android_version == 'android15' && inputs.sublevel <= '58' }}
  128. working-directory: ${{ github.workspace }}/kernel/common
  129. run: |
  130. echo "[INFO] Checking for android15 + kernel 6.6 include fix..."
  131. if [[ "${{ inputs.android_version }}" == "android15" && "${{ inputs.kernel_version }}" == "6.6" ]]; then
  132. echo "[MATCH] android15 + 6.6, checking for fs.h include."
  133. cd "$GITHUB_WORKSPACE/kernel/common"
  134. if ! grep -qxF '#include <trace/hooks/fs.h>' ./fs/namespace.c; then
  135. echo "[INFO] Adding missing #include <trace/hooks/fs.h> to fs/namespace.c."
  136. sed -i '/#include <trace\/hooks\/blk.h>/a #include <trace\/hooks\/fs.h>' ./fs/namespace.c
  137. else
  138. echo "[INFO] #include <trace/hooks/fs.h> already present."
  139. fi
  140. fi
  141. - name: 'Apply mmap.c fix for specific versions'
  142. shell: bash
  143. if: ${{ (inputs.kernel_version == '5.10' && inputs.android_version == 'android12' && inputs.sublevel == 226) || (inputs.kernel_version == '5.10' && inputs.android_version == 'android13' && inputs.sublevel == 223) || (inputs.kernel_version == '5.15' && inputs.android_version == 'android13' && inputs.sublevel == 167) || (inputs.kernel_version == '5.10' && inputs.android_version == 'android13' && inputs.sublevel == 223) || (inputs.kernel_version == '5.15' && inputs.android_version == 'android14' && inputs.sublevel == 167) }}
  144. working-directory: ${{ github.workspace }}/kernel/common
  145. run: |
  146. echo "[INFO] Applying mmap.c fix for specific version combo."
  147. sed -i 's/\s*vm_flags_clear(new_vma, VM_PAD_MASK);/ new_vma->vm_flags \&= ~VM_PAD_MASK;/' mm/mmap.c