* 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).