diff options
author | David S. Miller <davem@nuts.davemloft.net> | 2004-07-21 02:47:01 -0700 |
---|---|---|
committer | David S. Miller <davem@nuts.davemloft.net> | 2004-07-21 02:47:01 -0700 |
commit | 68ce1ca3fce4c3429964e1ffda03d134a0a7d2fd (patch) | |
tree | 9c752ade81794ef234488cdf89ccc473e59f8693 /net | |
parent | 498ced50fd8b9107ae6408dc24dd44f2b19baff3 (diff) | |
download | history-68ce1ca3fce4c3429964e1ffda03d134a0a7d2fd.tar.gz |
[IPV4]: Make raw sockets behave like udp wrt. MSG_TRUNC.
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/raw.c | 4 | ||||
-rw-r--r-- | net/ipv6/raw.c | 3 |
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); |