From: Edward Adam Davis <eadavis@sina.com>
To: syzbot+c35f34092a4bc9855be6@syzkaller.appspotmail.com
Cc: gregkh@linuxfoundation.org, kees@kernel.org, tiwai@suse.de,
linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org,
syzkaller-bugs@googlegroups.com
Subject: [PATCH] usb: gadget: midi2: prevent in/out jack from oob
Date: Wed, 26 Aug 2026 21:46:06 +0800 [thread overview]
Message-ID: <20260826134606.127250-1-eadavis@sina.com> (raw)
In-Reply-To: <6a8ed2cd.1d9ded08.62e62.00a8.GAE@google.com>
The increment of config->jack_out in append_midi1_out_jack() lacked
bounds checking, triggering issue [1] when the value approached the
limit MAX_CABLES.
A similar out-of-bounds issue exists in append_midi1_in_jack(), so it
is being fixed as well.
Before incrementing jack_out/in, the code now checks if the value has
reached the upper limit MAX_CABLES; if so, it exits and returns -EINVAL.
Additionally, the jack_id assignment is moved to occur after the jack_out
bounds check to prevent wasting IDs on invalid increments.
[1]
BUG: KASAN: stack-out-of-bounds in append_midi1_out_jack.isra.0+0x38c/0x470 drivers/usb/gadget/function/f_midi2.c:1713
Write of size 1 at addr ffffc90003277880 by task syz-executor119/6000
Call Trace:
append_midi1_out_jack.isra.0+0x38c/0x470 drivers/usb/gadget/function/f_midi2.c:1713
f_midi2_create_usb_configs+0x748/0xdf0 drivers/usb/gadget/function/f_midi2.c:1815
f_midi2_bind+0x1d12/0x2770 drivers/usb/gadget/function/f_midi2.c:2013
usb_add_function+0x219/0x890 drivers/usb/gadget/composite.c:333
configfs_composite_bind+0xd83/0x1960 drivers/usb/gadget/configfs.c:1802
gadget_bind_driver+0x28c/0xbf0 drivers/usb/gadget/udc/core.c:1662
call_driver_probe drivers/base/dd.c:628 [inline]
really_probe+0x241/0xa60 drivers/base/dd.c:706
Fixes: 856fa444b098 ("usb: gadget: midi2: Dynamically create MIDI 1.0 altset descriptors")
Reported-by: syzbot+c35f34092a4bc9855be6@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=c35f34092a4bc9855be6
Tested-by: syzbot+c35f34092a4bc9855be6@syzkaller.appspotmail.com
Signed-off-by: Edward Adam Davis <eadavis@sina.com>
---
drivers/usb/gadget/function/f_midi2.c | 20 ++++++++++++++------
1 file changed, 14 insertions(+), 6 deletions(-)
diff --git a/drivers/usb/gadget/function/f_midi2.c b/drivers/usb/gadget/function/f_midi2.c
index 19fdac024343..06a3add05447 100644
--- a/drivers/usb/gadget/function/f_midi2.c
+++ b/drivers/usb/gadget/function/f_midi2.c
@@ -1675,11 +1675,15 @@ static int append_midi1_in_jack(struct f_midi2 *midi2,
struct midi1_cable_mapping *map,
unsigned int type)
{
- struct usb_midi_in_jack_descriptor *jack =
- &config->jack_ins[config->jack_in++];
- int id = ++config->jack_id;
+ struct usb_midi_in_jack_descriptor *jack;
+ int id;
int err;
+ if (config->jack_in >= MAX_CABLES)
+ return -EINVAL;
+
+ id = ++config->jack_id;
+ jack = &config->jack_ins[config->jack_in++];
jack->bLength = 0x06;
jack->bDescriptorType = USB_DT_CS_INTERFACE;
jack->bDescriptorSubtype = USB_MS_MIDI_IN_JACK;
@@ -1700,11 +1704,15 @@ static int append_midi1_out_jack(struct f_midi2 *midi2,
struct midi1_cable_mapping *map,
unsigned int type, unsigned int source)
{
- struct usb_midi_out_jack_descriptor_1 *jack =
- &config->jack_outs[config->jack_out++];
- int id = ++config->jack_id;
+ struct usb_midi_out_jack_descriptor_1 *jack;
+ int id;
int err;
+ if (config->jack_out >= MAX_CABLES)
+ return -EINVAL;
+
+ id = ++config->jack_id;
+ jack = &config->jack_outs[config->jack_out++];
jack->bLength = 0x09;
jack->bDescriptorType = USB_DT_CS_INTERFACE;
jack->bDescriptorSubtype = USB_MS_MIDI_OUT_JACK;
--
2.43.0
next prev parent reply other threads:[~2026-08-26 13:46 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-26 11:49 [syzbot] [usb?] KASAN: stack-out-of-bounds Write in append_midi1_out_jack syzbot
2026-08-26 13:46 ` Edward Adam Davis [this message]
2026-08-28 12:07 ` [PATCH] usb: gadget: midi2: prevent in/out jack from oob Takashi Iwai
2026-08-29 2:05 ` Edward Adam Davis
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=20260826134606.127250-1-eadavis@sina.com \
--to=eadavis@sina.com \
--cc=gregkh@linuxfoundation.org \
--cc=kees@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=syzbot+c35f34092a4bc9855be6@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
--cc=tiwai@suse.de \
/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.