From: Greg Kroah-Hartman Date: Sat, 25 Jun 2022 13:41:25 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v5.10.126~41 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6486a6baa6e901508e32f22eecffba68f59eb2ed;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: vt-drop-old-font-ioctls.patch --- diff --git a/queue-4.19/series b/queue-4.19/series index e69de29bb2d..a2a5948449c 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -0,0 +1 @@ +vt-drop-old-font-ioctls.patch diff --git a/queue-4.19/vt-drop-old-font-ioctls.patch b/queue-4.19/vt-drop-old-font-ioctls.patch new file mode 100644 index 00000000000..e567c373170 --- /dev/null +++ b/queue-4.19/vt-drop-old-font-ioctls.patch @@ -0,0 +1,304 @@ +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 | 149 ---------------------------------------------- + include/linux/kd.h | 8 -- + 3 files changed, 3 insertions(+), 193 deletions(-) + delete mode 100644 include/linux/kd.h + +--- a/drivers/tty/vt/vt.c ++++ b/drivers/tty/vt/vt.c +@@ -4472,16 +4472,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; + +@@ -4509,7 +4501,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) +@@ -4519,31 +4511,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 +@@ -241,48 +241,6 @@ int vt_waitactive(int n) + #define GPLAST 0x3df + #define GPNUM (GPLAST - GPFIRST + 1) + +- +- +-static inline int +-do_fontx_ioctl(struct vc_data *vc, int cmd, struct consolefontdesc __user *user_cfd, int perm, 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: +- 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 = 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 inline int + do_unimap_ioctl(int cmd, struct unimapdesc __user *user_ud, int perm, struct vc_data *vc) + { +@@ -919,30 +877,6 @@ int vt_ioctl(struct tty_struct *tty, + break; + } + +- 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; +- ret = con_font_op(vc, &op); +- break; +- } +- +- 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; +- ret = con_font_op(vc, &op); +- break; +- } +- + case PIO_CMAP: + if (!perm) + ret = -EPERM; +@@ -954,36 +888,6 @@ int vt_ioctl(struct tty_struct *tty, + ret = con_get_cmap(up); + break; + +- case PIO_FONTX: +- case GIO_FONTX: +- ret = do_fontx_ioctl(vc, cmd, up, perm, &op); +- break; +- +- case PIO_FONTRESET: +- { +- if (!perm) +- return -EPERM; +- +-#ifdef BROKEN_GRAPHICS_PROGRAMS +- /* With BROKEN_GRAPHICS_PROGRAMS defined, the default +- font is not saved. */ +- ret = -ENOSYS; +- break; +-#else +- { +- op.op = KD_FONT_OP_SET_DEFAULT; +- op.data = NULL; +- ret = con_font_op(vc, &op); +- if (ret) +- break; +- console_lock(); +- con_set_default_unimap(vc); +- console_unlock(); +- break; +- } +-#endif +- } +- + case KDFONTOP: { + if (copy_from_user(&op, up, sizeof(op))) { + ret = -EFAULT; +@@ -1097,54 +1001,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_* */ +@@ -1222,11 +1078,6 @@ long vt_compat_ioctl(struct tty_struct * + /* + * these need special handlers for incompatible data structures + */ +- case PIO_FONTX: +- case GIO_FONTX: +- ret = compat_fontx_ioctl(vc, cmd, up, perm, &op); +- break; +- + case KDFONTOP: + ret = compat_kdfontop_ioctl(up, perm, &op, vc); + break; +--- 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 */