From mboxrd@z Thu Jan 1 00:00:00 1970 From: Steffen Klassert Subject: Re: [BUG] xfrm: unable to handle kernel NULL pointer dereference Date: Fri, 16 Nov 2018 20:12:46 +0100 Message-ID: <20181116191246.GN8742@gauss3.secunet.de> References: <20181116184800.GY16768@wantstofly.org> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Cc: , Jean-Philippe Menil , , , , To: Lennert Buytenhek Return-path: Received: from a.mx.secunet.com ([62.96.220.36]:39494 "EHLO a.mx.secunet.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725729AbeKQF02 (ORCPT ); Sat, 17 Nov 2018 00:26:28 -0500 Content-Disposition: inline In-Reply-To: <20181116184800.GY16768@wantstofly.org> Sender: netdev-owner@vger.kernel.org List-ID: On Fri, Nov 16, 2018 at 08:48:00PM +0200, Lennert Buytenhek wrote: > On Sat, Nov 10, 2018 at 08:34:34PM +0100, Jean-Philippe Menil wrote: > > > we're seeing unexpected crashes from kernel 4.15 to 4.18.17, using > > IPsec VTI interfaces, on several vpn hosts, since upgrade from 4.4. > > I looked into this with Jean-Philippe, and it appears to be crashing > on a NULL pointer dereference in the inlined xfrm_policy_check() call > in vti_rcv_cb(), and specifically on the skb_dst(skb) dereference in > __xfrm_policy_check2(): > > return (!net->xfrm.policy_count[dir] && !skb->sp) || > (skb_dst(skb)->flags & DST_NOPOLICY) || <===== > __xfrm_policy_check(sk, ndir, skb, family); > > Commit 9e1437937807 ("xfrm: Fix NULL pointer dereference when > skb_dst_force clears the dst_entry.") fixes a very similar problem on > the output and forward paths, but our issue seems to be triggering on > the input path. Yes, this is the same problem. skb_dst_force() does not really force a refcount anymore, it might clear the dst pointer instead (maybe this function should be renamed). Want to submit a fix? If not I'll go to fix that. Thanks!