diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c index 29a208ed8fb88d5f2e7f457ffba1cbc1d81f99cc..84e772676ae6c0aea2a90bae40734cfa81bbc1e3 100644 --- a/net/rose/af_rose.c +++ b/net/rose/af_rose.c @@ -1299,9 +1299,11 @@ static int rose_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) case TIOCINQ: { struct sk_buff *skb; long amount = 0L; - /* These two are safe on a single CPU system as only user tasks fiddle here */ + + spin_lock_irq(&sk->sk_receive_queue.lock); if ((skb = skb_peek(&sk->sk_receive_queue)) != NULL) amount = skb->len; + spin_unlock_irq(&sk->sk_receive_queue.lock); return put_user(amount, (unsigned int __user *) argp); }