Willem de Bruijn 4f0c40d944 dccp: limit sk_filter trim to payload
Dccp verifies packet integrity, including length, at initial rcv in
dccp_invalid_packet, later pulls headers in dccp_enqueue_skb.

A call to sk_filter in-between can cause __skb_pull to wrap skb->len.
skb_copy_datagram_msg interprets this as a negative value, so
(correctly) fails with EFAULT. The negative length is reported in
ioctl SIOCINQ or possibly in a DCCP_WARN in dccp_close.

Introduce an sk_receive_skb variant that caps how small a filter
program can trim packets, and call this in dccp with the header
length. Excessively trimmed packets are now processed normally and
queued for reception as 0B payloads.

Fixes: 7c657876b63c ("[DCCP]: Initial implementation")
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>
2016-07-13 11:53:41 -07:00
..
2016-04-13 10:41:10 +02:00
2016-05-27 15:26:11 -07:00
2016-05-23 13:51:10 -07:00
2016-07-05 14:08:47 -07:00
2016-05-11 19:36:28 -04:00
2016-06-22 16:32:23 -04:00
2015-10-23 03:05:19 -07:00
2016-05-29 22:33:25 -07:00
2016-07-04 16:09:49 -07:00
2016-06-07 15:30:21 -07:00
2016-06-10 23:22:55 -07:00
2016-06-09 23:41:03 -07:00
2016-05-08 23:46:14 -04:00