@@ -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
}
@@ -1396,7 +1396,7 @@ static int pfkey_getspi(struct sock *sk, struct sk_buff *skb, const struct sadb_
1396
1396
1397
1397
xfrm_state_put (x );
1398
1398
1399
- pfkey_broadcast (resp_skb , BROADCAST_ONE , sk , net );
1399
+ pfkey_broadcast (resp_skb , GFP_KERNEL , BROADCAST_ONE , sk , net );
1400
1400
1401
1401
return 0 ;
1402
1402
}
@@ -1483,7 +1483,7 @@ static int key_notify_sa(struct xfrm_state *x, const struct km_event *c)
1483
1483
hdr -> sadb_msg_seq = c -> seq ;
1484
1484
hdr -> sadb_msg_pid = c -> portid ;
1485
1485
1486
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , xs_net (x ));
1486
+ pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ALL , NULL , xs_net (x ));
1487
1487
1488
1488
return 0 ;
1489
1489
}
@@ -1596,7 +1596,7 @@ static int pfkey_get(struct sock *sk, struct sk_buff *skb, const struct sadb_msg
1596
1596
out_hdr -> sadb_msg_reserved = 0 ;
1597
1597
out_hdr -> sadb_msg_seq = hdr -> sadb_msg_seq ;
1598
1598
out_hdr -> sadb_msg_pid = hdr -> sadb_msg_pid ;
1599
- pfkey_broadcast (out_skb , BROADCAST_ONE , sk , sock_net (sk ));
1599
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_ONE , sk , sock_net (sk ));
1600
1600
1601
1601
return 0 ;
1602
1602
}
@@ -1701,8 +1701,8 @@ static int pfkey_register(struct sock *sk, struct sk_buff *skb, const struct sad
1701
1701
return - ENOBUFS ;
1702
1702
}
1703
1703
1704
- pfkey_broadcast (supp_skb , BROADCAST_REGISTERED , sk , sock_net ( sk ));
1705
-
1704
+ pfkey_broadcast (supp_skb , GFP_KERNEL , BROADCAST_REGISTERED , sk ,
1705
+ sock_net ( sk ));
1706
1706
return 0 ;
1707
1707
}
1708
1708
@@ -1720,7 +1720,8 @@ static int unicast_flush_resp(struct sock *sk, const struct sadb_msg *ihdr)
1720
1720
hdr -> sadb_msg_errno = (uint8_t ) 0 ;
1721
1721
hdr -> sadb_msg_len = (sizeof (struct sadb_msg ) / sizeof (uint64_t ));
1722
1722
1723
- return pfkey_broadcast (skb , BROADCAST_ONE , sk , sock_net (sk ));
1723
+ return pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ONE , sk ,
1724
+ sock_net (sk ));
1724
1725
}
1725
1726
1726
1727
static int key_notify_sa_flush (const struct km_event * c )
@@ -1741,7 +1742,7 @@ static int key_notify_sa_flush(const struct km_event *c)
1741
1742
hdr -> sadb_msg_len = (sizeof (struct sadb_msg ) / sizeof (uint64_t ));
1742
1743
hdr -> sadb_msg_reserved = 0 ;
1743
1744
1744
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , c -> net );
1745
+ pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ALL , NULL , c -> net );
1745
1746
1746
1747
return 0 ;
1747
1748
}
@@ -1798,7 +1799,7 @@ static int dump_sa(struct xfrm_state *x, int count, void *ptr)
1798
1799
out_hdr -> sadb_msg_pid = pfk -> dump .msg_portid ;
1799
1800
1800
1801
if (pfk -> dump .skb )
1801
- pfkey_broadcast (pfk -> dump .skb , BROADCAST_ONE ,
1802
+ pfkey_broadcast (pfk -> dump .skb , GFP_ATOMIC , BROADCAST_ONE ,
1802
1803
& pfk -> sk , sock_net (& pfk -> sk ));
1803
1804
pfk -> dump .skb = out_skb ;
1804
1805
@@ -1886,7 +1887,7 @@ static int pfkey_promisc(struct sock *sk, struct sk_buff *skb, const struct sadb
1886
1887
new_hdr -> sadb_msg_errno = 0 ;
1887
1888
}
1888
1889
1889
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , sock_net (sk ));
1890
+ pfkey_broadcast (skb , GFP_KERNEL , BROADCAST_ALL , NULL , sock_net (sk ));
1890
1891
return 0 ;
1891
1892
}
1892
1893
@@ -2219,7 +2220,7 @@ static int key_notify_policy(struct xfrm_policy *xp, int dir, const struct km_ev
2219
2220
out_hdr -> sadb_msg_errno = 0 ;
2220
2221
out_hdr -> sadb_msg_seq = c -> seq ;
2221
2222
out_hdr -> sadb_msg_pid = c -> portid ;
2222
- pfkey_broadcast (out_skb , BROADCAST_ALL , NULL , xp_net (xp ));
2223
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_ALL , NULL , xp_net (xp ));
2223
2224
return 0 ;
2224
2225
2225
2226
}
@@ -2439,7 +2440,7 @@ static int key_pol_get_resp(struct sock *sk, struct xfrm_policy *xp, const struc
2439
2440
out_hdr -> sadb_msg_errno = 0 ;
2440
2441
out_hdr -> sadb_msg_seq = hdr -> sadb_msg_seq ;
2441
2442
out_hdr -> sadb_msg_pid = hdr -> sadb_msg_pid ;
2442
- pfkey_broadcast (out_skb , BROADCAST_ONE , sk , xp_net (xp ));
2443
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_ONE , sk , xp_net (xp ));
2443
2444
err = 0 ;
2444
2445
2445
2446
out :
@@ -2695,7 +2696,7 @@ static int dump_sp(struct xfrm_policy *xp, int dir, int count, void *ptr)
2695
2696
out_hdr -> sadb_msg_pid = pfk -> dump .msg_portid ;
2696
2697
2697
2698
if (pfk -> dump .skb )
2698
- pfkey_broadcast (pfk -> dump .skb , BROADCAST_ONE ,
2699
+ pfkey_broadcast (pfk -> dump .skb , GFP_ATOMIC , BROADCAST_ONE ,
2699
2700
& pfk -> sk , sock_net (& pfk -> sk ));
2700
2701
pfk -> dump .skb = out_skb ;
2701
2702
@@ -2752,7 +2753,7 @@ static int key_notify_policy_flush(const struct km_event *c)
2752
2753
hdr -> sadb_msg_satype = SADB_SATYPE_UNSPEC ;
2753
2754
hdr -> sadb_msg_len = (sizeof (struct sadb_msg ) / sizeof (uint64_t ));
2754
2755
hdr -> sadb_msg_reserved = 0 ;
2755
- pfkey_broadcast (skb_out , BROADCAST_ALL , NULL , c -> net );
2756
+ pfkey_broadcast (skb_out , GFP_ATOMIC , BROADCAST_ALL , NULL , c -> net );
2756
2757
return 0 ;
2757
2758
2758
2759
}
@@ -2814,7 +2815,7 @@ static int pfkey_process(struct sock *sk, struct sk_buff *skb, const struct sadb
2814
2815
void * ext_hdrs [SADB_EXT_MAX ];
2815
2816
int err ;
2816
2817
2817
- pfkey_broadcast (skb_clone (skb , GFP_KERNEL ),
2818
+ pfkey_broadcast (skb_clone (skb , GFP_KERNEL ), GFP_KERNEL ,
2818
2819
BROADCAST_PROMISC_ONLY , NULL , sock_net (sk ));
2819
2820
2820
2821
memset (ext_hdrs , 0 , sizeof (ext_hdrs ));
@@ -3036,7 +3037,8 @@ static int key_notify_sa_expire(struct xfrm_state *x, const struct km_event *c)
3036
3037
out_hdr -> sadb_msg_seq = 0 ;
3037
3038
out_hdr -> sadb_msg_pid = 0 ;
3038
3039
3039
- pfkey_broadcast (out_skb , BROADCAST_REGISTERED , NULL , xs_net (x ));
3040
+ pfkey_broadcast (out_skb , GFP_ATOMIC , BROADCAST_REGISTERED , NULL ,
3041
+ xs_net (x ));
3040
3042
return 0 ;
3041
3043
}
3042
3044
@@ -3226,7 +3228,8 @@ static int pfkey_send_acquire(struct xfrm_state *x, struct xfrm_tmpl *t, struct
3226
3228
xfrm_ctx -> ctx_len );
3227
3229
}
3228
3230
3229
- return pfkey_broadcast (skb , BROADCAST_REGISTERED , NULL , xs_net (x ));
3231
+ return pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_REGISTERED , NULL ,
3232
+ xs_net (x ));
3230
3233
}
3231
3234
3232
3235
static struct xfrm_policy * pfkey_compile_policy (struct sock * sk , int opt ,
@@ -3424,7 +3427,8 @@ static int pfkey_send_new_mapping(struct xfrm_state *x, xfrm_address_t *ipaddr,
3424
3427
n_port -> sadb_x_nat_t_port_port = sport ;
3425
3428
n_port -> sadb_x_nat_t_port_reserved = 0 ;
3426
3429
3427
- return pfkey_broadcast (skb , BROADCAST_REGISTERED , NULL , xs_net (x ));
3430
+ return pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_REGISTERED , NULL ,
3431
+ xs_net (x ));
3428
3432
}
3429
3433
3430
3434
#ifdef CONFIG_NET_KEY_MIGRATE
@@ -3616,7 +3620,7 @@ static int pfkey_send_migrate(const struct xfrm_selector *sel, u8 dir, u8 type,
3616
3620
}
3617
3621
3618
3622
/* broadcast migrate message to sockets */
3619
- pfkey_broadcast (skb , BROADCAST_ALL , NULL , & init_net );
3623
+ pfkey_broadcast (skb , GFP_ATOMIC , BROADCAST_ALL , NULL , & init_net );
3620
3624
3621
3625
return 0 ;
3622
3626
0 commit comments