diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 9d4ee2802caf..9abc0d1f53a3 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -433,3 +433,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_reader_owned); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_reader_owned); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_record_rwsem_writer_owned); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_clear_rwsem_writer_owned); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pr_set_vma_name_bypass); diff --git a/include/trace/hooks/sys.h b/include/trace/hooks/sys.h index e2d5d6d4fc14..120bfedea008 100644 --- a/include/trace/hooks/sys.h +++ b/include/trace/hooks/sys.h @@ -11,6 +11,10 @@ struct task_struct; DECLARE_HOOK(android_vh_syscall_prctl_finished, TP_PROTO(int option, struct task_struct *task), TP_ARGS(option, task)); +DECLARE_RESTRICTED_HOOK(android_rvh_pr_set_vma_name_bypass, + TP_PROTO(struct mm_struct *mm, unsigned long addr, unsigned long size, + struct anon_vma_name *anon_name, int *error, bool *bypass), + TP_ARGS(mm, addr, size, anon_name, error, bypass), 1); #endif #include diff --git a/kernel/sys.c b/kernel/sys.c index 7a5dca7dfac3..380cee197118 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -2330,6 +2330,7 @@ static int prctl_set_vma(unsigned long opt, unsigned long addr, struct mm_struct *mm = current->mm; const char __user *uname; struct anon_vma_name *anon_name = NULL; + bool bypass = false; int error; switch (opt) { @@ -2356,6 +2357,10 @@ static int prctl_set_vma(unsigned long opt, unsigned long addr, } + trace_android_rvh_pr_set_vma_name_bypass(mm, addr, size, anon_name, + &error, &bypass); + if (bypass) + return error; mmap_write_lock(mm); error = madvise_set_anon_name(mm, addr, size, anon_name); mmap_write_unlock(mm);