aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorDavid S. Miller <davem@nuts.davemloft.net>2004-07-21 02:47:01 -0700
committerDavid S. Miller <davem@nuts.davemloft.net>2004-07-21 02:47:01 -0700
commit68ce1ca3fce4c3429964e1ffda03d134a0a7d2fd (patch)
tree9c752ade81794ef234488cdf89ccc473e59f8693 /net
parent498ced50fd8b9107ae6408dc24dd44f2b19baff3 (diff)
downloadhistory-68ce1ca3fce4c3429964e1ffda03d134a0a7d2fd.tar.gz
[IPV4]: Make raw sockets behave like udp wrt. MSG_TRUNC.
Diffstat (limited to 'net')
-rw-r--r--net/ipv4/raw.c4
-rw-r--r--net/ipv6/raw.c3
2 files changed, 6 insertions, 1 deletions
diff --git a/net/ipv4/raw.c b/net/ipv4/raw.c
index 114bbf2faab586..1cfd749d651e7e 100644
--- a/net/ipv4/raw.c
+++ b/net/ipv4/raw.c
@@ -555,9 +555,11 @@ int raw_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
}
if (inet->cmsg_flags)
ip_cmsg_recv(msg, skb);
+ if (flags & MSG_TRUNC)
+ copied = skb->len;
done:
skb_free_datagram(sk, skb);
-out: return err ? : copied;
+out: return err ? err : copied;
}
static int raw_init(struct sock *sk)
diff --git a/net/ipv6/raw.c b/net/ipv6/raw.c
index 6dec366f465ddd..03198961193241 100644
--- a/net/ipv6/raw.c
+++ b/net/ipv6/raw.c
@@ -419,7 +419,10 @@ static int rawv6_recvmsg(struct kiocb *iocb, struct sock *sk,
if (np->rxopt.all)
datagram_recv_ctl(sk, msg, skb);
+
err = copied;
+ if (flags & MSG_TRUNC)
+ err = skb->len;
out_free:
skb_free_datagram(sk, skb);