From: Simon Horman <horms@kernel.org>
To: Doruk Tan Ozturk <doruk@0sec.ai>
Cc: alex.aring@gmail.com, stefan@datenfreihafen.org,
miquel.raynal@bootlin.com, aleksander.lobakin@intel.com,
linux-wpan@vger.kernel.org, netdev@vger.kernel.org,
security@kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH net v2] mac802154: llsec: add skb_cow_data() before in-place crypto
Date: Mon, 1 Jun 2026 21:43:09 +0100 [thread overview]
Message-ID: <20260601204309.GA3410996@horms.kernel.org> (raw)
In-Reply-To: <20260526183726.56100-1-doruk@0sec.ai>
On Tue, May 26, 2026 at 08:37:26PM +0200, Doruk Tan Ozturk wrote:
> llsec_do_encrypt_unauth(), llsec_do_encrypt_auth(),
> llsec_do_decrypt_unauth(), and llsec_do_decrypt_auth() all perform
> in-place cryptographic transformations on skb data. They build a
> scatterlist with sg_init_one() pointing into the skb's linear data area
> and then pass the same scatterlist as both src and dst to the crypto API
> (e.g. crypto_skcipher_encrypt/decrypt, crypto_aead_encrypt/decrypt).
>
> On the RX path, __ieee802154_rx_handle_packet() clones the received skb
> before handing it to each subscriber via ieee802154_subif_frame(). The
> cloned skb shares the same underlying data buffer via reference
> counting. When llsec_do_decrypt() subsequently modifies this shared
> buffer in place, it corrupts data that other clones -- potentially
> belonging to other sockets or subsystems -- still reference.
>
> On the TX path, similar data sharing can occur when an skb's head has
> been cloned (skb_cloned() returns true).
>
> The fix is to call skb_cow_data() before performing any in-place crypto
> operation. skb_cow_data() ensures that the skb's data area is not
> shared: if the skb head is cloned or the data spans multiple fragments,
> it copies the data into a private buffer that can be safely modified in
> place. This is the same pattern used by:
>
> - ESP (net/ipv4/esp4.c, net/ipv6/esp6.c)
> - MACsec (drivers/net/macsec.c)
> - WireGuard (drivers/net/wireguard/receive.c)
> - TIPC (net/tipc/crypto.c)
>
> Without this guard, in-place crypto on shared skb data leads to:
> - Silent data corruption of other skb clones
> - Use-after-free when the crypto API scatterwalk writes through a
> page that has already been freed by another clone's kfree_skb()
> - Kernel crashes under concurrent 802.15.4 traffic with security
> enabled (KASAN/KMSAN reports slab-use-after-free)
>
> Found by 0sec (https://0sec.ai) using automated source analysis.
>
> Fixes: 4c14a2fb5d14 ("mac802154: add llsec decryption method")
> Fixes: 03556e4d0dbb ("mac802154: add llsec encryption method")
> Cc: stable@vger.kernel.org
> Reported-by: Doruk Tan Ozturk <doruk@0sec.ai>
> Closes: https://lore.kernel.org/linux-wpan/20260525161806.96158-1-doruk@0sec.ai/
> Reviewed-by: Alexander Lobakin <aleksander.lobakin@intel.com>
> Signed-off-by: Doruk Tan Ozturk <doruk@0sec.ai>
> ---
> v2:
> - mark as net fix per Olek's review
> - add Closes tag
> - add Reviewed-by
FTR: An AI generated review of this patch is available on sashiko.dev.
I believe that review can be treated in the context of possible follow-up
and should not effect the progress of this patch.
prev parent reply other threads:[~2026-06-01 20:43 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-25 16:18 [PATCH] mac802154: llsec: add skb_cow_data() before in-place crypto Doruk Tan Ozturk
2026-05-26 16:13 ` Alexander Lobakin
2026-05-26 18:37 ` [PATCH net v2] " Doruk Tan Ozturk
2026-06-01 20:43 ` Simon Horman [this message]
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=20260601204309.GA3410996@horms.kernel.org \
--to=horms@kernel.org \
--cc=aleksander.lobakin@intel.com \
--cc=alex.aring@gmail.com \
--cc=doruk@0sec.ai \
--cc=linux-wpan@vger.kernel.org \
--cc=miquel.raynal@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=security@kernel.org \
--cc=stable@vger.kernel.org \
--cc=stefan@datenfreihafen.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.