netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* 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).