From f59dd7e7572f998bfdc3abe381f4f186a3455042 Mon Sep 17 00:00:00 2001 From: Oracle Public Cloud User Date: Sat, 28 Mar 2026 14:21:09 +0000 Subject: [PATCH 1/2] CRITICAL FIX v39: FINAL umount -> sys_umount fix for kernel 4.9 The pre-patched core_hook.c.patched file contains umount() calls that don't exist in kernel 4.9. This fix adds a v39 script that runs AFTER the pre-patched file is applied to ensure ALL umount() calls are replaced with sys_umount(). Issue: Build #53 failed with undefined reference to 'umount' at line 566 Root Cause: Pre-patched file overwrites v38 fixes Solution: Run v39 fix after pre-patched file application Changes: - Added fix_kernelsu_49_v39.py with aggressive umount() replacement - Updated workflow to run v39 after pre-patched file application - Ensures sys_umount declaration is added for kernel 4.9 --- .../workflows/crdroid-plus-kernel-build.yml | 12 ++ build-scripts/fix_kernelsu_49_v39.py | 160 ++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 build-scripts/fix_kernelsu_49_v39.py diff --git a/.github/workflows/crdroid-plus-kernel-build.yml b/.github/workflows/crdroid-plus-kernel-build.yml index 45e2c09..fe6018e 100644 --- a/.github/workflows/crdroid-plus-kernel-build.yml +++ b/.github/workflows/crdroid-plus-kernel-build.yml @@ -437,6 +437,18 @@ jobs: fi fi + # CRITICAL FIX v39: FINAL umount fix - runs AFTER pre-patched file + # The pre-patched file still contains umount() calls that don't exist in kernel 4.9 + echo "=== CRITICAL FIX v39: FINAL aggressive umount -> sys_umount fix ===" + + if [ -f "$GITHUB_WORKSPACE/build-scripts/fix_kernelsu_49_v39.py" ]; then + echo "Running kernel 4.9 compatibility fix script v39 (FINAL)..." + KERNEL_DIR=~/kernel-build/android_kernel_oneplus_sdm845 python3 "$GITHUB_WORKSPACE/build-scripts/fix_kernelsu_49_v39.py" ~/kernel-build/android_kernel_oneplus_sdm845 + elif [ -f "$GITHUB_WORKSPACE/fix_kernelsu_49_v39.py" ]; then + echo "Running kernel 4.9 compatibility fix script v39 from repo root..." + KERNEL_DIR=~/kernel-build/android_kernel_oneplus_sdm845 python3 "$GITHUB_WORKSPACE/fix_kernelsu_49_v39.py" ~/kernel_build/android_kernel_oneplus_sdm845 + fi + # Verification: Show line 591 of core_hook.c to verify the fix echo "=== Verifying core_hook.c line 591 (flags fix) ===" CORE_HOOK_FILE=$(readlink -f drivers/kernelsu/core_hook.c 2>/dev/null || echo "") diff --git a/build-scripts/fix_kernelsu_49_v39.py b/build-scripts/fix_kernelsu_49_v39.py new file mode 100644 index 0000000..2a11cf0 --- /dev/null +++ b/build-scripts/fix_kernelsu_49_v39.py @@ -0,0 +1,160 @@ +#!/usr/bin/env python3 +""" +KernelSU-Next kernel 4.9 compatibility fix script v39 +FINAL FIX: Aggressive umount() -> sys_umount() replacement for kernel 4.9 + +Issue: The pre-patched core_hook.c.patched file contains umount() calls +which don't exist in kernel 4.9. This fix runs AFTER the pre-patched file +is applied to ensure all umount calls are replaced. + +This fix is designed to be the FINAL and MOST AGGRESSIVE fix. +""" + +import sys +import os +import re + +def aggressive_umount_fix(file_path): + """Aggressively replace all umount() calls with sys_umount()""" + + if not os.path.exists(file_path): + return False, "File not found" + + with open(file_path, 'r') as f: + content = f.read() + + original_content = content + changes = [] + + # Pattern 1: Direct umount(something) -> sys_umount(something, 0) + # This is the most common pattern causing the undefined reference + pattern1 = r'(? 1: + kernel_dir = sys.argv[1] + + if not kernel_dir: + print("Usage: KERNEL_DIR=/path/to/kernel python3 fix_kernelsu_49_v39.py [kernel_dir]") + sys.exit(1) + + print("=" * 60) + print("KernelSU-Next 4.9 Compatibility Fix v39 (FINAL)") + print("=" * 60) + print(f"Kernel directory: {kernel_dir}") + print("") + print("This fix aggressively replaces ALL umount() calls with sys_umount()") + print("It runs AFTER the pre-patched file is applied.") + print("") + + results = process_core_hook_files(kernel_dir) + + print("\n" + "=" * 60) + print("SUMMARY") + print("=" * 60) + + if results: + for path, fixed, declared in results: + status = "FIXED" if fixed else "OK" + print(f" [{status}] {path}") + print("\nv39 fix applied. Build should now succeed.") + return 0 + else: + print(" WARNING: No core_hook.c files found!") + print(f" Searched in: {kernel_dir}") + return 1 + + +if __name__ == "__main__": + sys.exit(main()) From dc3fac503c071607b56377e4b36f438add81e172 Mon Sep 17 00:00:00 2001 From: Oracle Public Cloud User Date: Sat, 28 Mar 2026 14:26:05 +0000 Subject: [PATCH 2/2] Address CodeRabbit review feedback for v39 fix - Fixed path typo: kernel_build -> kernel-build (underscore to hyphen) - Added deduplication for core_hook.c file processing (seen_paths set) - Renamed unused 'declared' variable to '_declared' to signal intentional discard --- .../workflows/crdroid-plus-kernel-build.yml | 2 +- .../fix_kernelsu_49_v39.cpython-311.pyc | Bin 0 -> 8189 bytes build-scripts/fix_kernelsu_49_v39.py | 50 +++++++++++------- 3 files changed, 31 insertions(+), 21 deletions(-) create mode 100644 build-scripts/__pycache__/fix_kernelsu_49_v39.cpython-311.pyc diff --git a/.github/workflows/crdroid-plus-kernel-build.yml b/.github/workflows/crdroid-plus-kernel-build.yml index fe6018e..98cc582 100644 --- a/.github/workflows/crdroid-plus-kernel-build.yml +++ b/.github/workflows/crdroid-plus-kernel-build.yml @@ -446,7 +446,7 @@ jobs: KERNEL_DIR=~/kernel-build/android_kernel_oneplus_sdm845 python3 "$GITHUB_WORKSPACE/build-scripts/fix_kernelsu_49_v39.py" ~/kernel-build/android_kernel_oneplus_sdm845 elif [ -f "$GITHUB_WORKSPACE/fix_kernelsu_49_v39.py" ]; then echo "Running kernel 4.9 compatibility fix script v39 from repo root..." - KERNEL_DIR=~/kernel-build/android_kernel_oneplus_sdm845 python3 "$GITHUB_WORKSPACE/fix_kernelsu_49_v39.py" ~/kernel_build/android_kernel_oneplus_sdm845 + KERNEL_DIR=~/kernel-build/android_kernel_oneplus_sdm845 python3 "$GITHUB_WORKSPACE/fix_kernelsu_49_v39.py" ~/kernel-build/android_kernel_oneplus_sdm845 fi # Verification: Show line 591 of core_hook.c to verify the fix diff --git a/build-scripts/__pycache__/fix_kernelsu_49_v39.cpython-311.pyc b/build-scripts/__pycache__/fix_kernelsu_49_v39.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..71900f4fce439ae9eb5495e041cbc524714c1127 GIT binary patch literal 8189 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