Skip to contentSkip to conversation

kernel: audit.c: Add __rcu annotation to RCU pointer

PATCH In review Amol Grover 4 participants 7 messages Dec 1, 2019 – Dec 9, 2019

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH v3 1/1 kernel: audit.c: Add __rcu annotation to RCU pointer

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)

---
v3:
- update changelog to be more descriptive

v2:
- fix erroneous RCU pointer initialization

 kernel/audit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/audit.c +3 -2
index da8dc0db5bd3..ff7cfc61f53d 100644
@@ -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
Signature · 1 line
2.24.0
#1 lore raw

Good idea to CC the following on RCU patches:
Paul McKenney
Steven Rostedt
(Any others on the RCU maintainers list).
And, the list: [email protected]

Could anyone Ack the patch? Looks safe and straight forward.

Quoted 46 lines · Amol Grover

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)

---
v3:
- update changelog to be more descriptive

v2:
- fix erroneous RCU pointer initialization

 kernel/audit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/audit.c +3 -2
index da8dc0db5bd3..ff7cfc61f53d 100644
@@ -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
Signature · 1 line
2.24.0
#2 lore raw
Quoted 3 lines · On Mon, 2 Dec 2019 16:19:15 -0500 Joel Fernandes <[email protected]> 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

Quoted 52 lines

(Any others on the RCU maintainers list).
And, the list: [email protected]

Could anyone Ack the patch? Looks safe and straight forward.

Quoted 46 lines · Amol Grover

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)

---
v3:
- update changelog to be more descriptive

v2:
- fix erroneous RCU pointer initialization

 kernel/audit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/audit.c +3 -2
index da8dc0db5bd3..ff7cfc61f53d 100644
@@ -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
Signature · 1 line
2.24.0
#3 lore raw
Quoted 10 lines · Steven Rostedt
Quoted 3 lines · On Mon, 2 Dec 2019 16:19:15 -0500 Joel Fernandes <[email protected]> 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 ;-)

Yes true :) Thanks for taking a look.

- Joel

Quoted 57 lines

-- Steve

Quoted 52 lines

(Any others on the RCU maintainers list).
And, the list: [email protected]

Could anyone Ack the patch? Looks safe and straight forward.

Quoted 46 lines · Amol Grover

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)

---
v3:
- update changelog to be more descriptive

v2:
- fix erroneous RCU pointer initialization

 kernel/audit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/audit.c +3 -2
index da8dc0db5bd3..ff7cfc61f53d 100644
@@ -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
Signature · 1 line
2.24.0
maintainer
#4 lore raw
In reply to Joel Fernandes
Quoted 7 lines · Joel Fernandes

Good idea to CC the following on RCU patches:
Paul McKenney
Steven Rostedt
(Any others on the RCU maintainers list).
And, the list: [email protected]

Could anyone Ack the patch? Looks safe and straight forward.

FWIW, this looks reasonable to me, but I don't see this as a critical fix that needs to go in during the merge window. Unless I see any objections, I'll plan on merging this into audit/next once the merge window closes.

Quoted 43 lines · Amol Grover
Quoted 42 lines

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)

---
v3:
- update changelog to be more descriptive

v2:
- fix erroneous RCU pointer initialization

 kernel/audit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/audit.c +3 -2
index da8dc0db5bd3..ff7cfc61f53d 100644
@@ -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);
 
Quoted 4 lines
Quoted 4 lines
kernel/audit.c +0 -1
 /* If audit_rate_limit is non-zero, limit the rate of sending audit records
--

2.24.0

--
paul moore
www.paul-moore.com

#5 lore raw
Quoted 7 lines · Paul Moore
Quoted 6 lines · Joel Fernandes

Good idea to CC the following on RCU patches:
Paul McKenney
Steven Rostedt
(Any others on the RCU maintainers list).
And, the list: [email protected]

Quoted 6 lines
Quoted 1 line

Could anyone Ack the patch? Looks safe and straight forward.

FWIW, this looks reasonable to me, but I don't see this as a critical fix that needs to go in during the merge window. Unless I see any objections, I'll plan on merging this into audit/next once the merge window closes.

Sounds good, thanks!

- Joel

Quoted 53 lines
Quoted 43 lines · Amol Grover
Quoted 42 lines

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)

---
v3:
- update changelog to be more descriptive

v2:
- fix erroneous RCU pointer initialization

 kernel/audit.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)
kernel/audit.c +3 -2
index da8dc0db5bd3..ff7cfc61f53d 100644
@@ -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);
 
Quoted 4 lines
Quoted 4 lines
kernel/audit.c +0 -1
 /* If audit_rate_limit is non-zero, limit the rate of sending audit records
--

2.24.0

--
paul moore
www.paul-moore.com

maintainer
#6 lore raw
Quoted 8 lines · Joel Fernandes
Quoted 7 lines · Paul Moore
Quoted 6 lines · Joel Fernandes

Good idea to CC the following on RCU patches:
Paul McKenney
Steven Rostedt
(Any others on the RCU maintainers list).
And, the list: [email protected]

Quoted 8 lines
Quoted 6 lines
Quoted 1 line

Could anyone Ack the patch? Looks safe and straight forward.

FWIW, this looks reasonable to me, but I don't see this as a critical fix that needs to go in during the merge window. Unless I see any objections, I'll plan on merging this into audit/next once the merge window closes.

Sounds good, thanks!

FYI, it's in audit/next now. Thanks again.

Signature · 2 lines
paul moore
www.paul-moore.com