diff --git a/binder/binder.c b/binder/binder.c index 1b97cfc..a7e620b 100644 --- a/binder/binder.c +++ b/binder/binder.c @@ -2236,12 +2236,17 @@ static void binder_deferred_fd_close(int fd) if (!twcb) return; init_task_work(&twcb->twork, binder_do_fd_close); -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,11,0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,19,0)) + twcb->file = close_fd_get_file(fd); +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,11,0)) close_fd_get_file(fd, &twcb->file); #else __close_fd_get_file(fd, &twcb->file); #endif if (twcb->file) { +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,19,0)) + get_file(twcb->file); +#endif filp_close(twcb->file, current->files); task_work_add(current, &twcb->twork, TWA_RESUME); } else { diff --git a/binder/deps.c b/binder/deps.c index 726b1b1..319e82f 100644 --- a/binder/deps.c +++ b/binder/deps.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -69,10 +70,16 @@ static unsigned long kallsyms_lookup_name_wrapper(const char *name) #endif } +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,19,0)) +static struct file *(*close_fd_get_file_ptr)(unsigned int fd) +#else +static int (*close_fd_get_file_ptr)(unsigned int fd, struct file **res) +#endif + = NULL; -static int (*close_fd_get_file_ptr)(unsigned int fd, struct file **res) = NULL; - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,11,0)) +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,19,0)) +struct file *close_fd_get_file(unsigned int fd) +#elif (LINUX_VERSION_CODE >= KERNEL_VERSION(5,11,0)) int close_fd_get_file(unsigned int fd, struct file **res) #else int __close_fd_get_file(unsigned int fd, struct file **res) @@ -84,7 +91,12 @@ int __close_fd_get_file(unsigned int fd, struct file **res) #else close_fd_get_file_ptr = kallsyms_lookup_name_wrapper("__close_fd_get_file"); #endif + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5,19,0)) + return close_fd_get_file_ptr(fd); +#else return close_fd_get_file_ptr(fd, res); +#endif } static int (*can_nice_ptr)(const struct task_struct *, const int) = NULL;