tty: vt: pass proper pointers from tioclinux()

BugLink: https://bugs.launchpad.net/bugs/2114239

Pass proper types and proper pointers (the data with an offset) to the
TIOCL_* handlers. So that they need not to cast or add anything to the
passed pointer.

This makes obvious what is passed/consumed.

Signed-off-by: "Jiri Slaby (SUSE)" <jirislaby@kernel.org>
Tested-by: Helge Deller <deller@gmx.de> # parisc STI console
Link: https://lore.kernel.org/r/20240122110401.7289-6-jirislaby@kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
(cherry picked from commit a0b8a1681254346010edd2f94e799fb6b6568cf1)
[nwager: This is just a cleanup commit that doesn't change behaviour and
makes the following 6.12.14 patch apply cleanly:
e46d91ca504d ("tty: Permit some TIOCL_SETSEL modes without CAP_SYS_ADMIN")]
Signed-off-by: Noah Wager <noah.wager@canonical.com>
Signed-off-by: Mehmet Basaran <mehmet.basaran@canonical.com>
This commit is contained in:
Jiri Slaby (SUSE)
2024-01-22 12:03:19 +01:00
committed by Mehmet Basaran
parent e728c55f61
commit 6f57d123a7
3 changed files with 15 additions and 14 deletions
+4 -4
View File
@@ -7,7 +7,7 @@
* 'int set_selection_kernel(struct tiocl_selection *, struct tty_struct *)'
* 'void clear_selection(void)'
* 'int paste_selection(struct tty_struct *)'
* 'int sel_loadlut(char __user *)'
* 'int sel_loadlut(u32 __user *)'
*
* Now that /dev/vcs exists, most of this can disappear again.
*/
@@ -111,15 +111,15 @@ static inline int inword(const u32 c)
/**
* sel_loadlut() - load the LUT table
* @p: user table
* @lut: user table
*
* Load the LUT table from user space. The caller must hold the console
* lock. Make a temporary copy so a partial update doesn't make a mess.
*/
int sel_loadlut(char __user *p)
int sel_loadlut(u32 __user *lut)
{
u32 tmplut[ARRAY_SIZE(inwordLut)];
if (copy_from_user(tmplut, (u32 __user *)(p+4), sizeof(inwordLut)))
if (copy_from_user(tmplut, lut, sizeof(inwordLut)))
return -EFAULT;
memcpy(inwordLut, tmplut, sizeof(inwordLut));
return 0;
+10 -9
View File
@@ -145,7 +145,7 @@ static void gotoxy(struct vc_data *vc, int new_x, int new_y);
static void save_cur(struct vc_data *vc);
static void reset_terminal(struct vc_data *vc, int do_clear);
static void con_flush_chars(struct tty_struct *tty);
static int set_vesa_blanking(char __user *p);
static int set_vesa_blanking(u8 __user *mode);
static void set_cursor(struct vc_data *vc);
static void hide_cursor(struct vc_data *vc);
static void console_callback(struct work_struct *ignored);
@@ -3144,6 +3144,8 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
{
char type, data;
char __user *p = (char __user *)arg;
void __user *param_aligned32 = (u32 __user *)arg + 1;
void __user *param = (void __user *)arg + 1;
int lines;
int ret;
@@ -3157,8 +3159,7 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
case TIOCL_SETSEL:
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
return set_selection_user((struct tiocl_selection
__user *)(p+1), tty);
return set_selection_user(param, tty);
case TIOCL_PASTESEL:
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
@@ -3172,7 +3173,7 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
if (!capable(CAP_SYS_ADMIN))
return -EPERM;
console_lock();
ret = sel_loadlut(p);
ret = sel_loadlut(param_aligned32);
console_unlock();
break;
case TIOCL_GETSHIFTSTATE:
@@ -3191,7 +3192,7 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
return put_user(data, p);
case TIOCL_SETVESABLANK:
console_lock();
ret = set_vesa_blanking(p);
ret = set_vesa_blanking(param);
console_unlock();
break;
case TIOCL_GETKMSGREDIRECT:
@@ -3214,7 +3215,7 @@ int tioclinux(struct tty_struct *tty, unsigned long arg)
*/
return fg_console;
case TIOCL_SCROLLCONSOLE:
if (get_user(lines, (s32 __user *)(p+4)))
if (get_user(lines, (s32 __user *)param_aligned32))
return -EFAULT;
/*
@@ -4285,11 +4286,11 @@ postcore_initcall(vtconsole_class_init);
* Screen blanking
*/
static int set_vesa_blanking(char __user *p)
static int set_vesa_blanking(u8 __user *mode_user)
{
unsigned int mode;
u8 mode;
if (get_user(mode, p + 1))
if (get_user(mode, mode_user))
return -EFAULT;
vesa_blank_mode = (mode < 4) ? mode : 0;
+1 -1
View File
@@ -20,7 +20,7 @@ extern int set_selection_user(const struct tiocl_selection __user *sel,
extern int set_selection_kernel(struct tiocl_selection *v,
struct tty_struct *tty);
extern int paste_selection(struct tty_struct *tty);
extern int sel_loadlut(char __user *p);
extern int sel_loadlut(u32 __user *lut);
extern int mouse_reporting(void);
extern void mouse_report(struct tty_struct * tty, int butt, int mrx, int mry);