You've already forked KernelSU-Next
mirror of
https://github.com/KernelSU-Next/KernelSU-Next.git
synced 2025-08-27 23:46:34 +00:00
kernel: use ksu_strncpy_from_user_retry when kprobes hook sucompat pagefaults
This commit is contained in:
@@ -179,23 +179,8 @@ int ksu_handle_execve_sucompat(int *fd, const char __user **filename_user,
|
|||||||
if (unlikely(!filename_user))
|
if (unlikely(!filename_user))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
// nofault variant fails probably due to pagefault_disable
|
memset(path, 0, sizeof(path));
|
||||||
// some cpus dont really have that good speculative execution
|
ksu_strncpy_from_user_retry(path, *filename_user, sizeof(path));
|
||||||
// substitute set_fs, check if pointer is valid
|
|
||||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(5,0,0)
|
|
||||||
if (!access_ok(VERIFY_READ, *filename_user, sizeof(path)))
|
|
||||||
return 0;
|
|
||||||
#else
|
|
||||||
if (!access_ok(*filename_user, sizeof(path)))
|
|
||||||
return 0;
|
|
||||||
#endif
|
|
||||||
// success = returns number of bytes and should be less than path
|
|
||||||
long len = strncpy_from_user(path, *filename_user, sizeof(path));
|
|
||||||
if (len <= 0 || len > sizeof(path))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
// strncpy_from_user_nofault does this too
|
|
||||||
path[sizeof(path) - 1] = '\0';
|
|
||||||
|
|
||||||
if (likely(memcmp(path, su, sizeof(su))))
|
if (likely(memcmp(path, su, sizeof(su))))
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user