From: Maxim Devaev <mdevaev@gmail.com>
To: linux-usb@vger.kernel.org
Cc: mdevaev@gmail.com, Felipe Balbi <balbi@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Cai Huoqing <caihuoqing@baidu.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH] usb: gadget: f_mass_storage: break IO operations via configfs
Date: Wed, 6 Apr 2022 12:24:45 +0300 [thread overview]
Message-ID: <20220406092445.215288-1-mdevaev@gmail.com> (raw)
Using the SIGUSR1 signal sent to the "file-storage" thread
from the userspace, it is possible to break IO operations
that block the gadget. Thus, it is possible to implement
"force eject" without stopping the gadget and umounting
it from the host side.
There are two problems here:
- In order to send a signal, we need to find the thread
in procfs, but if several mass storage gadgets are created
in the system, each process has the same name and it is
impossible to distinguish one gadget from another.
- Root privileges are required to send the signal.
The proposed "break_io" interface solves both problems.
It allows us to get rid of the procfs search and delegate
sending the signal to a regular user.
Signed-off-by: Maxim Devaev <mdevaev@gmail.com>
---
drivers/usb/gadget/function/f_mass_storage.c | 22 ++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/drivers/usb/gadget/function/f_mass_storage.c b/drivers/usb/gadget/function/f_mass_storage.c
index 6ad669dde41c..e9b7c59e1dc4 100644
--- a/drivers/usb/gadget/function/f_mass_storage.c
+++ b/drivers/usb/gadget/function/f_mass_storage.c
@@ -3239,6 +3239,27 @@ static ssize_t fsg_opts_stall_store(struct config_item *item, const char *page,
CONFIGFS_ATTR(fsg_opts_, stall);
+static ssize_t fsg_opts_break_io_store(struct config_item *item,
+ const char *page, size_t len)
+{
+ struct fsg_opts *opts = to_fsg_opts(item);
+ unsigned long flags;
+
+ mutex_lock(&opts->lock);
+ spin_lock_irqsave(&opts->common->lock, flags);
+
+ if (opts->common->thread_task)
+ send_sig_info(SIGUSR1, SEND_SIG_PRIV,
+ opts->common->thread_task);
+
+ spin_unlock_irqrestore(&opts->common->lock, flags);
+ mutex_unlock(&opts->lock);
+
+ return len;
+}
+
+CONFIGFS_ATTR_WO(fsg_opts_, break_io);
+
#ifdef CONFIG_USB_GADGET_DEBUG_FILES
static ssize_t fsg_opts_num_buffers_show(struct config_item *item, char *page)
{
@@ -3283,6 +3304,7 @@ CONFIGFS_ATTR(fsg_opts_, num_buffers);
static struct configfs_attribute *fsg_attrs[] = {
&fsg_opts_attr_stall,
+ &fsg_opts_attr_break_io,
#ifdef CONFIG_USB_GADGET_DEBUG_FILES
&fsg_opts_attr_num_buffers,
#endif
--
2.35.1
next reply other threads:[~2022-04-06 13:01 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-06 9:24 Maxim Devaev [this message]
2022-04-06 15:24 ` [PATCH] usb: gadget: f_mass_storage: break IO operations via configfs Alan Stern
2022-04-06 16:52 ` Maxim Devaev
2022-04-06 17:51 ` Alan Stern
2022-04-06 18:36 ` Maxim Devaev
2022-04-07 16:06 ` Alan Stern
2022-04-07 17:47 ` Maxim Devaev
2022-04-08 14:59 ` Alan Stern
2022-04-09 8:57 ` Maxim Devaev
2022-04-09 13:46 ` Alan Stern
2022-04-09 14:08 ` Maxim Devaev
2022-04-09 20:22 ` Alan Stern
2022-04-09 22:42 ` Maxim Devaev
2022-04-10 1:57 ` Alan Stern
2022-04-10 2:18 ` Maxim Devaev
2022-04-10 15:21 ` Alan Stern
2022-04-10 16:14 ` Maxim Devaev
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=20220406092445.215288-1-mdevaev@gmail.com \
--to=mdevaev@gmail.com \
--cc=balbi@kernel.org \
--cc=caihuoqing@baidu.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).