* net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC [not found] <udp_dccp_msg_trunc> @ 2010-02-11 6:26 ` Gerrit Renker 2010-02-11 6:26 ` [PATCH 1/2] dccp: support for passing MSG_TRUNC Gerrit Renker 2010-02-13 0:51 ` net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC David Miller 0 siblings, 2 replies; 4+ messages in thread From: Gerrit Renker @ 2010-02-11 6:26 UTC (permalink / raw) To: davem; +Cc: dccp, netdev Hi Dave, I have here two datagram-API patches, both submitted for net-2.6: Patch #1: Resolves missing MSG_TRUNC support. Since DCCP is datagram-based, the user-space API is broken/incomplete without. Patch #2: UDP recvmsg() cleanup, remove redundant variable. ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] dccp: support for passing MSG_TRUNC 2010-02-11 6:26 ` net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC Gerrit Renker @ 2010-02-11 6:26 ` Gerrit Renker 2010-02-11 6:26 ` [PATCH 2/2] udp: remove redundant variable Gerrit Renker 2010-02-13 0:51 ` net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC David Miller 1 sibling, 1 reply; 4+ messages in thread From: Gerrit Renker @ 2010-02-11 6:26 UTC (permalink / raw) To: davem; +Cc: dccp, netdev, Gerrit Renker DCCP is datagram-oriented but lacks UDP's support for MSG_TRUNC as defined in recvmsg(2)/recv(2). Hence the following 'Hello world\0' receiver len = recv(fd, buf, 10, MSG_PEEK | MSG_TRUNC); wrongly (always) returns 10, while in UDP it returns 12 as expected. This patch adds the missing MSG_TRUNC support to recvmsg(). Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> --- net/dccp/proto.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-) --- a/net/dccp/proto.c +++ b/net/dccp/proto.c @@ -835,6 +835,8 @@ verify_sock_status: len = -EFAULT; break; } + if (flags & MSG_TRUNC) + len = skb->len; found_fin_ok: if (!(flags & MSG_PEEK)) sk_eat_skb(sk, skb, 0); ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 2/2] udp: remove redundant variable 2010-02-11 6:26 ` [PATCH 1/2] dccp: support for passing MSG_TRUNC Gerrit Renker @ 2010-02-11 6:26 ` Gerrit Renker 0 siblings, 0 replies; 4+ messages in thread From: Gerrit Renker @ 2010-02-11 6:26 UTC (permalink / raw) To: davem; +Cc: dccp, netdev, Gerrit Renker The variable 'copied' is used in udp_recvmsg() to emphasize that the passed 'len' is adjusted to fit the actual datagram length. But the same can be done by adjusting 'len' directly. This patch thus removes the indirection. Signed-off-by: Gerrit Renker <gerrit@erg.abdn.ac.uk> --- net/ipv4/udp.c | 15 +++++++-------- net/ipv6/udp.c | 15 +++++++-------- 2 files changed, 14 insertions(+), 16 deletions(-) --- a/net/ipv4/udp.c +++ b/net/ipv4/udp.c @@ -1117,7 +1117,7 @@ int udp_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, struct inet_sock *inet = inet_sk(sk); struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name; struct sk_buff *skb; - unsigned int ulen, copied; + unsigned int ulen; int peeked; int err; int is_udplite = IS_UDPLITE(sk); @@ -1138,10 +1138,9 @@ try_again: goto out; ulen = skb->len - sizeof(struct udphdr); - copied = len; - if (copied > ulen) - copied = ulen; - else if (copied < ulen) + if (len > ulen) + len = ulen; + else if (len < ulen) msg->msg_flags |= MSG_TRUNC; /* @@ -1150,14 +1149,14 @@ try_again: * coverage checksum (UDP-Lite), do it before the copy. */ - if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) { + if (len < ulen || UDP_SKB_CB(skb)->partial_cov) { if (udp_lib_checksum_complete(skb)) goto csum_copy_err; } if (skb_csum_unnecessary(skb)) err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), - msg->msg_iov, copied); + msg->msg_iov, len); else { err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), @@ -1186,7 +1185,7 @@ try_again: if (inet->cmsg_flags) ip_cmsg_recv(msg, skb); - err = copied; + err = len; if (flags & MSG_TRUNC) err = ulen; --- a/net/ipv6/udp.c +++ b/net/ipv6/udp.c @@ -322,7 +322,7 @@ int udpv6_recvmsg(struct kiocb *iocb, struct sock *sk, struct ipv6_pinfo *np = inet6_sk(sk); struct inet_sock *inet = inet_sk(sk); struct sk_buff *skb; - unsigned int ulen, copied; + unsigned int ulen; int peeked; int err; int is_udplite = IS_UDPLITE(sk); @@ -341,10 +341,9 @@ try_again: goto out; ulen = skb->len - sizeof(struct udphdr); - copied = len; - if (copied > ulen) - copied = ulen; - else if (copied < ulen) + if (len > ulen) + len = ulen; + else if (len < ulen) msg->msg_flags |= MSG_TRUNC; is_udp4 = (skb->protocol == htons(ETH_P_IP)); @@ -355,14 +354,14 @@ try_again: * coverage checksum (UDP-Lite), do it before the copy. */ - if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) { + if (len < ulen || UDP_SKB_CB(skb)->partial_cov) { if (udp_lib_checksum_complete(skb)) goto csum_copy_err; } if (skb_csum_unnecessary(skb)) err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr), - msg->msg_iov, copied ); + msg->msg_iov,len); else { err = skb_copy_and_csum_datagram_iovec(skb, sizeof(struct udphdr), msg->msg_iov); if (err == -EINVAL) @@ -411,7 +410,7 @@ try_again: datagram_recv_ctl(sk, msg, skb); } - err = copied; + err = len; if (flags & MSG_TRUNC) err = ulen; ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC 2010-02-11 6:26 ` net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC Gerrit Renker 2010-02-11 6:26 ` [PATCH 1/2] dccp: support for passing MSG_TRUNC Gerrit Renker @ 2010-02-13 0:51 ` David Miller 1 sibling, 0 replies; 4+ messages in thread From: David Miller @ 2010-02-13 0:51 UTC (permalink / raw) To: gerrit; +Cc: dccp, netdev From: Gerrit Renker <gerrit@erg.abdn.ac.uk> Date: Thu, 11 Feb 2010 07:26:17 +0100 > I have here two datagram-API patches, both submitted for net-2.6: These are not appropriate for net-2.6, so I will apply them to net-next-2.6 > Patch #1: Resolves missing MSG_TRUNC support. Since DCCP is datagram-based, > the user-space API is broken/incomplete without. > > Patch #2: UDP recvmsg() cleanup, remove redundant variable. Applied, thanks. ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-02-13 0:51 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <udp_dccp_msg_trunc> 2010-02-11 6:26 ` net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC Gerrit Renker 2010-02-11 6:26 ` [PATCH 1/2] dccp: support for passing MSG_TRUNC Gerrit Renker 2010-02-11 6:26 ` [PATCH 2/2] udp: remove redundant variable Gerrit Renker 2010-02-13 0:51 ` net-2.6 [PATCH 0/2] udp/dccp: MSG_TRUNC David Miller
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).