mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 03:44:45 +01:00
net: avoid prefetching NULL pointers
Aditya Gupta reported PowerPC crashes bisected to the blamed commit.
Apparently some platforms do not allow prefetch() on arbitrary pointers.
prefetch(next);
prefetch(&next->priority); // CRASH when next == NULL
Only NULL seems to be supported, with specific handling in prefetch().
Add a conditional to avoid the two prefetches and the skb->next clearing
for the last skb in the list.
Fixes: b2e9821cff ("net: prefech skb->priority in __dev_xmit_skb()")
Reported-by: Aditya Gupta <adityag@linux.ibm.com>
Closes: https://lore.kernel.org/netdev/e9f4abee-b132-440f-a50e-bced0868b5a7@linux.ibm.com/T/#mddc372b64ec5a3b181acc9ee3909110c391cc18a
Signed-off-by: Eric Dumazet <edumazet@google.com>
Tested-by: Aditya Gupta <adityag@linux.ibm.com>
Link: https://patch.msgid.link/20251218081844.809008-1-edumazet@google.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
f79f9b7ace
commit
c04de0c795
1 changed files with 5 additions and 3 deletions
|
|
@ -4241,9 +4241,11 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
|
|||
int count = 0;
|
||||
|
||||
llist_for_each_entry_safe(skb, next, ll_list, ll_node) {
|
||||
prefetch(next);
|
||||
prefetch(&next->priority);
|
||||
skb_mark_not_on_list(skb);
|
||||
if (next) {
|
||||
prefetch(next);
|
||||
prefetch(&next->priority);
|
||||
skb_mark_not_on_list(skb);
|
||||
}
|
||||
rc = dev_qdisc_enqueue(skb, q, &to_free, txq);
|
||||
count++;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue