From: sashiko-bot@kernel.org
To: "Boyan Liu" <yymhvert@gmail.com>
Cc: linux-usb@vger.kernel.org
Subject: Re: [PATCH] usb: gadget: f_ncm: Fix use-after-free in ncm_wrap_ntb()
Date: Thu, 15 Oct 2026 03:00:09 +0000 [thread overview]
Message-ID: <sashiko-outbox-172189@kernel.org> (raw)
In-Reply-To: <20261015024508.3179-1-yymhvert@gmail.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] usb: f_ncm: NULL pointer dereference in ncm_wrap_ntb()
- [Medium] usb: gadget: f_ncm: skb2 is leaked on subsequent allocation failure
--
commit 8ffb0eb4a1490f0bf7e457d7a7e0bc30811f90a1
Author: Boyan Liu <yymhvert@gmail.com>
usb: gadget: f_ncm: Fix use-after-free in ncm_wrap_ntb()
This commit addresses a use-after-free by clearing the ncm->skb_tx_data and
ncm->skb_tx_ndp pointers after freeing them in the error path of
ncm_wrap_ntb(). This prevents subsequent transmits from dereferencing the
freed skbs when allocation fails.
> diff --git a/drivers/usb/gadget/function/f_ncm.c b/drivers/usb/gadget/function/f_ncm.c
> index 500c9c19c78b4..be1c2fa36350b 100644
> --- a/drivers/usb/gadget/function/f_ncm.c
> +++ b/drivers/usb/gadget/function/f_ncm.c
> @@ -1132,10 +1132,14 @@ static struct sk_buff *ncm_wrap_ntb(struct gether *port,
>
> if (skb)
> dev_kfree_skb_any(skb);
[Severity: High]
Is it possible for ncm->netdev to be NULL when accessed in this error path?
If ncm_disable() or ncm_set_alt() executes concurrently with
eth_start_xmit(), they clear ncm->netdev locklessly before calling
gether_disconnect():
drivers/usb/gadget/function/f_ncm.c:ncm_disable() {
if (ncm->netdev) {
ncm->netdev = NULL;
gether_disconnect(&ncm->port);
}
}
Because eth_start_xmit() relies on dev->lock to verify dev->port_usb, it can
proceed to call ncm_wrap_ntb() if it acquires the lock before
gether_disconnect() disables the TX path.
If alloc_skb() then fails under memory pressure inside ncm_wrap_ntb(), the
code jumps to the err label just above this modified block:
err:
ncm->netdev->stats.tx_dropped++;
Will this unconditional dereference of ncm->netdev lead to a NULL pointer
dereference?
[Severity: Medium]
Is skb2 leaked in this error handling path?
Earlier in ncm_wrap_ntb(), when an existing batch is full, the function
packages the pending frames into skb2:
if (ncm->skb_tx_data && (... > max_size)) {
skb2 = package_for_tx(ncm);
if (!skb2)
goto err;
}
Immediately after, it attempts to allocate a new buffer for the incoming skb:
if (!ncm->skb_tx_data) {
...
ncm->skb_tx_data = alloc_skb(max_size, GFP_ATOMIC);
if (!ncm->skb_tx_data)
goto err;
If this alloc_skb() fails, the code jumps to the err label and runs through
the cleanup path modified here. While the incoming skb and the pending
ncm->skb_tx_data and ncm->skb_tx_ndp are freed, skb2 is never handled.
Since the function returns NULL without freeing skb2, is the newly
aggregated buffer leaked?
> - if (ncm->skb_tx_data)
> + if (ncm->skb_tx_data) {
> dev_kfree_skb_any(ncm->skb_tx_data);
> - if (ncm->skb_tx_ndp)
> + ncm->skb_tx_data = NULL;
> + }
> + if (ncm->skb_tx_ndp) {
> dev_kfree_skb_any(ncm->skb_tx_ndp);
> + ncm->skb_tx_ndp = NULL;
> + }
>
> return NULL;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261015024508.3179-1-yymhvert@gmail.com?part=1
prev parent reply other threads:[~2026-10-15 3:00 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-15 2:45 [PATCH] usb: gadget: f_ncm: Fix use-after-free in ncm_wrap_ntb() Boyan Liu
2026-10-15 3:00 ` sashiko-bot [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=sashiko-outbox-172189@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=yymhvert@gmail.com \
/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.