diff options
Diffstat (limited to 'net/unix/af_unix.c')
| -rw-r--r-- | net/unix/af_unix.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 3a43a8304768..b1d75beb7e20 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
| @@ -524,6 +524,8 @@ static int unix_dgram_connect(struct socket *, struct sockaddr *, | |||
| 524 | int, int); | 524 | int, int); |
| 525 | static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *, | 525 | static int unix_seqpacket_sendmsg(struct kiocb *, struct socket *, |
| 526 | struct msghdr *, size_t); | 526 | struct msghdr *, size_t); |
| 527 | static int unix_seqpacket_recvmsg(struct kiocb *, struct socket *, | ||
| 528 | struct msghdr *, size_t, int); | ||
| 527 | 529 | ||
| 528 | static const struct proto_ops unix_stream_ops = { | 530 | static const struct proto_ops unix_stream_ops = { |
| 529 | .family = PF_UNIX, | 531 | .family = PF_UNIX, |
| @@ -583,7 +585,7 @@ static const struct proto_ops unix_seqpacket_ops = { | |||
| 583 | .setsockopt = sock_no_setsockopt, | 585 | .setsockopt = sock_no_setsockopt, |
| 584 | .getsockopt = sock_no_getsockopt, | 586 | .getsockopt = sock_no_getsockopt, |
| 585 | .sendmsg = unix_seqpacket_sendmsg, | 587 | .sendmsg = unix_seqpacket_sendmsg, |
| 586 | .recvmsg = unix_dgram_recvmsg, | 588 | .recvmsg = unix_seqpacket_recvmsg, |
| 587 | .mmap = sock_no_mmap, | 589 | .mmap = sock_no_mmap, |
| 588 | .sendpage = sock_no_sendpage, | 590 | .sendpage = sock_no_sendpage, |
| 589 | }; | 591 | }; |
| @@ -1699,6 +1701,18 @@ static int unix_seqpacket_sendmsg(struct kiocb *kiocb, struct socket *sock, | |||
| 1699 | return unix_dgram_sendmsg(kiocb, sock, msg, len); | 1701 | return unix_dgram_sendmsg(kiocb, sock, msg, len); |
| 1700 | } | 1702 | } |
| 1701 | 1703 | ||
| 1704 | static int unix_seqpacket_recvmsg(struct kiocb *iocb, struct socket *sock, | ||
| 1705 | struct msghdr *msg, size_t size, | ||
| 1706 | int flags) | ||
| 1707 | { | ||
| 1708 | struct sock *sk = sock->sk; | ||
| 1709 | |||
| 1710 | if (sk->sk_state != TCP_ESTABLISHED) | ||
| 1711 | return -ENOTCONN; | ||
| 1712 | |||
| 1713 | return unix_dgram_recvmsg(iocb, sock, msg, size, flags); | ||
| 1714 | } | ||
| 1715 | |||
| 1702 | static void unix_copy_addr(struct msghdr *msg, struct sock *sk) | 1716 | static void unix_copy_addr(struct msghdr *msg, struct sock *sk) |
| 1703 | { | 1717 | { |
| 1704 | struct unix_sock *u = unix_sk(sk); | 1718 | struct unix_sock *u = unix_sk(sk); |
