From: Jeff Dike Add _irqsave/_irqrestore to the locking in update_drop_skb to keep uml_net_rx out while the drop skb is being messed with. Signed-off-by: Jeff Dike Signed-off-by: Andrew Morton --- diff -puN arch/um/drivers/net_kern.c~uml-correctly-handle-skb-allocation-failures-fix arch/um/drivers/net_kern.c --- a/arch/um/drivers/net_kern.c~uml-correctly-handle-skb-allocation-failures-fix +++ a/arch/um/drivers/net_kern.c @@ -49,9 +49,10 @@ static int drop_max; static int update_drop_skb(int max) { struct sk_buff *new; + unsigned long flags; int err = 0; - spin_lock(&drop_lock); + spin_lock_irqsave(&drop_lock, flags); if (max <= drop_max) goto out; @@ -68,7 +69,7 @@ static int update_drop_skb(int max) drop_max = max; err = 0; out: - spin_unlock(&drop_lock); + spin_unlock_irqrestore(&drop_lock, flags); return err; } _