From: Greg KH <gregkh@linuxfoundation.org>
To: Akash M/Akash M <akash.m5@samsung.com>
Cc: paul@crapouillou.net, Chris.Wulff@biamp.com,
tudor.ambarus@linaro.org, m.grzeschik@pengutronix.de,
viro@zeniv.linux.org.uk, quic_jjohnson@quicinc.com,
linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org,
jh0801.jung@samsung.com, dh10.jung@samsung.com,
naushad@samsung.com, rc93.raju@samsung.com,
taehyun.cho@samsung.com, hongpooh.kim@samsung.com,
eomji.oh@samsung.com, shijie.cai@samsung.com,
alim.akhtar@samsung.com, selvarasu.g@samsung.com,
stable@vger.kernel.org
Subject: Re: [PATCH] usb: gadget: f_fs: Remove WARN_ON in functionfs_bind
Date: Tue, 24 Dec 2024 08:38:37 +0100 [thread overview]
Message-ID: <2024122413-jersey-dimmer-b01a@gregkh> (raw)
In-Reply-To: <0375d572-4c88-40ce-af24-62a8b38fb7bf@samsung.com>
On Tue, Dec 24, 2024 at 12:12:49PM +0530, Akash M/Akash M wrote:
>
> On 12/19/2024 6:22 PM, Akash M wrote:
> > This commit addresses an issue related to below kernel panic where
> > panic_on_warn is enabled. It is caused by the unnecessary use of WARN_ON
> > in functionsfs_bind, which easily leads to the following scenarios.
> >
> > 1.adb_write in adbd 2. UDC write via configfs
> > ================= =====================
> >
> > ->usb_ffs_open_thread() ->UDC write
> > ->open_functionfs() ->configfs_write_iter()
> > ->adb_open() ->gadget_dev_desc_UDC_store()
> > ->adb_write() ->usb_gadget_register_driver_owner
> > ->driver_register()
> > ->StartMonitor() ->bus_add_driver()
> > ->adb_read() ->gadget_bind_driver()
> > <times-out without BIND event> ->configfs_composite_bind()
> > ->usb_add_function()
> > ->open_functionfs() ->ffs_func_bind()
> > ->adb_open() ->functionfs_bind()
> > <ffs->state !=FFS_ACTIVE>
> >
> > The adb_open, adb_read, and adb_write operations are invoked from the
> > daemon, but trying to bind the function is a process that is invoked by
> > UDC write through configfs, which opens up the possibility of a race
> > condition between the two paths. In this race scenario, the kernel panic
> > occurs due to the WARN_ON from functionfs_bind when panic_on_warn is
> > enabled. This commit fixes the kernel panic by removing the unnecessary
> > WARN_ON.
> >
> > Kernel panic - not syncing: kernel: panic_on_warn set ...
> > [ 14.542395] Call trace:
> > [ 14.542464] ffs_func_bind+0x1c8/0x14a8
> > [ 14.542468] usb_add_function+0xcc/0x1f0
> > [ 14.542473] configfs_composite_bind+0x468/0x588
> > [ 14.542478] gadget_bind_driver+0x108/0x27c
> > [ 14.542483] really_probe+0x190/0x374
> > [ 14.542488] __driver_probe_device+0xa0/0x12c
> > [ 14.542492] driver_probe_device+0x3c/0x220
> > [ 14.542498] __driver_attach+0x11c/0x1fc
> > [ 14.542502] bus_for_each_dev+0x104/0x160
> > [ 14.542506] driver_attach+0x24/0x34
> > [ 14.542510] bus_add_driver+0x154/0x270
> > [ 14.542514] driver_register+0x68/0x104
> > [ 14.542518] usb_gadget_register_driver_owner+0x48/0xf4
> > [ 14.542523] gadget_dev_desc_UDC_store+0xf8/0x144
> > [ 14.542526] configfs_write_iter+0xf0/0x138
> >
> > Fixes: ddf8abd25994 ("USB: f_fs: the FunctionFS driver")
> > Cc: stable@vger.kernel.org
> > Signed-off-by: Akash M <akash.m5@samsung.com>
> >
> > diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c
> > index 2920f8000bbd..92c883440e02 100644
> > --- a/drivers/usb/gadget/function/f_fs.c
> > +++ b/drivers/usb/gadget/function/f_fs.c
> > @@ -2285,7 +2285,7 @@ static int functionfs_bind(struct ffs_data *ffs, struct usb_composite_dev *cdev)
> > struct usb_gadget_strings **lang;
> > int first_id;
> >
> > - if (WARN_ON(ffs->state != FFS_ACTIVE
> > + if ((ffs->state != FFS_ACTIVE
> > || test_and_set_bit(FFS_FL_BOUND, &ffs->flags)))
> > return -EBADFD;
> >
> Hi Greg,
>
> I realized there's a minor nitpick with the patch I submitted -
> specifically a pair of extra brackets not removed.
>
> Do you want me to proceed with sending a v2 to address this, or is this
> something you can take care while applying this patch?
It's already in my tree, as you should have gotten an email about that.
Just send a cleanup patch for later, it's not a big deal.
thanks,
greg k-h
prev parent reply other threads:[~2024-12-24 7:39 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20241219125248epcas5p3887188e4df29b7b580cce9cfe6fed79f@epcas5p3.samsung.com>
2024-12-19 12:52 ` [PATCH] usb: gadget: f_fs: Remove WARN_ON in functionfs_bind Akash M
2024-12-24 6:42 ` Akash M/Akash M
2024-12-24 7:38 ` Greg KH [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=2024122413-jersey-dimmer-b01a@gregkh \
--to=gregkh@linuxfoundation.org \
--cc=Chris.Wulff@biamp.com \
--cc=akash.m5@samsung.com \
--cc=alim.akhtar@samsung.com \
--cc=dh10.jung@samsung.com \
--cc=eomji.oh@samsung.com \
--cc=hongpooh.kim@samsung.com \
--cc=jh0801.jung@samsung.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=m.grzeschik@pengutronix.de \
--cc=naushad@samsung.com \
--cc=paul@crapouillou.net \
--cc=quic_jjohnson@quicinc.com \
--cc=rc93.raju@samsung.com \
--cc=selvarasu.g@samsung.com \
--cc=shijie.cai@samsung.com \
--cc=stable@vger.kernel.org \
--cc=taehyun.cho@samsung.com \
--cc=tudor.ambarus@linaro.org \
--cc=viro@zeniv.linux.org.uk \
/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.