Message ID | 1329902695.18384.101.camel@edumazet-laptop |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
From: Eric Dumazet <eric.dumazet@gmail.com> Date: Wed, 22 Feb 2012 10:24:55 +0100 > Piergiorgio Beruto expressed the need to fetch size of first datagram in > queue for AF_UNIX sockets and suggested a patch against SIOCINQ ioctl. > > I suggested instead to implement MSG_TRUNC support as a recv() input > flag, as already done for RAW, UDP & NETLINK sockets. > > len = recv(fd, &byte, 1, MSG_PEEK | MSG_TRUNC); > > MSG_TRUNC asks recv() to return the real length of the packet, even when > is was longer than the passed buffer. > > There is risk that a userland application used MSG_TRUNC by accident > (since it had no effect on af_unix sockets) and this might break after > this patch. > > Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> > Tested-by: Piergiorgio Beruto <piergiorgio.beruto@gmail.com> > CC: Michael Kerrisk <mtk.manpages@gmail.com> Applied. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 0be4d24..8ee85aa 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -1845,7 +1845,7 @@ static int unix_dgram_recvmsg(struct kiocb *iocb, struct socket *sock, if (UNIXCB(skb).fp) siocb->scm->fp = scm_fp_dup(UNIXCB(skb).fp); } - err = size; + err = (flags & MSG_TRUNC) ? skb->len - skip : size; scm_recv(sock, msg, siocb->scm, flags);