From: zjamg <ndaugoing@gmail.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Michal Nazarewicz <mina86@mina86.com>,
Robert Baldyga <r.baldyga@samsung.com>,
Felipe Balbi <balbi@ti.com>,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
zjamg <ndaugoing@gmail.com>
Subject: [PATCH 0/1] usb: gadget: f_fs: fix NULL pointer dereference in FUNCTIONFS_ENDPOINT_DESC
Date: Thu, 17 Sep 2026 21:53:36 +0800 [thread overview]
Message-ID: <20260917135337.65444-1-ndaugoing@gmail.com> (raw)
Hi,
This patch addresses a kernel NULL pointer dereference panic in
FunctionFS when calling the FUNCTIONFS_ENDPOINT_DESC ioctl.
In FunctionFS, user space can legitimately supply only a subset of
speed descriptors (e.g., only full-speed descriptors via
FUNCTIONFS_HAS_FS_DESC). When the USB gadget is subsequently connected
to a high-speed or super-speed host:
1. composite.c:config_ep_by_speed() detects that the function lacks
descriptors for the current speed and gracefully falls back to
full-speed descriptors (f->fs_descriptors).
2. The endpoint is enabled via usb_ep_enable(), and epfile->ep becomes
valid.
3. However, when user space calls ioctl(fd, FUNCTIONFS_ENDPOINT_DESC),
ffs_epfile_ioctl() selects the descriptor index solely based on
epfile->ffs->gadget->speed (desc_idx = 1 for HIGH, 2 for
SUPER/SUPER_PLUS).
4. Because user space only supplied full-speed descriptors,
epfile->ep->descs[desc_idx] is NULL.
5. The subsequent memcpy(&desc1, desc, desc->bLength) immediately
dereferences the NULL pointer, causing an instant kernel crash:
[ 2.154836] Call trace:
[ 2.154836] ffs_epfile_ioctl+0xe14/0x2c40 [usb_f_fs] (P)
[ 2.155003] __arm64_sys_ioctl+0x128/0x1a4
[ 2.155298] invoke_syscall.constprop.0+0x64/0x260
[ 2.155374] el0_svc_common.constprop.0+0xa0/0x240
[ 2.155441] do_el0_svc+0x3c/0x60
[ 2.155494] el0_svc+0x38/0x98
[ 2.155547] el0t_64_sync_handler+0xa0/0xe4
[ 2.155606] el0t_64_sync+0x198/0x19c
[ 2.156463] Kernel panic - not syncing: Oops: Fatal exception
The fix restores the speed fallback loop mirroring config_ep_by_speed()
and historical f_fs behavior, defensively checks epfile->ep->ep->desc
as a fallback, and returns -EINVAL safely if no valid descriptor is
found.
Testing with QEMU ARM64 using dummy_hcd confirms that after applying
this patch, the ioctl succeeds and returns the fallback descriptor
cleanly without any crash.
zjamg (1):
usb: gadget: f_fs: Fix NULL pointer dereference in
FUNCTIONFS_ENDPOINT_DESC
drivers/usb/gadget/function/f_fs.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
--
2.53.0
next reply other threads:[~2026-09-17 13:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-17 13:53 zjamg [this message]
2026-09-17 13:53 ` [PATCH 1/1] usb: gadget: f_fs: Fix NULL pointer dereference in FUNCTIONFS_ENDPOINT_DESC zjamg
2026-09-17 15:15 ` Greg Kroah-Hartman
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=20260917135337.65444-1-ndaugoing@gmail.com \
--to=ndaugoing@gmail.com \
--cc=balbi@ti.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=mina86@mina86.com \
--cc=r.baldyga@samsung.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.