Messages in this thread | | | From | (Eric W. Biederman) | Date | Wed, 05 Feb 2020 16:59:52 -0600 | Subject | Re: [PATCH] signal.c: Fix sparse warnings |
| |
madhuparnabhowmik10@gmail.com writes:
> From: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com> > > This patch fixes the following two sparse warnings caused due to > accessing RCU protected pointer tsk->parent without rcu primitives. > > kernel/signal.c:1948:65: warning: incorrect type in argument 1 (different address spaces) > kernel/signal.c:1948:65: expected struct task_struct *tsk > kernel/signal.c:1948:65: got struct task_struct [noderef] <asn:4> *parent > kernel/signal.c:1949:40: warning: incorrect type in argument 1 (different address spaces) > kernel/signal.c:1949:40: expected void const volatile *p > kernel/signal.c:1949:40: got struct cred const [noderef] <asn:4> *[noderef] <asn:4> * > kernel/signal.c:1949:40: warning: incorrect type in argument 1 (different address spaces) > kernel/signal.c:1949:40: expected void const volatile *p > kernel/signal.c:1949:40: got struct cred const [noderef] <asn:4> *[noderef] <asn:4> * > > Signed-off-by: Madhuparna Bhowmik <madhuparnabhowmik10@gmail.com> > --- > kernel/signal.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/kernel/signal.c b/kernel/signal.c > index 9ad8dea93dbb..8227058ea8c4 100644 > --- a/kernel/signal.c > +++ b/kernel/signal.c > @@ -1945,8 +1945,8 @@ bool do_notify_parent(struct task_struct *tsk, int sig) > * correct to rely on this > */ > rcu_read_lock(); > - info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(tsk->parent)); > - info.si_uid = from_kuid_munged(task_cred_xxx(tsk->parent, user_ns), > + info.si_pid = task_pid_nr_ns(tsk, task_active_pid_ns(rcu_dereference(tsk->parent))); > + info.si_uid = from_kuid_munged(task_cred_xxx(rcu_dereference(tsk->parent), user_ns), > task_uid(tsk)); > rcu_read_unlock();
Still wrong because that access fundamentally depends upon the task_list_lock no the rcu_read_lock. Things need to be consistent for longer than the rcu_read_lock is held.
This patch makes sparse happy and confuses programmers who are trying to read the code.
Eric
| |