feat: detect proc_ops support via header parsing instead of version check. (#411)

Some kernels (e.g. 5.4 with backports) include proc_ops despite being
older than 5.6.0. Replace hardcoded version check with runtime header
detection to handle these cases.

- Check for "struct proc_ops" in include/linux/proc_fs.h
- Use KSU_COMPAT_HAS_PROC_OPS macro for conditional compilation
- Fixes build failures on kernels with backported proc_ops

Signed-off-by: JackAltman
This commit is contained in:
JackAltman
2025-09-20 13:28:05 +08:00
committed by ShirkNeko
parent 3a61da7f45
commit 36742cc17e
2 changed files with 7 additions and 2 deletions

View File

@@ -126,6 +126,11 @@ $(info -- KernelSU/compat: new vfs_getattr() found)
ccflags-y += -DKSU_HAS_NEW_VFS_GETATTR ccflags-y += -DKSU_HAS_NEW_VFS_GETATTR
endif endif
# Function proc_ops check
ifeq ($(shell grep -q "struct proc_ops " $(srctree)/include/linux/proc_fs.h; echo $$?),0)
ccflags-y += -DKSU_COMPAT_HAS_PROC_OPS
endif
# Custom Signs # Custom Signs
ifdef KSU_EXPECTED_SIZE ifdef KSU_EXPECTED_SIZE
ccflags-y += -DEXPECTED_SIZE=$(KSU_EXPECTED_SIZE) ccflags-y += -DEXPECTED_SIZE=$(KSU_EXPECTED_SIZE)

View File

@@ -78,7 +78,7 @@ static ssize_t uid_scanner_write(struct file *file, const char __user *buffer,
return count; return count;
} }
#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,6,0) #ifdef KSU_COMPAT_HAS_PROC_OPS
static const struct proc_ops uid_scanner_proc_ops = { static const struct proc_ops uid_scanner_proc_ops = {
.proc_open = uid_scanner_open, .proc_open = uid_scanner_open,
.proc_read = seq_read, .proc_read = seq_read,
@@ -133,4 +133,4 @@ void ksu_throne_comm_exit(void)
} }
pr_info("throne communication cleaned up\n"); pr_info("throne communication cleaned up\n");
} }