Messages in this thread | | | Date | Tue, 14 Nov 2023 10:44:16 +0100 | Subject | Re: [PATCH v2] /proc/sysrq-trigger: accept multiple keys at once | From | Jiri Slaby <> |
| |
On 14. 11. 23, 10:35, Tomas Mudrunka wrote: > Just for convenience. > This way we can do: > `echo _reisub > /proc/sysrq-trigger` > Instead of: > `for i in r e i s u b; do echo "$i" > /proc/sysrq-trigger; done;` > > This can be very useful when trying to execute sysrq combo remotely > or from userspace. When sending keys in multiple separate writes, > userspace can be killed before whole combo is completed. > Therefore putting all keys in single write is more robust approach. > > Signed-off-by: Tomas Mudrunka <tomas.mudrunka@gmail.com> > --- > Documentation/admin-guide/sysrq.rst | 4 ++++ > drivers/tty/sysrq.c | 17 ++++++++++++++--- > 2 files changed, 18 insertions(+), 3 deletions(-) > > diff --git a/Documentation/admin-guide/sysrq.rst b/Documentation/admin-guide/sysrq.rst > index 51906e473..9d46a33e5 100644 > --- a/Documentation/admin-guide/sysrq.rst > +++ b/Documentation/admin-guide/sysrq.rst > @@ -79,6 +79,10 @@ On all > > echo t > /proc/sysrq-trigger > > + Alternatively write key combo prepended by underscore. e.g.:: > + > + echo _reisub > /proc/sysrq-trigger > + > The :kbd:`<command key>` is case sensitive. > > What are the 'command' keys? > diff --git a/drivers/tty/sysrq.c b/drivers/tty/sysrq.c > index 6b4a28bcf..3455e6dd3 100644 > --- a/drivers/tty/sysrq.c > +++ b/drivers/tty/sysrq.c > @@ -1150,16 +1150,27 @@ EXPORT_SYMBOL(unregister_sysrq_key); > #ifdef CONFIG_PROC_FS > /* > * writing 'C' to /proc/sysrq-trigger is like sysrq-C > + * If first character in write is underscore, all characters are interpreted. > */ > static ssize_t write_sysrq_trigger(struct file *file, const char __user *buf, > size_t count, loff_t *ppos) > { > - if (count) { > + char bulk = false;
bool
> + size_t i; > + > + for (i = 0; i < count; i++) { > char c; > > - if (get_user(c, buf)) > + if (get_user(c, buf+i))
spaces around +
> return -EFAULT; > - __handle_sysrq(c, false); > + > + if (c == '_') > + bulk = true; > + else > + __handle_sysrq(c, false); > + > + if (!bulk) > + break; > } > > return count;
-- js suse labs
| |