ipv6: check raw payload size correctly in ioctl
authorJamie Bainbridge <jbainbri@redhat.com>
Wed, 26 Apr 2017 00:43:27 +0000 (10:43 +1000)
committerJiri Slaby <jslaby@suse.cz>
Tue, 9 May 2017 06:19:49 +0000 (08:19 +0200)
commitdafd35deb3caa7f312b37d815302b959d427a9a2
treeb176b7b6c7059d8315fae7acfcc0c43c01dfd761
parent791e4bc1efe094ba4eb7ecce8fe5afe65e7f2070
ipv6: check raw payload size correctly in ioctl

[ Upstream commit 105f5528b9bbaa08b526d3405a5bcd2ff0c953c8 ]

In situations where an skb is paged, the transport header pointer and
tail pointer can be the same because the skb contents are in frags.

This results in ioctl(SIOCINQ/FIONREAD) incorrectly returning a
length of 0 when the length to receive is actually greater than zero.

skb->len is already correctly set in ip6_input_finish() with
pskb_pull(), so use skb->len as it always returns the correct result
for both linear and paged data.

Signed-off-by: Jamie Bainbridge <jbainbri@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/raw.c