@@ -228,7 +228,7 @@ static int pfkey_broadcast_one(struct sk_buff *skb, struct sk_buff **skb2,
228
228
#define BROADCAST_ONE 1
229
229
#define BROADCAST_REGISTERED 2
230
230
#define BROADCAST_PROMISC_ONLY 4
231
- static int pfkey_broadcast (struct sk_buff * skb ,
231
+ static int pfkey_broadcast (struct sk_buff * skb , gfp_t allocation ,
232
232
int broadcast_flags , struct sock * one_sk ,
233
233
struct net * net )
234
234
{
@@ -278,7 +278,7 @@ static int pfkey_broadcast(struct sk_buff *skb,
278
278
rcu_read_unlock ();
279
279
280
280
if (one_sk != NULL )
281
- err = pfkey_broadcast_one (skb , & skb2 , GFP_KERNEL , one_sk );
281
+ err = pfkey_broadcast_one (skb , & skb2 , allocation , one_sk );
282
282
283
283
kfree_skb (skb2 );
284
284
kfree_skb (skb );
@@ -311,7 +311,7 @@ static int pfkey_do_dump(struct pfkey_sock *pfk)
311
311
hdr = (struct sadb_msg * ) pfk -> dump .skb -> data ;
312
312
hdr -> sadb_msg_seq = 0 ;
313
313
hdr -> sadb_msg_errno = rc ;
314
- pfkey_broadcast (pfk -> dump .skb , BROADCAST_ONE ,
314
+ pfkey_broadcast (pfk -> dump .skb , GFP_ATOMIC , BROADCAST_ONE ,
315
315
& pfk -> sk , sock_net (& pfk -> sk ));
316
316
pfk -> dump .skb = NULL ;
317
317
}
@@ -355,7 +355,7 @@ static int pfkey_error(const struct sadb_msg *orig, int err, struct sock *sk)
355
355
hdr -> sadb_msg_len = (sizeof (struct sadb_msg ) /
356
356
sizeof (uint64_t ));
357
357
358
- pfkey_broadcast (skb , BROADCAST_ONE , sk , sock_net (sk ));
358
+ pfkey_broadcast (skb , GFP_KERNEL , BROADCAST_ONE , sk , sock_net (sk ));
359
359
360
360
return 0 ;
361
361
}
@@ -1389,7 +1389,7 @@ static int pfkey_getspi(struct sock *sk, struct sk_buff *skb, const struct sadb_
1389
1389
1390
1390
xfrm_state_put (x );
1391
1391
1392
- pfkey_broadcast (resp_skb , BROADCAST_ONE , sk , net );
1392
+ pfkey_broadcast (resp_skb , GFP_KERNEL , BROADCAST_ONE , sk , net );
1393
1393
1394
1394
return 0 ;
1395
1395
}
@@ -1476,7 +1476,7 @@ static int key_notify_sa(struct xfrm_state *x, const struct km_event *c)
1476
1476
hdr -> sadb_msg_seq = c -> seq ;
1477
1477
hdr -> sadb_msg_pid = c -> portid ;
1478
1478
1479
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , xs_net (x ));
1479
+ pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ALL , NULL , xs_net (x ));
1480
1480
1481
1481
return 0 ;
1482
1482
}
@@ -1589,7 +1589,7 @@ static int pfkey_get(struct sock *sk, struct sk_buff *skb, const struct sadb_msg
1589
1589
out_hdr -> sadb_msg_reserved = 0 ;
1590
1590
out_hdr -> sadb_msg_seq = hdr -> sadb_msg_seq ;
1591
1591
out_hdr -> sadb_msg_pid = hdr -> sadb_msg_pid ;
1592
- pfkey_broadcast (out_skb , BROADCAST_ONE , sk , sock_net (sk ));
1592
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_ONE , sk , sock_net (sk ));
1593
1593
1594
1594
return 0 ;
1595
1595
}
@@ -1694,8 +1694,8 @@ static int pfkey_register(struct sock *sk, struct sk_buff *skb, const struct sad
1694
1694
return - ENOBUFS ;
1695
1695
}
1696
1696
1697
- pfkey_broadcast (supp_skb , BROADCAST_REGISTERED , sk , sock_net ( sk ));
1698
-
1697
+ pfkey_broadcast (supp_skb , GFP_KERNEL , BROADCAST_REGISTERED , sk ,
1698
+ sock_net ( sk ));
1699
1699
return 0 ;
1700
1700
}
1701
1701
@@ -1712,7 +1712,8 @@ static int unicast_flush_resp(struct sock *sk, const struct sadb_msg *ihdr)
1712
1712
hdr -> sadb_msg_errno = (uint8_t ) 0 ;
1713
1713
hdr -> sadb_msg_len = (sizeof (struct sadb_msg ) / sizeof (uint64_t ));
1714
1714
1715
- return pfkey_broadcast (skb , BROADCAST_ONE , sk , sock_net (sk ));
1715
+ return pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ONE , sk ,
1716
+ sock_net (sk ));
1716
1717
}
1717
1718
1718
1719
static int key_notify_sa_flush (const struct km_event * c )
@@ -1733,7 +1734,7 @@ static int key_notify_sa_flush(const struct km_event *c)
1733
1734
hdr -> sadb_msg_len = (sizeof (struct sadb_msg ) / sizeof (uint64_t ));
1734
1735
hdr -> sadb_msg_reserved = 0 ;
1735
1736
1736
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , c -> net );
1737
+ pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ALL , NULL , c -> net );
1737
1738
1738
1739
return 0 ;
1739
1740
}
@@ -1790,7 +1791,7 @@ static int dump_sa(struct xfrm_state *x, int count, void *ptr)
1790
1791
out_hdr -> sadb_msg_pid = pfk -> dump .msg_portid ;
1791
1792
1792
1793
if (pfk -> dump .skb )
1793
- pfkey_broadcast (pfk -> dump .skb , BROADCAST_ONE ,
1794
+ pfkey_broadcast (pfk -> dump .skb , GFP_ATOMIC , BROADCAST_ONE ,
1794
1795
& pfk -> sk , sock_net (& pfk -> sk ));
1795
1796
pfk -> dump .skb = out_skb ;
1796
1797
@@ -1878,7 +1879,7 @@ static int pfkey_promisc(struct sock *sk, struct sk_buff *skb, const struct sadb
1878
1879
new_hdr -> sadb_msg_errno = 0 ;
1879
1880
}
1880
1881
1881
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , sock_net (sk ));
1882
+ pfkey_broadcast (skb , GFP_KERNEL , BROADCAST_ALL , NULL , sock_net (sk ));
1882
1883
return 0 ;
1883
1884
}
1884
1885
@@ -2206,7 +2207,7 @@ static int key_notify_policy(struct xfrm_policy *xp, int dir, const struct km_ev
2206
2207
out_hdr -> sadb_msg_errno = 0 ;
2207
2208
out_hdr -> sadb_msg_seq = c -> seq ;
2208
2209
out_hdr -> sadb_msg_pid = c -> portid ;
2209
- pfkey_broadcast (out_skb , BROADCAST_ALL , NULL , xp_net (xp ));
2210
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_ALL , NULL , xp_net (xp ));
2210
2211
return 0 ;
2211
2212
2212
2213
}
@@ -2426,7 +2427,7 @@ static int key_pol_get_resp(struct sock *sk, struct xfrm_policy *xp, const struc
2426
2427
out_hdr -> sadb_msg_errno = 0 ;
2427
2428
out_hdr -> sadb_msg_seq = hdr -> sadb_msg_seq ;
2428
2429
out_hdr -> sadb_msg_pid = hdr -> sadb_msg_pid ;
2429
- pfkey_broadcast (out_skb , BROADCAST_ONE , sk , xp_net (xp ));
2430
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_ONE , sk , xp_net (xp ));
2430
2431
err = 0 ;
2431
2432
2432
2433
out :
@@ -2682,7 +2683,7 @@ static int dump_sp(struct xfrm_policy *xp, int dir, int count, void *ptr)
2682
2683
out_hdr -> sadb_msg_pid = pfk -> dump .msg_portid ;
2683
2684
2684
2685
if (pfk -> dump .skb )
2685
- pfkey_broadcast (pfk -> dump .skb , BROADCAST_ONE ,
2686
+ pfkey_broadcast (pfk -> dump .skb , GFP_ATOMIC , BROADCAST_ONE ,
2686
2687
& pfk -> sk , sock_net (& pfk -> sk ));
2687
2688
pfk -> dump .skb = out_skb ;
2688
2689
@@ -2739,7 +2740,7 @@ static int key_notify_policy_flush(const struct km_event *c)
2739
2740
hdr -> sadb_msg_satype = SADB_SATYPE_UNSPEC ;
2740
2741
hdr -> sadb_msg_len = (sizeof (struct sadb_msg ) / sizeof (uint64_t ));
2741
2742
hdr -> sadb_msg_reserved = 0 ;
2742
- pfkey_broadcast (skb_out , BROADCAST_ALL , NULL , c -> net );
2743
+ pfkey_broadcast (skb_out , GFP_ATOMIC , BROADCAST_ALL , NULL , c -> net );
2743
2744
return 0 ;
2744
2745
2745
2746
}
@@ -2803,7 +2804,7 @@ static int pfkey_process(struct sock *sk, struct sk_buff *skb, const struct sadb
2803
2804
void * ext_hdrs [SADB_EXT_MAX ];
2804
2805
int err ;
2805
2806
2806
- pfkey_broadcast (skb_clone (skb , GFP_KERNEL ),
2807
+ pfkey_broadcast (skb_clone (skb , GFP_KERNEL ), GFP_KERNEL ,
2807
2808
BROADCAST_PROMISC_ONLY , NULL , sock_net (sk ));
2808
2809
2809
2810
memset (ext_hdrs , 0 , sizeof (ext_hdrs ));
@@ -3024,7 +3025,8 @@ static int key_notify_sa_expire(struct xfrm_state *x, const struct km_event *c)
3024
3025
out_hdr -> sadb_msg_seq = 0 ;
3025
3026
out_hdr -> sadb_msg_pid = 0 ;
3026
3027
3027
- pfkey_broadcast (out_skb , BROADCAST_REGISTERED , NULL , xs_net (x ));
3028
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_REGISTERED , NULL ,
3029
+ xs_net (x ));
3028
3030
return 0 ;
3029
3031
}
3030
3032
@@ -3212,7 +3214,8 @@ static int pfkey_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *t, struct
3212
3214
xfrm_ctx -> ctx_len );
3213
3215
}
3214
3216
3215
- return pfkey_broadcast (skb , BROADCAST_REGISTERED , NULL , xs_net (x ));
3217
+ return pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_REGISTERED , NULL ,
3218
+ xs_net (x ));
3216
3219
}
3217
3220
3218
3221
static struct xfrm_policy * pfkey_compile_policy (struct sock * sk , int opt ,
@@ -3408,7 +3411,8 @@ static int pfkey_send_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr,
3408
3411
n_port -> sadb_x_nat_t_port_port = sport ;
3409
3412
n_port -> sadb_x_nat_t_port_reserved = 0 ;
3410
3413
3411
- return pfkey_broadcast (skb , BROADCAST_REGISTERED , NULL , xs_net (x ));
3414
+ return pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_REGISTERED , NULL ,
3415
+ xs_net (x ));
3412
3416
}
3413
3417
3414
3418
#ifdef CONFIG_NET_KEY_MIGRATE
@@ -3599,7 +3603,7 @@ static int pfkey_send_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
3599
3603
}
3600
3604
3601
3605
/* broadcast migrate message to sockets */
3602
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , & init_net );
3606
+ pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ALL , NULL , & init_net );
3603
3607
3604
3608
return 0 ;
3605
3609
0 commit comments