| From 75ea5726299d0301b74883c838c57275fc44d62b Mon Sep 17 00:00:00 2001 |
| From: Willem de Bruijn <willemb@google.com> |
| Date: Thu, 22 Dec 2016 18:19:16 -0500 |
| Subject: [PATCH] inet: fix IP(V6)_RECVORIGDSTADDR for udp sockets |
| |
| commit 39b2dd765e0711e1efd1d1df089473a8dd93ad48 upstream. |
| |
| Socket cmsg IP(V6)_RECVORIGDSTADDR checks that port range lies within |
| the packet. For sockets that have transport headers pulled, transport |
| offset can be negative. Use signed comparison to avoid overflow. |
| |
| Fixes: e6afc8ace6dd ("udp: remove headers from UDP packets before queueing") |
| Reported-by: Nisar Jagabar <njagabar@cloudmark.com> |
| Signed-off-by: Willem de Bruijn <willemb@google.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c |
| index 11ef96e2147a..4964d1bdb390 100644 |
| --- a/net/ipv4/ip_sockglue.c |
| +++ b/net/ipv4/ip_sockglue.c |
| @@ -137,7 +137,7 @@ static void ip_cmsg_recv_dstaddr(struct msghdr *msg, struct sk_buff *skb) |
| const struct iphdr *iph = ip_hdr(skb); |
| __be16 *ports = (__be16 *)skb_transport_header(skb); |
| |
| - if (skb_transport_offset(skb) + 4 > skb->len) |
| + if (skb_transport_offset(skb) + 4 > (int)skb->len) |
| return; |
| |
| /* All current transport protocols have the port numbers in the |
| diff --git a/net/ipv6/datagram.c b/net/ipv6/datagram.c |
| index 37874e2f30ed..5d4d5f3e6fee 100644 |
| --- a/net/ipv6/datagram.c |
| +++ b/net/ipv6/datagram.c |
| @@ -698,7 +698,7 @@ void ip6_datagram_recv_specific_ctl(struct sock *sk, struct msghdr *msg, |
| struct sockaddr_in6 sin6; |
| __be16 *ports = (__be16 *) skb_transport_header(skb); |
| |
| - if (skb_transport_offset(skb) + 4 <= skb->len) { |
| + if (skb_transport_offset(skb) + 4 <= (int)skb->len) { |
| /* All current transport protocols have the port numbers in the |
| * first four bytes of the transport header and this function is |
| * written with this assumption in mind. |
| -- |
| 2.10.1 |
| |