mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
tty: Permit some TIOCL_SETSEL modes without CAP_SYS_ADMIN
With this, processes without CAP_SYS_ADMIN are able to use TIOCLINUX with
subcode TIOCL_SETSEL, in the selection modes TIOCL_SETPOINTER,
TIOCL_SELCLEAR and TIOCL_SELMOUSEREPORT.
TIOCL_SETSEL was previously changed to require CAP_SYS_ADMIN, as this IOCTL
let callers change the selection buffer and could be used to simulate
keypresses. These three TIOCL_SETSEL selection modes, however, are safe to
use, as they do not modify the selection buffer.
This fixes a mouse support regression that affected Emacs (invisible mouse
cursor).
Cc: stable <stable@kernel.org>
Link: https://lore.kernel.org/r/ee3ec63269b43b34e1c90dd8c9743bf8@finder.org
Fixes: 8d1b43f6a6
("tty: Restrict access to TIOCLINUX' copy-and-paste subcommands")
Signed-off-by: Günther Noack <gnoack@google.com>
Reviewed-by: Kees Cook <kees@kernel.org>
Link: https://lore.kernel.org/r/20250110142122.1013222-1-gnoack@google.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
b06f388994
commit
2f83e38a09
2 changed files with 14 additions and 2 deletions
|
@ -192,6 +192,20 @@ int set_selection_user(const struct tiocl_selection __user *sel,
|
||||||
if (copy_from_user(&v, sel, sizeof(*sel)))
|
if (copy_from_user(&v, sel, sizeof(*sel)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* TIOCL_SELCLEAR, TIOCL_SELPOINTER and TIOCL_SELMOUSEREPORT are OK to
|
||||||
|
* use without CAP_SYS_ADMIN as they do not modify the selection.
|
||||||
|
*/
|
||||||
|
switch (v.sel_mode) {
|
||||||
|
case TIOCL_SELCLEAR:
|
||||||
|
case TIOCL_SELPOINTER:
|
||||||
|
case TIOCL_SELMOUSEREPORT:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (!capable(CAP_SYS_ADMIN))
|
||||||
|
return -EPERM;
|
||||||
|
}
|
||||||
|
|
||||||
return set_selection_kernel(&v, tty);
|
return set_selection_kernel(&v, tty);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3345,8 +3345,6 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TIOCL_SETSEL:
|
case TIOCL_SETSEL:
|
||||||
if (!capable(CAP_SYS_ADMIN))
|
|
||||||
return -EPERM;
|
|
||||||
return set_selection_user(param, tty);
|
return set_selection_user(param, tty);
|
||||||
case TIOCL_PASTESEL:
|
case TIOCL_PASTESEL:
|
||||||
if (!capable(CAP_SYS_ADMIN))
|
if (!capable(CAP_SYS_ADMIN))
|
||||||
|
|
Loading…
Add table
Reference in a new issue