lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <fcb9026b-d65d-64eb-7080-40078ad75cf1@efficios.com>
Date:   Mon, 5 Dec 2022 16:17:38 -0500
From:   Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
To:     Beau Belgrave <beaub@...ux.microsoft.com>, rostedt@...dmis.org,
        mhiramat@...nel.org, dcook@...ux.microsoft.com,
        alanau@...ux.microsoft.com, brauner@...nel.org,
        akpm@...ux-foundation.org
Cc:     linux-trace-devel@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v5 02/11] tracing/user_events: Track fork/exec/exit for mm
 lifetime

On 2022-12-05 16:00, Beau Belgrave wrote:
> During tracefs discussions it was decided instead of requiring a mapping
> within a user-process to track the lifetime of memory descriptors we
> should hook the appropriate calls. Do this by adding the minimal stubs
> required for task fork, exec, and exit. Currently this is just a NOP.
> Future patches will implement these calls fully.

Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>

> 
> Suggested-by: Mathieu Desnoyers <mathieu.desnoyers@...icios.com>
> Signed-off-by: Beau Belgrave <beaub@...ux.microsoft.com>
> ---
>   fs/exec.c                   |  2 ++
>   include/linux/sched.h       |  5 +++++
>   include/linux/user_events.h | 16 +++++++++++++++-
>   kernel/exit.c               |  2 ++
>   kernel/fork.c               |  2 ++
>   5 files changed, 26 insertions(+), 1 deletion(-)
> 
> diff --git a/fs/exec.c b/fs/exec.c
> index a0b1f0337a62..75ca6fbd195c 100644
> --- a/fs/exec.c
> +++ b/fs/exec.c
> @@ -64,6 +64,7 @@
>   #include <linux/io_uring.h>
>   #include <linux/syscall_user_dispatch.h>
>   #include <linux/coredump.h>
> +#include <linux/user_events.h>
>   
>   #include <linux/uaccess.h>
>   #include <asm/mmu_context.h>
> @@ -1842,6 +1843,7 @@ static int bprm_execve(struct linux_binprm *bprm,
>   	current->fs->in_exec = 0;
>   	current->in_execve = 0;
>   	rseq_execve(current);
> +	user_events_execve(current);
>   	acct_update_integrals(current);
>   	task_numa_free(current, false);
>   	return retval;
> diff --git a/include/linux/sched.h b/include/linux/sched.h
> index ffb6eb55cd13..61ed2f9deb26 100644
> --- a/include/linux/sched.h
> +++ b/include/linux/sched.h
> @@ -69,6 +69,7 @@ struct sighand_struct;
>   struct signal_struct;
>   struct task_delay_info;
>   struct task_group;
> +struct user_event_mm;
>   
>   /*
>    * Task state bitmask. NOTE! These bits are also
> @@ -1528,6 +1529,10 @@ struct task_struct {
>   	union rv_task_monitor		rv[RV_PER_TASK_MONITORS];
>   #endif
>   
> +#ifdef CONFIG_USER_EVENTS
> +	struct user_event_mm		*user_event_mm;
> +#endif
> +
>   	/*
>   	 * New fields for task_struct should be added above here, so that
>   	 * they are included in the randomized portion of task_struct.
> diff --git a/include/linux/user_events.h b/include/linux/user_events.h
> index 036b360f3d97..3d747c45d2fa 100644
> --- a/include/linux/user_events.h
> +++ b/include/linux/user_events.h
> @@ -12,7 +12,21 @@
>   #include <uapi/linux/user_events.h>
>   
>   #ifdef CONFIG_USER_EVENTS
> -#else
> +struct user_event_mm {
> +};
>   #endif
>   
> +static inline void user_events_fork(struct task_struct *t,
> +				    unsigned long clone_flags)
> +{
> +}
> +
> +static inline void user_events_execve(struct task_struct *t)
> +{
> +}
> +
> +static inline void user_events_exit(struct task_struct *t)
> +{
> +}
> +
>   #endif /* _LINUX_USER_EVENTS_H */
> diff --git a/kernel/exit.c b/kernel/exit.c
> index 35e0a31a0315..0bfadc26d278 100644
> --- a/kernel/exit.c
> +++ b/kernel/exit.c
> @@ -67,6 +67,7 @@
>   #include <linux/io_uring.h>
>   #include <linux/kprobes.h>
>   #include <linux/rethook.h>
> +#include <linux/user_events.h>
>   
>   #include <linux/uaccess.h>
>   #include <asm/unistd.h>
> @@ -769,6 +770,7 @@ void __noreturn do_exit(long code)
>   
>   	coredump_task_exit(tsk);
>   	ptrace_event(PTRACE_EVENT_EXIT, code);
> +	user_events_exit(tsk);
>   
>   	validate_creds_for_do_exit(tsk);
>   
> diff --git a/kernel/fork.c b/kernel/fork.c
> index 08969f5aa38d..a4be76276ccb 100644
> --- a/kernel/fork.c
> +++ b/kernel/fork.c
> @@ -97,6 +97,7 @@
>   #include <linux/scs.h>
>   #include <linux/io_uring.h>
>   #include <linux/bpf.h>
> +#include <linux/user_events.h>
>   
>   #include <asm/pgalloc.h>
>   #include <linux/uaccess.h>
> @@ -2487,6 +2488,7 @@ static __latent_entropy struct task_struct *copy_process(
>   
>   	trace_task_newtask(p, clone_flags);
>   	uprobe_copy_process(p, clone_flags);
> +	user_events_fork(p, clone_flags);
>   
>   	copy_oom_score_adj(clone_flags, p);
>   

-- 
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ