]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Sep 2021 08:34:45 +0000 (10:34 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 1 Sep 2021 08:34:45 +0000 (10:34 +0200)
added patches:
vt_kdsetmode-extend-console-locking.patch

queue-5.14/series [new file with mode: 0644]
queue-5.14/vt_kdsetmode-extend-console-locking.patch [new file with mode: 0644]

diff --git a/queue-5.14/series b/queue-5.14/series
new file mode 100644 (file)
index 0000000..ff12b84
--- /dev/null
@@ -0,0 +1 @@
+vt_kdsetmode-extend-console-locking.patch
diff --git a/queue-5.14/vt_kdsetmode-extend-console-locking.patch b/queue-5.14/vt_kdsetmode-extend-console-locking.patch
new file mode 100644 (file)
index 0000000..6933476
--- /dev/null
@@ -0,0 +1,64 @@
+From 2287a51ba822384834dafc1c798453375d1107c7 Mon Sep 17 00:00:00 2001
+From: Linus Torvalds <torvalds@linux-foundation.org>
+Date: Mon, 30 Aug 2021 08:55:18 -0700
+Subject: vt_kdsetmode: extend console locking
+
+From: Linus Torvalds <torvalds@linux-foundation.org>
+
+commit 2287a51ba822384834dafc1c798453375d1107c7 upstream.
+
+As per the long-suffering comment.
+
+Reported-by: Minh Yuan <yuanmingbuaa@gmail.com>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Cc: Jiri Slaby <jirislaby@kernel.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/tty/vt/vt_ioctl.c |   10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+--- a/drivers/tty/vt/vt_ioctl.c
++++ b/drivers/tty/vt/vt_ioctl.c
+@@ -246,6 +246,8 @@ int vt_waitactive(int n)
+  *
+  * XXX It should at least call into the driver, fbdev's definitely need to
+  * restore their engine state. --BenH
++ *
++ * Called with the console lock held.
+  */
+ static int vt_kdsetmode(struct vc_data *vc, unsigned long mode)
+ {
+@@ -262,7 +264,6 @@ static int vt_kdsetmode(struct vc_data *
+               return -EINVAL;
+       }
+-      /* FIXME: this needs the console lock extending */
+       if (vc->vc_mode == mode)
+               return 0;
+@@ -271,12 +272,10 @@ static int vt_kdsetmode(struct vc_data *
+               return 0;
+       /* explicitly blank/unblank the screen if switching modes */
+-      console_lock();
+       if (mode == KD_TEXT)
+               do_unblank_screen(1);
+       else
+               do_blank_screen(1);
+-      console_unlock();
+       return 0;
+ }
+@@ -378,7 +377,10 @@ static int vt_k_ioctl(struct tty_struct
+               if (!perm)
+                       return -EPERM;
+-              return vt_kdsetmode(vc, arg);
++              console_lock();
++              ret = vt_kdsetmode(vc, arg);
++              console_unlock();
++              return ret;
+       case KDGETMODE:
+               return put_user(vc->vc_mode, (int __user *)arg);