netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
@ 2024-08-16  3:55 Hangbin Liu
  2024-08-16  3:55 ` [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload Hangbin Liu
                   ` (4 more replies)
  0 siblings, 5 replies; 13+ messages in thread
From: Hangbin Liu @ 2024-08-16  3:55 UTC (permalink / raw)
  To: netdev
  Cc: Jay Vosburgh, David S . Miller, Jakub Kicinski, Paolo Abeni,
	Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca, Hangbin Liu

I planned to add the new XFRM state offload functions after Jianbo's
patchset [1], but it seems that may take some time. Therefore, I am
posting these two patches to net-next now, as our users are waiting for
this functionality. If Jianbo's patch is applied first, I can update these
patches accordingly.

[1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com

Hangbin Liu (2):
  bonding: Add ESN support to IPSec HW offload
  bonding: support xfrm state update

 drivers/net/bonding/bond_main.c | 76 +++++++++++++++++++++++++++++++++
 1 file changed, 76 insertions(+)

-- 
2.45.0


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload
  2024-08-16  3:55 [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
@ 2024-08-16  3:55 ` Hangbin Liu
  2024-08-16 16:32   ` Simon Horman
  2024-08-17 11:36   ` kernel test robot
  2024-08-16  3:55 ` [PATCH net-next 2/2] bonding: support xfrm state update Hangbin Liu
                   ` (3 subsequent siblings)
  4 siblings, 2 replies; 13+ messages in thread
From: Hangbin Liu @ 2024-08-16  3:55 UTC (permalink / raw)
  To: netdev
  Cc: Jay Vosburgh, David S . Miller, Jakub Kicinski, Paolo Abeni,
	Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca, Hangbin Liu

Currently, users can see that bonding supports IPSec HW offload via ethtool.
However, this functionality does not work with NICs like Mellanox cards when
ESN (Extended Sequence Numbers) is enabled, as ESN functions are not yet
supported. This patch adds ESN support to the bonding IPSec device offload,
ensuring proper functionality with NICs that support ESN.

Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
---
 drivers/net/bonding/bond_main.c | 38 +++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index f9633a6f8571..4e3d7979fe01 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -629,10 +629,48 @@ static bool bond_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *xs)
 	return err;
 }
 
+/**
+ * bond_advance_esn_state - ESN support for IPSec HW offload
+ * @xs: pointer to transformer state struct
+ **/
+static void bond_advance_esn_state(struct xfrm_state *xs)
+{
+	struct net_device *bond_dev = xs->xso.dev;
+	struct bond_ipsec *ipsec;
+	struct bonding *bond;
+	struct slave *slave;
+
+	if (!bond_dev)
+		return;
+
+	rcu_read_lock();
+	bond = netdev_priv(bond_dev);
+	slave = rcu_dereference(bond->curr_active_slave);
+
+	if (!slave)
+		goto out;
+
+	if (!xs->xso.real_dev)
+		goto out;
+
+	WARN_ON(xs->xso.real_dev != slave->dev);
+
+	if (!slave->dev->xfrmdev_ops ||
+	    !slave->dev->xfrmdev_ops->xdo_dev_state_advance_esn) {
+		slave_warn(bond_dev, slave->dev, "%s: no slave xdo_dev_state_advance_esn\n", __func__);
+		goto out;
+	}
+
+	slave->dev->xfrmdev_ops->xdo_dev_state_advance_esn(xs);
+out:
+	rcu_read_unlock();
+}
+
 static const struct xfrmdev_ops bond_xfrmdev_ops = {
 	.xdo_dev_state_add = bond_ipsec_add_sa,
 	.xdo_dev_state_delete = bond_ipsec_del_sa,
 	.xdo_dev_offload_ok = bond_ipsec_offload_ok,
+	.xdo_dev_state_advance_esn = bond_advance_esn_state,
 };
 #endif /* CONFIG_XFRM_OFFLOAD */
 
-- 
2.45.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* [PATCH net-next 2/2] bonding: support xfrm state update
  2024-08-16  3:55 [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
  2024-08-16  3:55 ` [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload Hangbin Liu
@ 2024-08-16  3:55 ` Hangbin Liu
  2024-08-16  4:01 ` [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 13+ messages in thread
From: Hangbin Liu @ 2024-08-16  3:55 UTC (permalink / raw)
  To: netdev
  Cc: Jay Vosburgh, David S . Miller, Jakub Kicinski, Paolo Abeni,
	Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca, Hangbin Liu

The patch add xfrm statistics update for bonding IPsec offload.

Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
---
 drivers/net/bonding/bond_main.c | 38 +++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
index 4e3d7979fe01..9a7caf677c71 100644
--- a/drivers/net/bonding/bond_main.c
+++ b/drivers/net/bonding/bond_main.c
@@ -666,11 +666,49 @@ static void bond_advance_esn_state(struct xfrm_state *xs)
 	rcu_read_unlock();
 }
 
+/**
+ * bond_xfrm_update_stats - Update xfrm state
+ * @xs: pointer to transformer state struct
+ **/
+static void bond_xfrm_update_stats(struct xfrm_state *xs)
+{
+	struct net_device *bond_dev = xs->xso.dev;
+	struct bond_ipsec *ipsec;
+	struct bonding *bond;
+	struct slave *slave;
+
+	if (!bond_dev)
+		return;
+
+	rcu_read_lock();
+	bond = netdev_priv(bond_dev);
+	slave = rcu_dereference(bond->curr_active_slave);
+
+	if (!slave)
+		goto out;
+
+	if (!xs->xso.real_dev)
+		goto out;
+
+	WARN_ON(xs->xso.real_dev != slave->dev);
+
+	if (!slave->dev->xfrmdev_ops ||
+	    !slave->dev->xfrmdev_ops->xdo_dev_state_update_stats) {
+		slave_warn(bond_dev, slave->dev, "%s: no slave xdo_dev_state_update_stats\n", __func__);
+		goto out;
+	}
+
+	slave->dev->xfrmdev_ops->xdo_dev_state_update_stats(xs);
+out:
+	rcu_read_unlock();
+}
+
 static const struct xfrmdev_ops bond_xfrmdev_ops = {
 	.xdo_dev_state_add = bond_ipsec_add_sa,
 	.xdo_dev_state_delete = bond_ipsec_del_sa,
 	.xdo_dev_offload_ok = bond_ipsec_offload_ok,
 	.xdo_dev_state_advance_esn = bond_advance_esn_state,
+	.xdo_dev_state_update_stats = bond_xfrm_update_stats,
 };
 #endif /* CONFIG_XFRM_OFFLOAD */
 
-- 
2.45.0


^ permalink raw reply related	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  3:55 [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
  2024-08-16  3:55 ` [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload Hangbin Liu
  2024-08-16  3:55 ` [PATCH net-next 2/2] bonding: support xfrm state update Hangbin Liu
@ 2024-08-16  4:01 ` Hangbin Liu
  2024-08-16  6:00 ` Nikolay Aleksandrov
  2024-08-16  6:06 ` Nikolay Aleksandrov
  4 siblings, 0 replies; 13+ messages in thread
From: Hangbin Liu @ 2024-08-16  4:01 UTC (permalink / raw)
  To: netdev
  Cc: Jay Vosburgh, David S . Miller, Jakub Kicinski, Paolo Abeni,
	Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca

On Fri, Aug 16, 2024 at 11:55:16AM +0800, Hangbin Liu wrote:
> I planned to add the new XFRM state offload functions after Jianbo's
> patchset [1], but it seems that may take some time. Therefore, I am
> posting these two patches to net-next now, as our users are waiting for
> this functionality. If Jianbo's patch is applied first, I can update these
> patches accordingly.
> 
> [1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com

Forgot to say, The xdo_dev_state_free will be added by Jianbo's patchset.
I will add the bonding xfrm policy offload in future.

Thanks
Hangbin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  3:55 [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
                   ` (2 preceding siblings ...)
  2024-08-16  4:01 ` [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
@ 2024-08-16  6:00 ` Nikolay Aleksandrov
  2024-08-16  8:35   ` Hangbin Liu
  2024-08-16  6:06 ` Nikolay Aleksandrov
  4 siblings, 1 reply; 13+ messages in thread
From: Nikolay Aleksandrov @ 2024-08-16  6:00 UTC (permalink / raw)
  To: Hangbin Liu, netdev
  Cc: Jay Vosburgh, David S . Miller, Jakub Kicinski, Paolo Abeni,
	Eric Dumazet, Tariq Toukan, Jianbo Liu, Sabrina Dubroca

On 16/08/2024 06:55, Hangbin Liu wrote:
> I planned to add the new XFRM state offload functions after Jianbo's
> patchset [1], but it seems that may take some time. Therefore, I am
> posting these two patches to net-next now, as our users are waiting for
> this functionality. If Jianbo's patch is applied first, I can update these
> patches accordingly.
> 
> [1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com
> 
> Hangbin Liu (2):
>   bonding: Add ESN support to IPSec HW offload
>   bonding: support xfrm state update
> 
>  drivers/net/bonding/bond_main.c | 76 +++++++++++++++++++++++++++++++++
>  1 file changed, 76 insertions(+)
> 

the set looks good to me, one minor cosmetic nit is that the two
functions look very much alike only difference is the actual call
can you maybe factor out the boilerplate?





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  3:55 [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
                   ` (3 preceding siblings ...)
  2024-08-16  6:00 ` Nikolay Aleksandrov
@ 2024-08-16  6:06 ` Nikolay Aleksandrov
  2024-08-16  8:32   ` Hangbin Liu
  4 siblings, 1 reply; 13+ messages in thread
From: Nikolay Aleksandrov @ 2024-08-16  6:06 UTC (permalink / raw)
  To: Hangbin Liu, netdev
  Cc: Jay Vosburgh, David S . Miller, Jakub Kicinski, Paolo Abeni,
	Eric Dumazet, Tariq Toukan, Jianbo Liu, Sabrina Dubroca

On 16/08/2024 06:55, Hangbin Liu wrote:
> I planned to add the new XFRM state offload functions after Jianbo's
> patchset [1], but it seems that may take some time. Therefore, I am
> posting these two patches to net-next now, as our users are waiting for
> this functionality. If Jianbo's patch is applied first, I can update these
> patches accordingly.
> 
> [1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com
> 
> Hangbin Liu (2):
>   bonding: Add ESN support to IPSec HW offload
>   bonding: support xfrm state update
> 
>  drivers/net/bonding/bond_main.c | 76 +++++++++++++++++++++++++++++++++
>  1 file changed, 76 insertions(+)
> 

(not related to this set, but to bond xfrm)
By the way looking at bond's xfrm code, what prevents bond_ipsec_offload_ok()
from dereferencing a null ptr?
I mean it does:
        curr_active = rcu_dereference(bond->curr_active_slave);
        real_dev = curr_active->dev;

If this is running only under RCU as the code suggests then
curr_active_slave can change to NULL in parallel. Should there be a
check for curr_active before deref or am I missing something?

Cheers,
 Nik





^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  6:06 ` Nikolay Aleksandrov
@ 2024-08-16  8:32   ` Hangbin Liu
  2024-08-16  8:37     ` Nikolay Aleksandrov
  0 siblings, 1 reply; 13+ messages in thread
From: Hangbin Liu @ 2024-08-16  8:32 UTC (permalink / raw)
  To: Nikolay Aleksandrov
  Cc: netdev, Jay Vosburgh, David S . Miller, Jakub Kicinski,
	Paolo Abeni, Eric Dumazet, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca

On Fri, Aug 16, 2024 at 09:06:12AM +0300, Nikolay Aleksandrov wrote:
> On 16/08/2024 06:55, Hangbin Liu wrote:
> > I planned to add the new XFRM state offload functions after Jianbo's
> > patchset [1], but it seems that may take some time. Therefore, I am
> > posting these two patches to net-next now, as our users are waiting for
> > this functionality. If Jianbo's patch is applied first, I can update these
> > patches accordingly.
> > 
> > [1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com
> > 
> > Hangbin Liu (2):
> >   bonding: Add ESN support to IPSec HW offload
> >   bonding: support xfrm state update
> > 
> >  drivers/net/bonding/bond_main.c | 76 +++++++++++++++++++++++++++++++++
> >  1 file changed, 76 insertions(+)
> > 
> 
> (not related to this set, but to bond xfrm)
> By the way looking at bond's xfrm code, what prevents bond_ipsec_offload_ok()
> from dereferencing a null ptr?
> I mean it does:
>         curr_active = rcu_dereference(bond->curr_active_slave);
>         real_dev = curr_active->dev;
> 
> If this is running only under RCU as the code suggests then
> curr_active_slave can change to NULL in parallel. Should there be a
> check for curr_active before deref or am I missing something?

Yes, we can do like
real_dev = curr_active ? curr_active->dev : NULL;

Thanks
Hangbin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  6:00 ` Nikolay Aleksandrov
@ 2024-08-16  8:35   ` Hangbin Liu
  0 siblings, 0 replies; 13+ messages in thread
From: Hangbin Liu @ 2024-08-16  8:35 UTC (permalink / raw)
  To: Nikolay Aleksandrov
  Cc: netdev, Jay Vosburgh, David S . Miller, Jakub Kicinski,
	Paolo Abeni, Eric Dumazet, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca

On Fri, Aug 16, 2024 at 09:00:17AM +0300, Nikolay Aleksandrov wrote:
> the set looks good to me, one minor cosmetic nit is that the two
> functions look very much alike only difference is the actual call
> can you maybe factor out the boilerplate?

Thanks, I will update the patch to use a common function for the checking.

Hangbin

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  8:32   ` Hangbin Liu
@ 2024-08-16  8:37     ` Nikolay Aleksandrov
  2024-08-16  9:04       ` Nikolay Aleksandrov
  0 siblings, 1 reply; 13+ messages in thread
From: Nikolay Aleksandrov @ 2024-08-16  8:37 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, Jay Vosburgh, David S . Miller, Jakub Kicinski,
	Paolo Abeni, Eric Dumazet, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca

On 16/08/2024 11:32, Hangbin Liu wrote:
> On Fri, Aug 16, 2024 at 09:06:12AM +0300, Nikolay Aleksandrov wrote:
>> On 16/08/2024 06:55, Hangbin Liu wrote:
>>> I planned to add the new XFRM state offload functions after Jianbo's
>>> patchset [1], but it seems that may take some time. Therefore, I am
>>> posting these two patches to net-next now, as our users are waiting for
>>> this functionality. If Jianbo's patch is applied first, I can update these
>>> patches accordingly.
>>>
>>> [1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com
>>>
>>> Hangbin Liu (2):
>>>   bonding: Add ESN support to IPSec HW offload
>>>   bonding: support xfrm state update
>>>
>>>  drivers/net/bonding/bond_main.c | 76 +++++++++++++++++++++++++++++++++
>>>  1 file changed, 76 insertions(+)
>>>
>>
>> (not related to this set, but to bond xfrm)
>> By the way looking at bond's xfrm code, what prevents bond_ipsec_offload_ok()
>> from dereferencing a null ptr?
>> I mean it does:
>>         curr_active = rcu_dereference(bond->curr_active_slave);
>>         real_dev = curr_active->dev;
>>
>> If this is running only under RCU as the code suggests then
>> curr_active_slave can change to NULL in parallel. Should there be a
>> check for curr_active before deref or am I missing something?
> 
> Yes, we can do like
> real_dev = curr_active ? curr_active->dev : NULL;
> 
> Thanks
> Hangbin

Right, let me try and trigger it and I'll send a patch. :)


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  8:37     ` Nikolay Aleksandrov
@ 2024-08-16  9:04       ` Nikolay Aleksandrov
  2024-08-16  9:58         ` Nikolay Aleksandrov
  0 siblings, 1 reply; 13+ messages in thread
From: Nikolay Aleksandrov @ 2024-08-16  9:04 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, Jay Vosburgh, David S . Miller, Jakub Kicinski,
	Paolo Abeni, Eric Dumazet, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca

On 16/08/2024 11:37, Nikolay Aleksandrov wrote:
> On 16/08/2024 11:32, Hangbin Liu wrote:
>> On Fri, Aug 16, 2024 at 09:06:12AM +0300, Nikolay Aleksandrov wrote:
>>> On 16/08/2024 06:55, Hangbin Liu wrote:
>>>> I planned to add the new XFRM state offload functions after Jianbo's
>>>> patchset [1], but it seems that may take some time. Therefore, I am
>>>> posting these two patches to net-next now, as our users are waiting for
>>>> this functionality. If Jianbo's patch is applied first, I can update these
>>>> patches accordingly.
>>>>
>>>> [1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com
>>>>
>>>> Hangbin Liu (2):
>>>>   bonding: Add ESN support to IPSec HW offload
>>>>   bonding: support xfrm state update
>>>>
>>>>  drivers/net/bonding/bond_main.c | 76 +++++++++++++++++++++++++++++++++
>>>>  1 file changed, 76 insertions(+)
>>>>
>>>
>>> (not related to this set, but to bond xfrm)
>>> By the way looking at bond's xfrm code, what prevents bond_ipsec_offload_ok()
>>> from dereferencing a null ptr?
>>> I mean it does:
>>>         curr_active = rcu_dereference(bond->curr_active_slave);
>>>         real_dev = curr_active->dev;
>>>
>>> If this is running only under RCU as the code suggests then
>>> curr_active_slave can change to NULL in parallel. Should there be a
>>> check for curr_active before deref or am I missing something?
>>
>> Yes, we can do like
>> real_dev = curr_active ? curr_active->dev : NULL;
>>
>> Thanks
>> Hangbin
> 
> Right, let me try and trigger it and I'll send a patch. :)
> 

Just fyi I was able to trigger this null deref easily and one more
thing - there is a second null deref after this one because real_dev is
used directly :(

I'll send a patch to fix both in a bit.



^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 0/2] Bonding: support new xfrm state offload functions
  2024-08-16  9:04       ` Nikolay Aleksandrov
@ 2024-08-16  9:58         ` Nikolay Aleksandrov
  0 siblings, 0 replies; 13+ messages in thread
From: Nikolay Aleksandrov @ 2024-08-16  9:58 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, Jay Vosburgh, David S . Miller, Jakub Kicinski,
	Paolo Abeni, Eric Dumazet, Tariq Toukan, Jianbo Liu,
	Sabrina Dubroca

On 16/08/2024 12:04, Nikolay Aleksandrov wrote:
> On 16/08/2024 11:37, Nikolay Aleksandrov wrote:
>> On 16/08/2024 11:32, Hangbin Liu wrote:
>>> On Fri, Aug 16, 2024 at 09:06:12AM +0300, Nikolay Aleksandrov wrote:
>>>> On 16/08/2024 06:55, Hangbin Liu wrote:
>>>>> I planned to add the new XFRM state offload functions after Jianbo's
>>>>> patchset [1], but it seems that may take some time. Therefore, I am
>>>>> posting these two patches to net-next now, as our users are waiting for
>>>>> this functionality. If Jianbo's patch is applied first, I can update these
>>>>> patches accordingly.
>>>>>
>>>>> [1] https://lore.kernel.org/netdev/20240815142103.2253886-2-tariqt@nvidia.com
>>>>>
>>>>> Hangbin Liu (2):
>>>>>   bonding: Add ESN support to IPSec HW offload
>>>>>   bonding: support xfrm state update
>>>>>
>>>>>  drivers/net/bonding/bond_main.c | 76 +++++++++++++++++++++++++++++++++
>>>>>  1 file changed, 76 insertions(+)
>>>>>
>>>>
>>>> (not related to this set, but to bond xfrm)
>>>> By the way looking at bond's xfrm code, what prevents bond_ipsec_offload_ok()
>>>> from dereferencing a null ptr?
>>>> I mean it does:
>>>>         curr_active = rcu_dereference(bond->curr_active_slave);
>>>>         real_dev = curr_active->dev;
>>>>
>>>> If this is running only under RCU as the code suggests then
>>>> curr_active_slave can change to NULL in parallel. Should there be a
>>>> check for curr_active before deref or am I missing something?
>>>
>>> Yes, we can do like
>>> real_dev = curr_active ? curr_active->dev : NULL;
>>>
>>> Thanks
>>> Hangbin
>>
>> Right, let me try and trigger it and I'll send a patch. :)
>>
> 
> Just fyi I was able to trigger this null deref easily and one more
> thing - there is a second null deref after this one because real_dev is
> used directly :(
> 
> I'll send a patch to fix both in a bit.
> 
> 

TBH I don't know how bond xfrm code is running at all. There are *many*
bugs when I took a closer look. I'll try to prepare a patch-set to address
them all. This code is seriously broken...


^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload
  2024-08-16  3:55 ` [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload Hangbin Liu
@ 2024-08-16 16:32   ` Simon Horman
  2024-08-17 11:36   ` kernel test robot
  1 sibling, 0 replies; 13+ messages in thread
From: Simon Horman @ 2024-08-16 16:32 UTC (permalink / raw)
  To: Hangbin Liu
  Cc: netdev, Jay Vosburgh, David S . Miller, Jakub Kicinski,
	Paolo Abeni, Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan,
	Jianbo Liu, Sabrina Dubroca

On Fri, Aug 16, 2024 at 11:55:17AM +0800, Hangbin Liu wrote:
> Currently, users can see that bonding supports IPSec HW offload via ethtool.
> However, this functionality does not work with NICs like Mellanox cards when
> ESN (Extended Sequence Numbers) is enabled, as ESN functions are not yet
> supported. This patch adds ESN support to the bonding IPSec device offload,
> ensuring proper functionality with NICs that support ESN.
> 
> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com>
> ---
>  drivers/net/bonding/bond_main.c | 38 +++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
> 
> diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c
> index f9633a6f8571..4e3d7979fe01 100644
> --- a/drivers/net/bonding/bond_main.c
> +++ b/drivers/net/bonding/bond_main.c
> @@ -629,10 +629,48 @@ static bool bond_ipsec_offload_ok(struct sk_buff *skb, struct xfrm_state *xs)
>  	return err;
>  }
>  
> +/**
> + * bond_advance_esn_state - ESN support for IPSec HW offload
> + * @xs: pointer to transformer state struct
> + **/
> +static void bond_advance_esn_state(struct xfrm_state *xs)
> +{
> +	struct net_device *bond_dev = xs->xso.dev;
> +	struct bond_ipsec *ipsec;

Hi Hangbin,

ipsec is unused in this function and should be removed.
Likewise in patch 2/2.

> +	struct bonding *bond;
> +	struct slave *slave;
> +
> +	if (!bond_dev)
> +		return;
> +
> +	rcu_read_lock();
> +	bond = netdev_priv(bond_dev);
> +	slave = rcu_dereference(bond->curr_active_slave);
> +
> +	if (!slave)
> +		goto out;
> +
> +	if (!xs->xso.real_dev)
> +		goto out;
> +
> +	WARN_ON(xs->xso.real_dev != slave->dev);
> +
> +	if (!slave->dev->xfrmdev_ops ||
> +	    !slave->dev->xfrmdev_ops->xdo_dev_state_advance_esn) {
> +		slave_warn(bond_dev, slave->dev, "%s: no slave xdo_dev_state_advance_esn\n", __func__);
> +		goto out;
> +	}
> +
> +	slave->dev->xfrmdev_ops->xdo_dev_state_advance_esn(xs);
> +out:
> +	rcu_read_unlock();
> +}

...

-- 
pw-bot: cr

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload
  2024-08-16  3:55 ` [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload Hangbin Liu
  2024-08-16 16:32   ` Simon Horman
@ 2024-08-17 11:36   ` kernel test robot
  1 sibling, 0 replies; 13+ messages in thread
From: kernel test robot @ 2024-08-17 11:36 UTC (permalink / raw)
  To: Hangbin Liu, netdev
  Cc: oe-kbuild-all, Jay Vosburgh, David S . Miller, Jakub Kicinski,
	Paolo Abeni, Eric Dumazet, Nikolay Aleksandrov, Tariq Toukan,
	Jianbo Liu, Sabrina Dubroca, Hangbin Liu

Hi Hangbin,

kernel test robot noticed the following build warnings:

[auto build test WARNING on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Hangbin-Liu/bonding-Add-ESN-support-to-IPSec-HW-offload/20240816-122016
base:   net-next/main
patch link:    https://lore.kernel.org/r/20240816035518.203704-2-liuhangbin%40gmail.com
patch subject: [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload
config: openrisc-allyesconfig (https://download.01.org/0day-ci/archive/20240817/202408171959.Qj3TkV2v-lkp@intel.com/config)
compiler: or1k-linux-gcc (GCC) 14.1.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240817/202408171959.Qj3TkV2v-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408171959.Qj3TkV2v-lkp@intel.com/

All warnings (new ones prefixed by >>):

   drivers/net/bonding/bond_main.c: In function 'bond_advance_esn_state':
>> drivers/net/bonding/bond_main.c:639:28: warning: unused variable 'ipsec' [-Wunused-variable]
     639 |         struct bond_ipsec *ipsec;
         |                            ^~~~~


vim +/ipsec +639 drivers/net/bonding/bond_main.c

   631	
   632	/**
   633	 * bond_advance_esn_state - ESN support for IPSec HW offload
   634	 * @xs: pointer to transformer state struct
   635	 **/
   636	static void bond_advance_esn_state(struct xfrm_state *xs)
   637	{
   638		struct net_device *bond_dev = xs->xso.dev;
 > 639		struct bond_ipsec *ipsec;
   640		struct bonding *bond;
   641		struct slave *slave;
   642	
   643		if (!bond_dev)
   644			return;
   645	
   646		rcu_read_lock();
   647		bond = netdev_priv(bond_dev);
   648		slave = rcu_dereference(bond->curr_active_slave);
   649	
   650		if (!slave)
   651			goto out;
   652	
   653		if (!xs->xso.real_dev)
   654			goto out;
   655	
   656		WARN_ON(xs->xso.real_dev != slave->dev);
   657	
   658		if (!slave->dev->xfrmdev_ops ||
   659		    !slave->dev->xfrmdev_ops->xdo_dev_state_advance_esn) {
   660			slave_warn(bond_dev, slave->dev, "%s: no slave xdo_dev_state_advance_esn\n", __func__);
   661			goto out;
   662		}
   663	
   664		slave->dev->xfrmdev_ops->xdo_dev_state_advance_esn(xs);
   665	out:
   666		rcu_read_unlock();
   667	}
   668	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2024-08-17 11:36 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-16  3:55 [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
2024-08-16  3:55 ` [PATCH net-next 1/2] bonding: Add ESN support to IPSec HW offload Hangbin Liu
2024-08-16 16:32   ` Simon Horman
2024-08-17 11:36   ` kernel test robot
2024-08-16  3:55 ` [PATCH net-next 2/2] bonding: support xfrm state update Hangbin Liu
2024-08-16  4:01 ` [PATCH net-next 0/2] Bonding: support new xfrm state offload functions Hangbin Liu
2024-08-16  6:00 ` Nikolay Aleksandrov
2024-08-16  8:35   ` Hangbin Liu
2024-08-16  6:06 ` Nikolay Aleksandrov
2024-08-16  8:32   ` Hangbin Liu
2024-08-16  8:37     ` Nikolay Aleksandrov
2024-08-16  9:04       ` Nikolay Aleksandrov
2024-08-16  9:58         ` Nikolay Aleksandrov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).