From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755891AbdKJDO1 (ORCPT ); Thu, 9 Nov 2017 22:14:27 -0500 Received: from [128.1.224.119] ([128.1.224.119]:35702 "EHLO ringil.hmeau.com" rhost-flags-FAIL-FAIL-OK-OK) by vger.kernel.org with ESMTP id S1755701AbdKJDO0 (ORCPT ); Thu, 9 Nov 2017 22:14:26 -0500 Date: Fri, 10 Nov 2017 14:14:06 +1100 From: Herbert Xu To: Dmitry Vyukov Cc: syzbot , David Miller , LKML , netdev , Steffen Klassert , syzkaller-bugs@googlegroups.com Subject: Re: kernel BUG at net/key/af_key.c:LINE! Message-ID: <20171110031406.GA22823@gondor.apana.org.au> References: <001a114a958ce46160055c4c4f66@google.com> <20171108074742.GA28177@gondor.apana.org.au> <20171109113857.GA15280@gondor.apana.org.au> <20171110020459.GA22329@gondor.apana.org.au> <20171110021145.GB22329@gondor.apana.org.au> <20171110023038.GA22532@gondor.apana.org.au> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20171110023038.GA22532@gondor.apana.org.au> User-Agent: Mutt/1.5.21 (2010-09-15) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, Nov 10, 2017 at 01:30:38PM +1100, Herbert Xu wrote: > > I found the problem. This crap is coming from clone_policy. Now > let me where this code came from. ---8<--- Subject: xfrm: Copy policy family in clone_policy The syzbot found an ancient bug in the IPsec code. When we cloned a socket policy (for example, for a child TCP socket derived from a listening socket), we did not copy the family field. This results in a live policy with a zero family field. This triggers a BUG_ON check in the af_key code when the cloned policy is retrieved. This patch fixes it by copying the family field over. Reported-by: syzbot Signed-off-by: Herbert Xu diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index 8cafb3c..c238959 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -1306,6 +1306,7 @@ static struct xfrm_policy *clone_policy(const struct xfrm_policy *old, int dir) newp->xfrm_nr = old->xfrm_nr; newp->index = old->index; newp->type = old->type; + newp->family = old->family; memcpy(newp->xfrm_vec, old->xfrm_vec, newp->xfrm_nr*sizeof(struct xfrm_tmpl)); spin_lock_bh(&net->xfrm.xfrm_policy_lock); -- Email: Herbert Xu Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt