From: Hangbin Liu <liuhangbin@gmail.com>
To: Nikolay Aleksandrov <razor@blackwall.org>
Cc: netdev@vger.kernel.org, Taehee Yoo <ap420073@gmail.com>,
davem@davemloft.net, jv@jvosburgh.net, andy@greyhouse.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
jarod@redhat.com
Subject: Re: [PATCH net 3/4] bonding: fix xfrm real_dev null pointer dereference
Date: Mon, 19 Aug 2024 10:54:56 +0800 [thread overview]
Message-ID: <ZsK0AJXxNtJqr9AR@Laptop-X1> (raw)
In-Reply-To: <20240816114813.326645-4-razor@blackwall.org>
On Fri, Aug 16, 2024 at 02:48:12PM +0300, Nikolay Aleksandrov wrote:
> We shouldn't set real_dev to NULL because packets can be in transit and
> xfrm might call xdo_dev_offload_ok() in parallel. All callbacks assume
> real_dev is set.
>
> Example trace:
> kernel: BUG: unable to handle page fault for address: 0000000000001030
> kernel: bond0: (slave eni0np1): making interface the new active one
> kernel: #PF: supervisor write access in kernel mode
> kernel: #PF: error_code(0x0002) - not-present page
> kernel: PGD 0 P4D 0
> kernel: Oops: 0002 [#1] PREEMPT SMP
> kernel: CPU: 4 PID: 2237 Comm: ping Not tainted 6.7.7+ #12
> kernel: Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014
> kernel: RIP: 0010:nsim_ipsec_offload_ok+0xc/0x20 [netdevsim]
> kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
I saw the errors are during bond_ipsec_add_sa_all, which also
set ipsec->xs->xso.real_dev = NULL. Should we fix it there?
Thanks
Hangbin
> kernel: Code: e0 0f 0b 48 83 7f 38 00 74 de 0f 0b 48 8b 47 08 48 8b 37 48 8b 78 40 e9 b2 e5 9a d7 66 90 0f 1f 44 00 00 48 8b 86 80 02 00 00 <83> 80 30 10 00 00 01 b8 01 00 00 00 c3 0f 1f 80 00 00 00 00 0f 1f
> kernel: bond0: (slave eni0np1): making interface the new active one
> kernel: RSP: 0018:ffffabde81553b98 EFLAGS: 00010246
> kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
> kernel:
> kernel: RAX: 0000000000000000 RBX: ffff9eb404e74900 RCX: ffff9eb403d97c60
> kernel: RDX: ffffffffc090de10 RSI: ffff9eb404e74900 RDI: ffff9eb3c5de9e00
> kernel: RBP: ffff9eb3c0a42000 R08: 0000000000000010 R09: 0000000000000014
> kernel: R10: 7974203030303030 R11: 3030303030303030 R12: 0000000000000000
> kernel: R13: ffff9eb3c5de9e00 R14: ffffabde81553cc8 R15: ffff9eb404c53000
> kernel: FS: 00007f2a77a3ad00(0000) GS:ffff9eb43bd00000(0000) knlGS:0000000000000000
> kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> kernel: CR2: 0000000000001030 CR3: 00000001122ab000 CR4: 0000000000350ef0
> kernel: bond0: (slave eni0np1): making interface the new active one
> kernel: Call Trace:
> kernel: <TASK>
> kernel: ? __die+0x1f/0x60
> kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
> kernel: ? page_fault_oops+0x142/0x4c0
> kernel: ? do_user_addr_fault+0x65/0x670
> kernel: ? kvm_read_and_reset_apf_flags+0x3b/0x50
> kernel: bond0: (slave eni0np1): making interface the new active one
> kernel: ? exc_page_fault+0x7b/0x180
> kernel: ? asm_exc_page_fault+0x22/0x30
> kernel: ? nsim_bpf_uninit+0x50/0x50 [netdevsim]
> kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
> kernel: ? nsim_ipsec_offload_ok+0xc/0x20 [netdevsim]
> kernel: bond0: (slave eni0np1): making interface the new active one
> kernel: bond_ipsec_offload_ok+0x7b/0x90 [bonding]
> kernel: xfrm_output+0x61/0x3b0
> kernel: bond0: (slave eni0np1): bond_ipsec_add_sa_all: failed to add SA
> kernel: ip_push_pending_frames+0x56/0x80
>
> Fixes: 18cb261afd7b ("bonding: support hardware encryption offload to slaves")
> Signed-off-by: Nikolay Aleksandrov <razor@blackwall.org>
> ---
> drivers/net/bonding/bond_main.c | 1 -
> 1 file changed, 1 deletion(-)
>
> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
> index 65ddb71eebcd..f74bacf071fc 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -582,7 +582,6 @@ static void bond_ipsec_del_sa_all(struct bonding *bond)
> } else {
> slave->dev->xfrmdev_ops->xdo_dev_state_delete(ipsec->xs);
> }
> - ipsec->xs->xso.real_dev = NULL;
> }
> spin_unlock_bh(&bond->ipsec_lock);
> rcu_read_unlock();
> --
> 2.44.0
>
next prev parent reply other threads:[~2024-08-19 2:55 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-16 11:48 [PATCH net 0/4] bonding: fix xfrm offload bugs Nikolay Aleksandrov
2024-08-16 11:48 ` [PATCH net 1/4] bonding: fix bond_ipsec_offload_ok return type Nikolay Aleksandrov
2024-08-19 2:43 ` Hangbin Liu
2024-08-16 11:48 ` [PATCH net 2/4] bonding: fix null pointer deref in bond_ipsec_offload_ok Nikolay Aleksandrov
2024-08-19 2:45 ` Hangbin Liu
2024-08-19 2:53 ` Hangbin Liu
2024-08-19 7:25 ` Nikolay Aleksandrov
2024-08-19 8:12 ` Hangbin Liu
2024-08-19 7:26 ` Eric Dumazet
2024-08-16 11:48 ` [PATCH net 3/4] bonding: fix xfrm real_dev null pointer dereference Nikolay Aleksandrov
2024-08-19 2:54 ` Hangbin Liu [this message]
2024-08-19 7:34 ` Nikolay Aleksandrov
2024-08-19 8:25 ` Nikolay Aleksandrov
2024-08-19 8:34 ` Hangbin Liu
2024-08-16 11:48 ` [PATCH net 4/4] bonding: fix xfrm state handling when clearing active slave Nikolay Aleksandrov
2024-08-19 3:05 ` Hangbin Liu
2024-08-19 7:38 ` Nikolay Aleksandrov
2024-08-20 3:48 ` Hangbin Liu
2024-08-16 11:52 ` [PATCH net 0/4] bonding: fix xfrm offload bugs Nikolay Aleksandrov
2024-08-20 13:40 ` patchwork-bot+netdevbpf
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=ZsK0AJXxNtJqr9AR@Laptop-X1 \
--to=liuhangbin@gmail.com \
--cc=andy@greyhouse.net \
--cc=ap420073@gmail.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=jarod@redhat.com \
--cc=jv@jvosburgh.net \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=razor@blackwall.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.