rose: limit sk_filter trim to payload
authorWillem de Bruijn <willemb@google.com>
Tue, 12 Jul 2016 22:18:56 +0000 (18:18 -0400)
committerDavid S. Miller <davem@davemloft.net>
Wed, 13 Jul 2016 18:53:40 +0000 (11:53 -0700)
commitf4979fcea7fd36d8e2f556abef86f80e0d5af1ba
treee44115be36c8eef0769d4defe66168635c64137a
parent22cb99fb76fb56b38f59770fbf22be03bb796d8d
rose: limit sk_filter trim to payload

Sockets can have a filter program attached that drops or trims
incoming packets based on the filter program return value.

Rose requires data packets to have at least ROSE_MIN_LEN bytes. It
verifies this on arrival in rose_route_frame and unconditionally pulls
the bytes in rose_recvmsg. The filter can trim packets to below this
value in-between, causing pull to fail, leaving the partial header at
the time of skb_copy_datagram_msg.

Place a lower bound on the size to which sk_filter may trim packets
by introducing sk_filter_trim_cap and call this for rose packets.

Signed-off-by: Willem de Bruijn <willemb@google.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/filter.h
net/core/filter.c
net/rose/rose_in.c