Skip to content

Commit c04de0c

Browse files
edumazetPaolo Abeni
authored andcommitted
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: b2e9821 ("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>
1 parent f79f9b7 commit c04de0c

1 file changed

Lines changed: 5 additions & 3 deletions

File tree

net/core/dev.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4241,9 +4241,11 @@ static inline int __dev_xmit_skb(struct sk_buff *skb, struct Qdisc *q,
42414241
int count = 0;
42424242

42434243
llist_for_each_entry_safe(skb, next, ll_list, ll_node) {
4244-
prefetch(next);
4245-
prefetch(&next->priority);
4246-
skb_mark_not_on_list(skb);
4244+
if (next) {
4245+
prefetch(next);
4246+
prefetch(&next->priority);
4247+
skb_mark_not_on_list(skb);
4248+
}
42474249
rc = dev_qdisc_enqueue(skb, q, &to_free, txq);
42484250
count++;
42494251
}

0 commit comments

Comments
 (0)