[PATCH v2 0/2] usb: gadget: Fix g_ncm regression and atomic sleep in f_ncm

From: Kuen-Han Tsai

Date: Sat Feb 21 2026 - 09:48:59 EST


Commit 56a512a9b410 ("usb: gadget: f_ncm: align net_device lifecycle
with bind/unbind") addressed a lifetime mismatch where the network
interface outlived the parent gadget. However, this introduced two
regressions:

1. A NULL pointer dereference in the legacy g_ncm driver. The legacy
driver attempts to access the net_device during its binding process
before the NCM function driver is fully initialized.

2. A "sleeping function called from atomic context" error in f_ncm.
The current implementation holds a mutex which might sleep within
an atomic context.

To resolve these, store the configuration parameters (qmult, host_addr,
dev_addr) in opts_net until the network device is ready for g_ncm.
Additionally, remove the net_device pointer from the f_ncm_opts
structure. This eliminates the race condition with configfs and allows
dropping the mutex, preventing the atomic sleep issue.

Signed-off-by: Kuen-Han Tsai <khtsai@xxxxxxxxxx>
---
Changes in v2:
- Remove the RFC tag.
- Fix NPE in gncm reported by the kernel test bot.
- Fix a "sleeping function called from atomic context" error.
- Link to v1: https://lore.kernel.org/r/20260214-legacy-ncm-v1-1-139c5bcc6636@xxxxxxxxxx

---
Kuen-Han Tsai (2):
usb: legacy: ncm: Fix NPE in gncm_bind
usb: gadget: f_ncm: Fix atomic context locking issue

drivers/usb/gadget/function/f_ncm.c | 29 +++++++++++---------------
drivers/usb/gadget/function/u_ether_configfs.h | 11 +---------
drivers/usb/gadget/function/u_ncm.h | 1 -
drivers/usb/gadget/legacy/ncm.c | 13 +++++++++---
4 files changed, 23 insertions(+), 31 deletions(-)
---
base-commit: da87d45b195148d670ab995367d52aa9e8a9a1fa
change-id: 20260214-legacy-ncm-8c001295b343

Best regards,
--
Kuen-Han Tsai <khtsai@xxxxxxxxxx>