All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: linux-kernel@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	stable@vger.kernel.org, Eric Dumazet <edumazet@google.com>,
	Andrey Konovalov <andreyknvl@google.com>,
	"David S. Miller" <davem@davemloft.net>
Subject: [PATCH 4.4 13/28] net/dccp: fix use-after-free in dccp_invalid_packet
Date: Fri,  9 Dec 2016 17:17:55 +0100	[thread overview]
Message-ID: <20161209161748.457835474@linuxfoundation.org> (raw)
In-Reply-To: <20161209161747.923205441@linuxfoundation.org>

4.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Eric Dumazet <edumazet@google.com>


[ Upstream commit 648f0c28df282636c0c8a7a19ca3ce5fc80a39c3 ]

pskb_may_pull() can reallocate skb->head, we need to reload dh pointer
in dccp_invalid_packet() or risk use after free.

Bug found by Andrey Konovalov using syzkaller.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 net/dccp/ipv4.c |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

--- a/net/dccp/ipv4.c
+++ b/net/dccp/ipv4.c
@@ -698,6 +698,7 @@ int dccp_invalid_packet(struct sk_buff *
 {
 	const struct dccp_hdr *dh;
 	unsigned int cscov;
+	u8 dccph_doff;
 
 	if (skb->pkt_type != PACKET_HOST)
 		return 1;
@@ -719,18 +720,19 @@ int dccp_invalid_packet(struct sk_buff *
 	/*
 	 * If P.Data Offset is too small for packet type, drop packet and return
 	 */
-	if (dh->dccph_doff < dccp_hdr_len(skb) / sizeof(u32)) {
-		DCCP_WARN("P.Data Offset(%u) too small\n", dh->dccph_doff);
+	dccph_doff = dh->dccph_doff;
+	if (dccph_doff < dccp_hdr_len(skb) / sizeof(u32)) {
+		DCCP_WARN("P.Data Offset(%u) too small\n", dccph_doff);
 		return 1;
 	}
 	/*
 	 * If P.Data Offset is too too large for packet, drop packet and return
 	 */
-	if (!pskb_may_pull(skb, dh->dccph_doff * sizeof(u32))) {
-		DCCP_WARN("P.Data Offset(%u) too large\n", dh->dccph_doff);
+	if (!pskb_may_pull(skb, dccph_doff * sizeof(u32))) {
+		DCCP_WARN("P.Data Offset(%u) too large\n", dccph_doff);
 		return 1;
 	}
-
+	dh = dccp_hdr(skb);
 	/*
 	 * If P.type is not Data, Ack, or DataAck and P.X == 0 (the packet
 	 * has short sequence numbers), drop packet and return

  parent reply	other threads:[~2016-12-09 16:35 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20161209161807epcas5p2a4f0544b5e462fc831c24de653b6785e@epcas5p2.samsung.com>
2016-12-09 16:17 ` [PATCH 4.4 00/28] 4.4.38-stable review Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 01/28] virtio-net: add a missing synchronize_net() Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 02/28] net: check dead netns for peernet2id_alloc() Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 03/28] ip6_tunnel: disable caching when the traffic class is inherited Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 04/28] net: sky2: Fix shutdown crash Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 05/28] af_unix: conditionally use freezable blocking calls in read Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 06/28] rtnetlink: fix FDB size computation Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 07/28] l2tp: fix racy SOCK_ZAPPED flag check in l2tp_ip{,6}_bind() Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 08/28] net: dsa: bcm_sf2: Ensure we re-negotiate EEE during after link change Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 09/28] net, sched: respect rcu grace period on cls destruction Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 10/28] net/sched: pedit: make sure that offset is valid Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 11/28] netlink: Call cb->done from a worker thread Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 12/28] netlink: Do not schedule work from sk_destruct Greg Kroah-Hartman
2016-12-09 16:17   ` Greg Kroah-Hartman [this message]
2016-12-09 16:17   ` [PATCH 4.4 14/28] packet: fix race condition in packet_set_ring Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 15/28] net: bcmgenet: Utilize correct struct device for all DMA operations Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 16/28] sh_eth: remove unchecked interrupts for RZ/A1 Greg Kroah-Hartman
2016-12-09 16:17   ` [PATCH 4.4 17/28] geneve: avoid use-after-free of skb->data Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 18/28] net: avoid signed overflows for SO_{SND|RCV}BUFFORCE Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 19/28] net: ping: check minimum size on ICMP header length Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 20/28] sparc32: Fix inverted invalid_frame_pointer checks on sigreturns Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 21/28] sparc64: Fix find_node warning if numa node cannot be found Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 22/28] sparc64: fix compile warning section mismatch in find_node() Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 23/28] Dont feed anything but regular iovecs to blk_rq_map_user_iov Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 24/28] constify iov_iter_count() and iter_is_iovec() Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 25/28] ipv6: Set skb->protocol properly for local output Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 26/28] ipv4: " Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 27/28] esp4: Fix integrity verification when ESN are used Greg Kroah-Hartman
2016-12-09 16:18   ` [PATCH 4.4 28/28] esp6: " Greg Kroah-Hartman
2016-12-09 18:22   ` [PATCH 4.4 00/28] 4.4.38-stable review Shuah Khan
2016-12-09 22:35   ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20161209161748.457835474@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=andreyknvl@google.com \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.