From: Jon M. <jm...@re...> - 2021-12-17 02:33:10
|
On 12/10/21 01:59, Hoang Le wrote: > This reverts commit 86c3a3e964d910a62eeb277d60b2a60ebefa9feb. > > The tipc_aead_init() function can be calling from an interrupt routine. > This allocation might sleep with GFP_KERNEL flag, hence the following BUG > is reported. > > [ 17.657509] BUG: sleeping function called from invalid context at include/linux/sched/mm.h:230 > [ 17.660916] in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 0, name: swapper/3 > [ 17.664093] preempt_count: 302, expected: 0 > [ 17.665619] RCU nest depth: 2, expected: 0 > [ 17.667163] Preemption disabled at: > [ 17.667165] [<0000000000000000>] 0x0 > [ 17.669753] CPU: 3 PID: 0 Comm: swapper/3 Kdump: loaded Tainted: G W 5.16.0-rc4+ #1 > [ 17.673006] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.12.0-1 04/01/2014 > [ 17.675540] Call Trace: > [ 17.676285] <IRQ> > [ 17.676913] dump_stack_lvl+0x34/0x44 > [ 17.678033] __might_resched.cold+0xd6/0x10f > [ 17.679311] kmem_cache_alloc_trace+0x14d/0x220 > [ 17.680663] tipc_crypto_start+0x4a/0x2b0 [tipc] > [ 17.682146] ? kmem_cache_alloc_trace+0xd3/0x220 > [ 17.683545] tipc_node_create+0x2f0/0x790 [tipc] > [ 17.684956] tipc_node_check_dest+0x72/0x680 [tipc] > [ 17.686706] ? ___cache_free+0x31/0x350 > [ 17.688008] ? skb_release_data+0x128/0x140 > [ 17.689431] tipc_disc_rcv+0x479/0x510 [tipc] > [ 17.690904] tipc_rcv+0x71c/0x730 [tipc] > [ 17.692219] ? __netif_receive_skb_core+0xb7/0xf60 > [ 17.693856] tipc_l2_rcv_msg+0x5e/0x90 [tipc] > [ 17.695333] __netif_receive_skb_list_core+0x20b/0x260 > [ 17.697072] netif_receive_skb_list_internal+0x1bf/0x2e0 > [ 17.698870] ? dev_gro_receive+0x4c2/0x680 > [ 17.700255] napi_complete_done+0x6f/0x180 > [ 17.701657] virtnet_poll+0x29c/0x42e [virtio_net] > [ 17.703262] __napi_poll+0x2c/0x170 > [ 17.704429] net_rx_action+0x22f/0x280 > [ 17.705706] __do_softirq+0xfd/0x30a > [ 17.706921] common_interrupt+0xa4/0xc0 > [ 17.708206] </IRQ> > [ 17.708922] <TASK> > [ 17.709651] asm_common_interrupt+0x1e/0x40 > [ 17.711078] RIP: 0010:default_idle+0x18/0x20 > > Signed-off-by: Hoang Le <hoa...@de...> > --- > net/tipc/crypto.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/net/tipc/crypto.c b/net/tipc/crypto.c > index 81116312b753..9325479295b8 100644 > --- a/net/tipc/crypto.c > +++ b/net/tipc/crypto.c > @@ -524,7 +524,7 @@ static int tipc_aead_init(struct tipc_aead **aead, struct tipc_aead_key *ukey, > return -EEXIST; > > /* Allocate a new AEAD */ > - tmp = kzalloc(sizeof(*tmp), GFP_KERNEL); > + tmp = kzalloc(sizeof(*tmp), GFP_ATOMIC); > if (unlikely(!tmp)) > return -ENOMEM; > > @@ -1463,7 +1463,7 @@ int tipc_crypto_start(struct tipc_crypto **crypto, struct net *net, > return -EEXIST; > > /* Allocate crypto */ > - c = kzalloc(sizeof(*c), GFP_KERNEL); > + c = kzalloc(sizeof(*c), GFP_ATOMIC); > if (!c) > return -ENOMEM; > > @@ -1477,7 +1477,7 @@ int tipc_crypto_start(struct tipc_crypto **crypto, struct net *net, > } > > /* Allocate statistic structure */ > - c->stats = alloc_percpu(struct tipc_crypto_stats); > + c->stats = alloc_percpu_gfp(struct tipc_crypto_stats, GFP_ATOMIC); > if (!c->stats) { > if (c->wq) > destroy_workqueue(c->wq); > @@ -2450,7 +2450,7 @@ static void tipc_crypto_work_tx(struct work_struct *work) > } > > /* Lets duplicate it first */ > - skey = kmemdup(aead->key, tipc_aead_key_size(aead->key), GFP_KERNEL); > + skey = kmemdup(aead->key, tipc_aead_key_size(aead->key), GFP_ATOMIC); > rcu_read_unlock(); > > /* Now, generate new key, initiate & distribute it */ Acked-by: Jon Maloy <jm...@re...> |