From: David Howells <dhowells@redhat.com>
To: netdev@vger.kernel.org
Cc: David Howells <dhowells@redhat.com>,
Marc Dionne <marc.dionne@auristor.com>,
Jakub Kicinski <kuba@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Paolo Abeni <pabeni@redhat.com>,
linux-afs@lists.infradead.org, linux-kernel@vger.kernel.org,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
John Johansen <john.johansen@canonical.com>,
Simon Horman <horms@kernel.org>,
apparmor@lists.ubuntu.com, stable@kernel.org
Subject: [PATCH net v2 04/10] list: Move on_list_rcu() to list.h and add on_list() also
Date: Mon, 23 Mar 2026 15:04:55 +0000 [thread overview]
Message-ID: <20260323150505.3513839-5-dhowells@redhat.com> (raw)
In-Reply-To: <20260323150505.3513839-1-dhowells@redhat.com>
Unfortunately, list_empty() is not usable with an entry that has been
removed from a list with list_del_rcu() as ->next must be left pointing at
the following entry so as not to break traversal under RCU.
Solve this by moving on_list_rcu() from AppArmor to linux/list.h, and
turning it into an inline function.
Also add an on_list() counterpart (functionally, this is just an antonym
for list_empty()), but the name looks less awkward when applied to a
non-head element. We probably don't want to use on_list_rcu() generally
because it requires an extra check as ->prev is set differently in the two
cases.
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
cc: John Johansen <john.johansen@canonical.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: Eric Dumazet <edumazet@google.com>
cc: "David S. Miller" <davem@davemloft.net>
cc: Jakub Kicinski <kuba@kernel.org>
cc: Paolo Abeni <pabeni@redhat.com>
cc: Simon Horman <horms@kernel.org>
cc: linux-afs@lists.infradead.org
cc: apparmor@lists.ubuntu.com
cc: netdev@vger.kernel.org
cc: stable@kernel.org
---
include/linux/list.h | 26 ++++++++++++++++++++++++++
security/apparmor/include/policy.h | 2 --
2 files changed, 26 insertions(+), 2 deletions(-)
diff --git a/include/linux/list.h b/include/linux/list.h
index 00ea8e5fb88b..d224e7210d1b 100644
--- a/include/linux/list.h
+++ b/include/linux/list.h
@@ -381,6 +381,32 @@ static inline int list_empty(const struct list_head *head)
return READ_ONCE(head->next) == head;
}
+/**
+ * on_list - Test whether an entry is on a list.
+ * @entry: The entry to check
+ *
+ * Test whether an entry is on a list. Safe to use on an entry initialised
+ * with INIT_LIST_HEAD() or LIST_HEAD() or removed with things like
+ * list_del_init(). Not safe for use with list_del() or list_del_rcu().
+ */
+static inline bool on_list(const struct list_head *entry)
+{
+ return !list_empty(entry);
+}
+
+/**
+ * on_list_rcu - Test whether an entry is on a list (RCU-del safe).
+ * @entry: The entry to check
+ *
+ * Test whether an entry is on a list. Safe to use on an entry initialised
+ * with INIT_LIST_HEAD() or LIST_HEAD() or removed with things like
+ * list_del_init(). Also safe for use with list_del() or list_del_rcu().
+ */
+static inline bool on_list_rcu(const struct list_head *entry)
+{
+ return !list_empty(entry) && entry->prev != LIST_POISON2;
+}
+
/**
* list_del_init_careful - deletes entry from list and reinitialize it.
* @entry: the element to delete from the list.
diff --git a/security/apparmor/include/policy.h b/security/apparmor/include/policy.h
index 3895f8774a3f..c3697c23bbed 100644
--- a/security/apparmor/include/policy.h
+++ b/security/apparmor/include/policy.h
@@ -57,8 +57,6 @@ extern const char *const aa_profile_mode_names[];
#define profile_is_stale(_profile) (label_is_stale(&(_profile)->label))
-#define on_list_rcu(X) (!list_empty(X) && (X)->prev != LIST_POISON2)
-
/* flags in the dfa accept2 table */
enum dfa_accept_flags {
ACCEPT_FLAG_OWNER = 1,
next prev parent reply other threads:[~2026-03-23 15:05 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-23 15:04 [PATCH net v2 00/10] rxrpc: Miscellaneous fixes David Howells
2026-03-23 15:04 ` [PATCH net v2 01/10] rxrpc: Fix key quota calculation for multitoken keys David Howells
2026-03-23 15:04 ` [PATCH net v2 02/10] rxrpc: Fix key parsing memleak David Howells
2026-03-23 15:04 ` [PATCH net v2 03/10] rxrpc: Fix anonymous key handling David Howells
2026-03-23 15:04 ` David Howells [this message]
2026-03-23 22:44 ` [PATCH net v2 04/10] list: Move on_list_rcu() to list.h and add on_list() also kernel test robot
2026-03-23 22:55 ` kernel test robot
2026-03-23 15:04 ` [PATCH net v2 05/10] rxrpc: Fix call removal to use RCU safe deletion David Howells
2026-03-23 15:04 ` [PATCH net v2 06/10] rxrpc: Fix RxGK token loading to check bounds David Howells
2026-03-23 15:04 ` [PATCH net v2 07/10] rxrpc: Fix use of wrong skb when comparing queued RESP challenge serial David Howells
2026-03-23 15:04 ` [PATCH net v2 08/10] rxrpc: Fix rack timer warning to report unexpected mode David Howells
2026-03-23 15:05 ` [PATCH net v2 09/10] rxrpc: Fix keyring reference count leak in rxrpc_setsockopt() David Howells
2026-03-23 15:05 ` [PATCH net v2 10/10] rxrpc: Fix key reference count leak from call->key David Howells
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260323150505.3513839-5-dhowells@redhat.com \
--to=dhowells@redhat.com \
--cc=apparmor@lists.ubuntu.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=john.johansen@canonical.com \
--cc=kuba@kernel.org \
--cc=linux-afs@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=marc.dionne@auristor.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=stable@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.