• Krzysztof Mazur's avatar
    pppoatm: take ATM socket lock in pppoatm_send() · 3ac10800
    Krzysztof Mazur authored
    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: default avatarKrzysztof Mazur <krzysiek@podlesie.net>
    Cc: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
    Signed-off-by: default avatarDavid Woodhouse <David.Woodhouse@intel.com>
pppoatm.c 14.3 KB