net/ipv4: Use non-atomic allocation of udp offloads structure instance
Since udp_add_offload() can be called from non-sleepable context e.g
under this call tree from the vxlan driver use case:
vxlan_socket_create() <-- holds the spinlock
-> vxlan_notify_add_rx_port()
-> udp_add_offload() <-- schedules
we should allocate the udp_offloads structure in atomic manner.
Fixes: b582ef0 ('net: Add GRO support for UDP encapsulating protocols')
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
f8d56d8f89
commit
b5aaab12b2
@@ -101,7 +101,7 @@ out:
|
|||||||
int udp_add_offload(struct udp_offload *uo)
|
int udp_add_offload(struct udp_offload *uo)
|
||||||
{
|
{
|
||||||
struct udp_offload_priv __rcu **head = &udp_offload_base;
|
struct udp_offload_priv __rcu **head = &udp_offload_base;
|
||||||
struct udp_offload_priv *new_offload = kzalloc(sizeof(*new_offload), GFP_KERNEL);
|
struct udp_offload_priv *new_offload = kzalloc(sizeof(*new_offload), GFP_ATOMIC);
|
||||||
|
|
||||||
if (!new_offload)
|
if (!new_offload)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|||||||
Reference in New Issue
Block a user