Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp939861ybt; Wed, 8 Jul 2020 15:59:38 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzA8vyw60DoVtB2xvBRfYGTGBQq2XRi7ioGso6j2k2BB7Fs7p6yv/uo5X2sfrqUZT7NZC3j X-Received: by 2002:a05:6402:706:: with SMTP id w6mr67475582edx.326.1594249178293; Wed, 08 Jul 2020 15:59:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594249178; cv=none; d=google.com; s=arc-20160816; b=ocb6b0TdbNHy9ZPgyqZHiRbc3g4X6NP4mPMAvIcil4aV9dVm96eEE8HEUFbNaY4e0W uZHUB1KnH30v6avwpH54qMXXfVEwv6FMsjCEqeAmjCo2bik+FqhEGm3dJ+W/BR2FDJri D7YvHFG/OQwxM8OfrLb617LNMhQVDLvfxs01UuI5au3ACwNR+EKHwCnwlB/rQQvao5lL 1le/mfNfl3DldQSAZgMOTZE0LfvQrdoA12FrQV6KyGRR5C3SKeza+Ujg9jrK6aWdUnE+ lisM2yqqcinHP+4uMf5dWAqdgbvnZ3C2aIy9aBDZDK+rNSkfghAtZfmCcC9JApnfeySW lbuw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=5273qNZ2G1pvs6o6EmJVKX3kUo6d0ElK4jyei1Dx3qQ=; b=0Hp3QRTmawSkZRnXXKApoNM0ma4GkMVSvjxVha6rQ8uOXscSgaV2uMAiL/SVBs7r1d oqKI7AQE01lCJlE0hP/58G5OpNW5pVnAU2Helhfw7Bt3bWlQmOHTVUZqlg4nGsIXPU8o U/C0sVZ16EwVnTnCJBuAlb+6KoLnIaonfSi9myxcopPTPM0pyj8CgE5aMKfXllJdYPWf 9rPJ6TpoDct3ksgIEdgUu5kz8I3PEewqQcbkRq5Ye+omL4SXOiMcp4AJCS3uawGT4D4p UKghioYIf6xL9hVnZqX0rHcdnSxe+BPhUiWjxhgERX2rlUcHHruGNLSjPFEpGbxlSTvs EzRQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Hrf1dQ33; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id bz20si843651ejc.368.2020.07.08.15.59.14; Wed, 08 Jul 2020 15:59:38 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=Hrf1dQ33; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726285AbgGHW7E (ORCPT + 99 others); Wed, 8 Jul 2020 18:59:04 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:53584 "EHLO us-smtp-delivery-1.mimecast.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1725903AbgGHW7D (ORCPT ); Wed, 8 Jul 2020 18:59:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594249142; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=5273qNZ2G1pvs6o6EmJVKX3kUo6d0ElK4jyei1Dx3qQ=; b=Hrf1dQ33Nm98whQufWdd1nyZfEEoq0IV2VmEqFKlmzIgdXD7t2smvqgI6cqVG+FNoLToVN wwKwZ0BqH3WSHeAHvpSt41cXc8iGYbaCBSxKTaIbvR+vs7udOCoVqE+mtdqnSjFOM4ZTaE e3AHx6mU6M8pvmYb881wG8R+7dYOQz8= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-122-GVqzbkf7MEi_x9rvI2YAUA-1; Wed, 08 Jul 2020 18:58:58 -0400 X-MC-Unique: GVqzbkf7MEi_x9rvI2YAUA-1 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7858F108B; Wed, 8 Jul 2020 22:58:56 +0000 (UTC) Received: from hp-dl360pgen8-07.khw2.lab.eng.bos.redhat.com (hp-dl360pgen8-07.khw2.lab.eng.bos.redhat.com [10.16.210.135]) by smtp.corp.redhat.com (Postfix) with ESMTP id 865C15D9C9; Wed, 8 Jul 2020 22:58:51 +0000 (UTC) From: Jarod Wilson To: linux-kernel@vger.kernel.org Cc: Jarod Wilson , syzbot+582c98032903dcc04816@syzkaller.appspotmail.com, Huy Nguyen , Saeed Mahameed , Jay Vosburgh , Veaceslav Falico , Andy Gospodarek , "David S. Miller" , Jeff Kirsher , Jakub Kicinski , Steffen Klassert , Herbert Xu , netdev@vger.kernel.org, intel-wired-lan@lists.osuosl.org Subject: [PATCH net-next] bonding: don't need RTNL for ipsec helpers Date: Wed, 8 Jul 2020 18:58:49 -0400 Message-Id: <20200708225849.25198-1-jarod@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The bond_ipsec_* helpers don't need RTNL, and can potentially get called without it being held, so switch from rtnl_dereference() to rcu_dereference() to access bond struct data. Lightly tested with xfrm bonding, no problems found, should address the syzkaller bug referenced below. Reported-by: syzbot+582c98032903dcc04816@syzkaller.appspotmail.com CC: Huy Nguyen CC: Saeed Mahameed CC: Jay Vosburgh CC: Veaceslav Falico CC: Andy Gospodarek CC: "David S. Miller" CC: Jeff Kirsher CC: Jakub Kicinski CC: Steffen Klassert CC: Herbert Xu CC: netdev@vger.kernel.org CC: intel-wired-lan@lists.osuosl.org Signed-off-by: Jarod Wilson --- drivers/net/bonding/bond_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index f886d97c4359..e2d491c4378c 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -390,7 +390,7 @@ static int bond_ipsec_add_sa(struct xfrm_state *xs) return -EINVAL; bond = netdev_priv(bond_dev); - slave = rtnl_dereference(bond->curr_active_slave); + slave = rcu_dereference(bond->curr_active_slave); xs->xso.real_dev = slave->dev; bond->xs = xs; @@ -417,7 +417,7 @@ static void bond_ipsec_del_sa(struct xfrm_state *xs) return; bond = netdev_priv(bond_dev); - slave = rtnl_dereference(bond->curr_active_slave); + slave = rcu_dereference(bond->curr_active_slave); if (!slave) return; @@ -442,7 +442,7 @@ static bool bond_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *xs) { struct net_device *bond_dev = xs->xso.dev; struct bonding *bond = netdev_priv(bond_dev); - struct slave *curr_active = rtnl_dereference(bond->curr_active_slave); + struct slave *curr_active = rcu_dereference(bond->curr_active_slave); struct net_device *slave_dev = curr_active->dev; if (BOND_MODE(bond) != BOND_MODE_ACTIVEBACKUP) -- 2.20.1