pppoatm: take ATM socket lock in pppoatm_send()
authorKrzysztof Mazur <krzysiek@podlesie.net>
Tue, 6 Nov 2012 22:17:00 +0000 (23:17 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 28 Nov 2012 00:37:05 +0000 (00:37 +0000)
commit3ac108006fd7f20cb8fc8ea2287f1497bcda00a1
tree4931009972256abde839087b795c7b9b4926ae36
parente41faed9cde1acce657f75a0b19a1787e9850d3f
pppoatm: take ATM socket lock in pppoatm_send()

The pppoatm_send() does not take any lock that will prevent concurrent
vcc_sendmsg(). This causes two problems:

- there is no locking between checking the send queue size
  with atm_may_send() and incrementing sk_wmem_alloc,
  and the real queue size can be a little higher than sk_sndbuf

- the vcc->sendmsg() can be called concurrently. I'm not sure
  if it's allowed. Some drivers (eni, nicstar, ...) seem
  to assume it will never happen.

Now pppoatm_send() takes ATM socket lock, the same that is used
in vcc_sendmsg() and other ATM socket functions. The pppoatm_send()
is called with BH disabled, so bh_lock_sock() is used instead
of lock_sock().

Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net>
Cc: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
net/atm/pppoatm.c