lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <cb91e5d3-7596-4564-9e0b-4819e437a692@datenfreihafen.org>
Date: Wed, 5 Jun 2024 22:02:24 +0200
From: Stefan Schmidt <stefan@...enfreihafen.org>
To: Alexander Aring <aahringo@...hat.com>, Jakub Kicinski <kuba@...nel.org>
Cc: Yunshui Jiang <jiangyunshui@...inos.cn>, linux-kernel@...r.kernel.org,
 netdev@...r.kernel.org, linux-wpan@...r.kernel.org, alex.aring@...il.com,
 miquel.raynal@...tlin.com, davem@...emloft.net
Subject: Re: [PATCH] net: mac802154: Fix racy device stats updates by
 DEV_STATS_INC() and DEV_STATS_ADD()

Hello Jakub, Alex,

On 04.06.24 15:52, Alexander Aring wrote:
> Hi,
> 
> On Mon, Jun 3, 2024 at 7:56 PM Jakub Kicinski <kuba@...nel.org> wrote:
>>
>> On Mon, 3 Jun 2024 11:33:28 +0200 Stefan Schmidt wrote:
>>> Hello.
>>>
>>> On 31.05.24 10:07, Yunshui Jiang wrote:
>>>> mac802154 devices update their dev->stats fields locklessly. Therefore
>>>> these counters should be updated atomically. Adopt SMP safe DEV_STATS_INC()
>>>> and DEV_STATS_ADD() to achieve this.
>>>>
>>>> Signed-off-by: Yunshui Jiang <jiangyunshui@...inos.cn>
>>>> ---
>>>>    net/mac802154/tx.c | 8 ++++----
>>>>    1 file changed, 4 insertions(+), 4 deletions(-)
>>>>
>>>> diff --git a/net/mac802154/tx.c b/net/mac802154/tx.c
>>>> index 2a6f1ed763c9..6fbed5bb5c3e 100644
>>>> --- a/net/mac802154/tx.c
>>>> +++ b/net/mac802154/tx.c
>>>> @@ -34,8 +34,8 @@ void ieee802154_xmit_sync_worker(struct work_struct *work)
>>>>      if (res)
>>>>              goto err_tx;
>>>>
>>>> -   dev->stats.tx_packets++;
>>>> -   dev->stats.tx_bytes += skb->len;
>>>> +   DEV_STATS_INC(dev, tx_packets);
>>>> +   DEV_STATS_ADD(dev, tx_bytes, skb->len);
>>>>
>>>>      ieee802154_xmit_complete(&local->hw, skb, false);
>>>>
>>>> @@ -90,8 +90,8 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb)
>>>>              if (ret)
>>>>                      goto err_wake_netif_queue;
>>>>
>>>> -           dev->stats.tx_packets++;
>>>> -           dev->stats.tx_bytes += len;
>>>> +           DEV_STATS_INC(dev, tx_packets);
>>>> +           DEV_STATS_ADD(dev, tx_bytes, len);
>>>>      } else {
>>>>              local->tx_skb = skb;
>>>>              queue_work(local->workqueue, &local->sync_tx_work);
>>>
>>> This patch has been applied to the wpan tree and will be
>>> part of the next pull request to net. Thanks!
>>
>> Hi! I haven't looked in detail, but FWIW
>>
>> $ git grep LLTX net/mac802154/
>> $
>>
>> and similar patch from this author has been rejected:
>>
>> https://lore.kernel.org/all/CANn89iLPYoOjMxNjBVHY7GwPFBGuxwRoM9gZZ-fWUUYFYjM1Uw@mail.gmail.com/
> 
> In the case of ieee802154_tx() yes the tx lock is held so it's like
> what the mentioned link says. The workqueue is an ordered workqueue
> and you either have the driver async xmit option (the preferred
> option) or the driver sync xmit callback on a per driver (implies per
> interface) basis.

When I reviewed and applied this I did indeed not realize the ordered 
workqueue making this unnecessary.

> I also don't see why there is currently a problem with the current
> non-atomic way.

For me this looks more like a wrapper that could avoid future problems 
for no cost. I would not mind if the patch stays. But you are right, its 
not strictly needed. Want me to back it out again?

regards
Stefan Schmidt

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ