File tree Expand file tree Collapse file tree 1 file changed +4
-6
lines changed Expand file tree Collapse file tree 1 file changed +4
-6
lines changed Original file line number Diff line number Diff line change @@ -400,15 +400,11 @@ static struct sk_buff *ndisc_alloc_skb(struct net_device *dev,
400400{
401401 int hlen = LL_RESERVED_SPACE (dev );
402402 int tlen = dev -> needed_tailroom ;
403- struct sock * sk = dev_net (dev )-> ipv6 .ndisc_sk ;
404403 struct sk_buff * skb ;
405404
406405 skb = alloc_skb (hlen + sizeof (struct ipv6hdr ) + len + tlen , GFP_ATOMIC );
407- if (!skb ) {
408- ND_PRINTK (0 , err , "ndisc: %s failed to allocate an skb\n" ,
409- __func__ );
406+ if (!skb )
410407 return NULL ;
411- }
412408
413409 skb -> protocol = htons (ETH_P_IPV6 );
414410 skb -> dev = dev ;
@@ -419,7 +415,9 @@ static struct sk_buff *ndisc_alloc_skb(struct net_device *dev,
419415 /* Manually assign socket ownership as we avoid calling
420416 * sock_alloc_send_pskb() to bypass wmem buffer limits
421417 */
422- skb_set_owner_w (skb , sk );
418+ rcu_read_lock ();
419+ skb_set_owner_w (skb , dev_net_rcu (dev )-> ipv6 .ndisc_sk );
420+ rcu_read_unlock ();
423421
424422 return skb ;
425423}
You can’t perform that action at this time.
0 commit comments