diff options
author | 2013-12-31 12:59:55 +0000 | |
---|---|---|
committer | 2013-12-31 12:59:55 +0000 | |
commit | 68066bb378a0504439e046cdb55d88362eb6379d (patch) | |
tree | 0b60f72ddf7108a63dd4db617b42e07fbae5346d /net/unix/af_unix.c | |
parent | spi: dw: fix memory leak on error path (diff) | |
parent | Linux 3.13-rc6 (diff) | |
download | wireguard-linux-68066bb378a0504439e046cdb55d88362eb6379d.tar.xz wireguard-linux-68066bb378a0504439e046cdb55d88362eb6379d.zip |
Merge tag 'v3.13-rc6' into spi-dw
To resolve trivial overlaps with fixes.
Linux 3.13-rc6
Diffstat (limited to '')
-rw-r--r-- | net/unix/af_unix.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 01625ccc3ae6..a427623ee574 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -530,13 +530,17 @@ static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *, static int unix_seqpacket_recvmsg(struct kiocb *, struct socket *, struct msghdr *, size_t, int); -static void unix_set_peek_off(struct sock *sk, int val) +static int unix_set_peek_off(struct sock *sk, int val) { struct unix_sock *u = unix_sk(sk); - mutex_lock(&u->readlock); + if (mutex_lock_interruptible(&u->readlock)) + return -EINTR; + sk->sk_peek_off = val; mutex_unlock(&u->readlock); + + return 0; } @@ -714,7 +718,9 @@ static int unix_autobind(struct socket *sock) int err; unsigned int retries = 0; - mutex_lock(&u->readlock); + err = mutex_lock_interruptible(&u->readlock); + if (err) + return err; err = 0; if (u->addr) @@ -873,7 +879,9 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) goto out; addr_len = err; - mutex_lock(&u->readlock); + err = mutex_lock_interruptible(&u->readlock); + if (err) + goto out; err = -EINVAL; if (u->addr) |