From: Greg Kroah-Hartman Date: Sat, 25 Jun 2022 13:28:44 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v5.18.7~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=cdaf43086e9c70833f33aa86d1c0237ad14862ce;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: vt-drop-old-font-ioctls.patch --- diff --git a/queue-5.10/series b/queue-5.10/series new file mode 100644 index 00000000000..a2a5948449c --- /dev/null +++ b/queue-5.10/series @@ -0,0 +1 @@ +vt-drop-old-font-ioctls.patch diff --git a/queue-5.10/vt-drop-old-font-ioctls.patch b/queue-5.10/vt-drop-old-font-ioctls.patch new file mode 100644 index 00000000000..bdebbbadf9f --- /dev/null +++ b/queue-5.10/vt-drop-old-font-ioctls.patch @@ -0,0 +1,307 @@ +From ff2047fb755d4415ec3c70ac799889371151796d Mon Sep 17 00:00:00 2001 +From: Jiri Slaby +Date: Tue, 5 Jan 2021 13:02:35 +0100 +Subject: vt: drop old FONT ioctls + +From: Jiri Slaby + +commit ff2047fb755d4415ec3c70ac799889371151796d upstream. + +Drop support for these ioctls: +* PIO_FONT, PIO_FONTX +* GIO_FONT, GIO_FONTX +* PIO_FONTRESET + +As was demonstrated by commit 90bfdeef83f1 (tty: make FONTX ioctl use +the tty pointer they were actually passed), these ioctls are not used +from userspace, as: +1) they used to be broken (set up font on current console, not the open + one) and racy (before the commit above) +2) KDFONTOP ioctl is used for years instead + +Note that PIO_FONTRESET is defunct on most systems as VGA_CONSOLE is set +on them for ages. That turns on BROKEN_GRAPHICS_PROGRAMS which makes +PIO_FONTRESET just return an error. + +We are removing KD_FONT_FLAG_OLD here as it was used only by these +removed ioctls. kd.h header exists both in kernel and uapi headers, so +we can remove the kernel one completely. Everyone includeing kd.h will +now automatically get the uapi one. + +There are now unused definitions of the ioctl numbers and "struct +consolefontdesc" in kd.h, but as it is a uapi header, I am not touching +these. + +Signed-off-by: Jiri Slaby +Link: https://lore.kernel.org/r/20210105120239.28031-8-jslaby@suse.cz +Cc: guodaxing +Signed-off-by: Greg Kroah-Hartman +--- + drivers/tty/vt/vt.c | 39 ----------- + drivers/tty/vt/vt_ioctl.c | 151 ---------------------------------------------- + include/linux/kd.h | 8 -- + 3 files changed, 3 insertions(+), 195 deletions(-) + delete mode 100644 include/linux/kd.h + +--- a/drivers/tty/vt/vt.c ++++ b/drivers/tty/vt/vt.c +@@ -4625,16 +4625,8 @@ static int con_font_get(struct vc_data * + + if (op->data && font.charcount > op->charcount) + rc = -ENOSPC; +- if (!(op->flags & KD_FONT_FLAG_OLD)) { +- if (font.width > op->width || font.height > op->height) +- rc = -ENOSPC; +- } else { +- if (font.width != 8) +- rc = -EIO; +- else if ((op->height && font.height > op->height) || +- font.height > 32) +- rc = -ENOSPC; +- } ++ if (font.width > op->width || font.height > op->height) ++ rc = -ENOSPC; + if (rc) + goto out; + +@@ -4662,7 +4654,7 @@ static int con_font_set(struct vc_data * + return -EINVAL; + if (op->charcount > 512) + return -EINVAL; +- if (op->width <= 0 || op->width > 32 || op->height > 32) ++ if (op->width <= 0 || op->width > 32 || !op->height || op->height > 32) + return -EINVAL; + size = (op->width+7)/8 * 32 * op->charcount; + if (size > max_font_size) +@@ -4672,31 +4664,6 @@ static int con_font_set(struct vc_data * + if (IS_ERR(font.data)) + return PTR_ERR(font.data); + +- if (!op->height) { /* Need to guess font height [compat] */ +- int h, i; +- u8 *charmap = font.data; +- +- /* +- * If from KDFONTOP ioctl, don't allow things which can be done +- * in userland,so that we can get rid of this soon +- */ +- if (!(op->flags & KD_FONT_FLAG_OLD)) { +- kfree(font.data); +- return -EINVAL; +- } +- +- for (h = 32; h > 0; h--) +- for (i = 0; i < op->charcount; i++) +- if (charmap[32*i+h-1]) +- goto nonzero; +- +- kfree(font.data); +- return -EINVAL; +- +- nonzero: +- op->height = h; +- } +- + font.charcount = op->charcount; + font.width = op->width; + font.height = op->height; +--- a/drivers/tty/vt/vt_ioctl.c ++++ b/drivers/tty/vt/vt_ioctl.c +@@ -486,70 +486,6 @@ static int vt_k_ioctl(struct tty_struct + return 0; + } + +-static inline int do_fontx_ioctl(struct vc_data *vc, int cmd, +- struct consolefontdesc __user *user_cfd, +- struct console_font_op *op) +-{ +- struct consolefontdesc cfdarg; +- int i; +- +- if (copy_from_user(&cfdarg, user_cfd, sizeof(struct consolefontdesc))) +- return -EFAULT; +- +- switch (cmd) { +- case PIO_FONTX: +- op->op = KD_FONT_OP_SET; +- op->flags = KD_FONT_FLAG_OLD; +- op->width = 8; +- op->height = cfdarg.charheight; +- op->charcount = cfdarg.charcount; +- op->data = cfdarg.chardata; +- return con_font_op(vc, op); +- +- case GIO_FONTX: +- op->op = KD_FONT_OP_GET; +- op->flags = KD_FONT_FLAG_OLD; +- op->width = 8; +- op->height = cfdarg.charheight; +- op->charcount = cfdarg.charcount; +- op->data = cfdarg.chardata; +- i = con_font_op(vc, op); +- if (i) +- return i; +- cfdarg.charheight = op->height; +- cfdarg.charcount = op->charcount; +- if (copy_to_user(user_cfd, &cfdarg, sizeof(struct consolefontdesc))) +- return -EFAULT; +- return 0; +- } +- return -EINVAL; +-} +- +-static int vt_io_fontreset(struct vc_data *vc, struct console_font_op *op) +-{ +- int ret; +- +- if (__is_defined(BROKEN_GRAPHICS_PROGRAMS)) { +- /* +- * With BROKEN_GRAPHICS_PROGRAMS defined, the default font is +- * not saved. +- */ +- return -ENOSYS; +- } +- +- op->op = KD_FONT_OP_SET_DEFAULT; +- op->data = NULL; +- ret = con_font_op(vc, op); +- if (ret) +- return ret; +- +- console_lock(); +- con_set_default_unimap(vc); +- console_unlock(); +- +- return 0; +-} +- + static inline int do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud, + bool perm, struct vc_data *vc) + { +@@ -574,29 +510,7 @@ static inline int do_unimap_ioctl(int cm + static int vt_io_ioctl(struct vc_data *vc, unsigned int cmd, void __user *up, + bool perm) + { +- struct console_font_op op; /* used in multiple places here */ +- + switch (cmd) { +- case PIO_FONT: +- if (!perm) +- return -EPERM; +- op.op = KD_FONT_OP_SET; +- op.flags = KD_FONT_FLAG_OLD | KD_FONT_FLAG_DONT_RECALC; /* Compatibility */ +- op.width = 8; +- op.height = 0; +- op.charcount = 256; +- op.data = up; +- return con_font_op(vc, &op); +- +- case GIO_FONT: +- op.op = KD_FONT_OP_GET; +- op.flags = KD_FONT_FLAG_OLD; +- op.width = 8; +- op.height = 32; +- op.charcount = 256; +- op.data = up; +- return con_font_op(vc, &op); +- + case PIO_CMAP: + if (!perm) + return -EPERM; +@@ -605,20 +519,6 @@ static int vt_io_ioctl(struct vc_data *v + case GIO_CMAP: + return con_get_cmap(up); + +- case PIO_FONTX: +- if (!perm) +- return -EPERM; +- +- fallthrough; +- case GIO_FONTX: +- return do_fontx_ioctl(vc, cmd, up, &op); +- +- case PIO_FONTRESET: +- if (!perm) +- return -EPERM; +- +- return vt_io_fontreset(vc, &op); +- + case PIO_SCRNMAP: + if (!perm) + return -EPERM; +@@ -1099,54 +999,6 @@ void vc_SAK(struct work_struct *work) + + #ifdef CONFIG_COMPAT + +-struct compat_consolefontdesc { +- unsigned short charcount; /* characters in font (256 or 512) */ +- unsigned short charheight; /* scan lines per character (1-32) */ +- compat_caddr_t chardata; /* font data in expanded form */ +-}; +- +-static inline int +-compat_fontx_ioctl(struct vc_data *vc, int cmd, +- struct compat_consolefontdesc __user *user_cfd, +- int perm, struct console_font_op *op) +-{ +- struct compat_consolefontdesc cfdarg; +- int i; +- +- if (copy_from_user(&cfdarg, user_cfd, sizeof(struct compat_consolefontdesc))) +- return -EFAULT; +- +- switch (cmd) { +- case PIO_FONTX: +- if (!perm) +- return -EPERM; +- op->op = KD_FONT_OP_SET; +- op->flags = KD_FONT_FLAG_OLD; +- op->width = 8; +- op->height = cfdarg.charheight; +- op->charcount = cfdarg.charcount; +- op->data = compat_ptr(cfdarg.chardata); +- return con_font_op(vc, op); +- +- case GIO_FONTX: +- op->op = KD_FONT_OP_GET; +- op->flags = KD_FONT_FLAG_OLD; +- op->width = 8; +- op->height = cfdarg.charheight; +- op->charcount = cfdarg.charcount; +- op->data = compat_ptr(cfdarg.chardata); +- i = con_font_op(vc, op); +- if (i) +- return i; +- cfdarg.charheight = op->height; +- cfdarg.charcount = op->charcount; +- if (copy_to_user(user_cfd, &cfdarg, sizeof(struct compat_consolefontdesc))) +- return -EFAULT; +- return 0; +- } +- return -EINVAL; +-} +- + struct compat_console_font_op { + compat_uint_t op; /* operation code KD_FONT_OP_* */ + compat_uint_t flags; /* KD_FONT_FLAG_* */ +@@ -1223,9 +1075,6 @@ long vt_compat_ioctl(struct tty_struct * + /* + * these need special handlers for incompatible data structures + */ +- case PIO_FONTX: +- case GIO_FONTX: +- return compat_fontx_ioctl(vc, cmd, up, perm, &op); + + case KDFONTOP: + return compat_kdfontop_ioctl(up, perm, &op, vc); +--- a/include/linux/kd.h ++++ /dev/null +@@ -1,8 +0,0 @@ +-/* SPDX-License-Identifier: GPL-2.0 */ +-#ifndef _LINUX_KD_H +-#define _LINUX_KD_H +- +-#include +- +-#define KD_FONT_FLAG_OLD 0x80000000 /* Invoked via old interface [compat] */ +-#endif /* _LINUX_KD_H */