On Fri, 2017-05-26 at 11:18 -0400, David Miller wrote: > From: Eric Dumazet <eric.dumazet@xxxxxxxxx> > Date: Fri, 26 May 2017 07:16:59 -0700 > > > On Wed, 2017-05-24 at 09:27 -0700, Dave Watson wrote: > >> Software implementation of transport layer security, implemented using ULP > >> infrastructure. tcp proto_ops are replaced with tls equivalents of sendmsg and > >> sendpage. > > > > ... > > > >> + > >> +int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size) > >> +{ > > ... > >> + > >> + lock_sock(sk); > >> + > >> + /* Only one writer at a time is allowed */ > >> + if (sk->sk_write_pending) > >> + return -EBUSY; > > > > Ouch... > > Well, as I understand it, it is the same restriction userspace must > itself enforce either in the application or in the SSL library. The problem here is to lock_sock(sk), then returning without releasing the socket. Some basic lock imbalance really.