Re: [PATCH v4] proc: add config & param to block forcing mem writes
From: Linus Torvalds
Date: Tue Jul 30 2024 - 19:19:01 EST
On Tue, 30 Jul 2024 at 16:09, Jeff Xu <jeffxu@xxxxxxxxxx> wrote:
>
> > + task = get_proc_task(file_inode(file));
> > + if (task) {
> > + ptrace_active = task->ptrace && task->mm == mm && task->parent == current;
>
> Do we need to call "read_lock(&tasklist_lock);" ?
> see comments in ptrace_check_attach() of kernel/ptrace.c
Well, technically I guess the tasklist_lock should be taken.
Practically speaking, maybe just using READ_ONCE() for these fields
would really be sufficient.
Yes, it could "race" with the task exiting or just detaching, but the
logic would basically be "at one point we were tracing it", and since
this fundamentally a "one-point" situation (with the actual _accesses_
happening later anyway), logically that should be sufficient.
I mean - none of this is about "permissions" per se. We actually did
the proper *permission* check at open() time regardless of all this
code. This is more of a further tightening of the rules (ie it has
gone from "are we allowed to ptrace" to "are we actually actively
ptracing".
I suspect that the main difference between the two situations is
probably (a) one extra step required and (b) whatever extra system
call security things people might have which may disable an actual
ptrace() or whatever..
Linus