Re: [PATCH v3] kernel: audit.c: Add __rcu annotation to RCU pointer

From: Steven Rostedt
Date: Mon Dec 02 2019 - 17:26:44 EST


On Mon, 2 Dec 2019 16:19:15 -0500
Joel Fernandes <joel@xxxxxxxxxxxxxxxxx> wrote:

> Good idea to CC the following on RCU patches:
> Paul McKenney
> Steven Rostedt

I'm fine with this if it doesn't cause any rcu splats with sparse. Not
sure if use cases of RCU requires RCU maintainers Cc'd. Although we can
usually keep people from misusing it ;-)

-- Steve


> (Any others on the RCU maintainers list).
> And, the list: rcu@xxxxxxxxxxxxxxx
>
> Could anyone Ack the patch? Looks safe and straight forward.
>
> On Mon, Dec 02, 2019 at 12:03:48AM +0530, Amol Grover wrote:
> > Add __rcu annotation to RCU-protected global pointer auditd_conn.
> >
> > auditd_conn is an RCU-protected global pointer,i.e., accessed
> > via RCU methods rcu_dereference() and rcu_assign_pointer(),
> > hence it must be annotated with __rcu for sparse to report
> > warnings/errors correctly.
> >
> > Fix multiple instances of the sparse error:
> > error: incompatible types in comparison expression
> > (different address spaces)
> >
> > Reviewed-by: Joel Fernandes (Google) <joel@xxxxxxxxxxxxxxxxx>
> > Signed-off-by: Amol Grover <frextrite@xxxxxxxxx>
> > ---
> > v3:
> > - update changelog to be more descriptive
> >
> > v2:
> > - fix erroneous RCU pointer initialization
> >
> > kernel/audit.c | 5 +++--
> > 1 file changed, 3 insertions(+), 2 deletions(-)
> >
> > diff --git a/kernel/audit.c b/kernel/audit.c
> > index da8dc0db5bd3..ff7cfc61f53d 100644
> > --- a/kernel/audit.c
> > +++ b/kernel/audit.c
> > @@ -102,12 +102,13 @@ struct audit_net {
> > * This struct is RCU protected; you must either hold the RCU lock for reading
> > * or the associated spinlock for writing.
> > */
> > -static struct auditd_connection {
> > +struct auditd_connection {
> > struct pid *pid;
> > u32 portid;
> > struct net *net;
> > struct rcu_head rcu;
> > -} *auditd_conn = NULL;
> > +};
> > +static struct auditd_connection __rcu *auditd_conn;
> > static DEFINE_SPINLOCK(auditd_conn_lock);
> >
> > /* If audit_rate_limit is non-zero, limit the rate of sending audit records
> > --
> > 2.24.0
> >