Re: the patch "vt: perform safe console erase" introduces a bug

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Sat, 30 Mar 2019, Mikulas Patocka wrote:

> Hi
> 
> The patch a6dbe442755999960ca54a9b8ecfd9606be0ea75 ("vt: perform safe 
> console erase in the right order") introduces a bug.
> 
> ---
>  drivers/tty/vt/vt.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> Index: linux-5.0.5/drivers/tty/vt/vt.c
> ===================================================================
> --- linux-5.0.5.orig/drivers/tty/vt/vt.c	2019-03-30 19:29:26.000000000 +0100
> +++ linux-5.0.5/drivers/tty/vt/vt.c	2019-03-30 19:30:50.000000000 +0100
> @@ -1518,7 +1518,7 @@ static void csi_J(struct vc_data *vc, in
>  			return;
>  	}
>  	scr_memsetw(start, vc->vc_video_erase_char, 2 * count);
> -	update_region(vc, (unsigned long) start, count);
> +	do_update_region(vc, (unsigned long) start, count);
^^^^ this is wrong too - it will clear the screen if \e[2J is printed on 
inactive console. We need to use con_should_update(vc), just like it was 
before:


The patch a6dbe442755999960ca54a9b8ecfd9606be0ea75 ("vt: perform safe
console erase in the right order") introduces a bug.

In order to reproduce the bug
- use framebuffer console with the AMDGPU driver
- type "links" to start the console www browser
- press 'q' and space to exit links

--- now, the cursor line will be permanently visible in the center of the
screen. It will stay there until something overwrites it.

Before the patch, there was a call to do_update_region, the patch changes
it to update_region - and this seems to cause the bug with the cursor.

The bug goes away if we change update_region back to do_update_region.

Signed-off-by: Mikulas Patocka <mpatocka@xxxxxxxxxx>
Cc: stable@xxxxxxxxxxxxxxx
Fixes: a6dbe4427559 ("vt: perform safe console erase in the right order")

---
 drivers/tty/vt/vt.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Index: linux-5.0.5/drivers/tty/vt/vt.c
===================================================================
--- linux-5.0.5.orig/drivers/tty/vt/vt.c	2019-03-30 19:29:26.000000000 +0100
+++ linux-5.0.5/drivers/tty/vt/vt.c	2019-03-31 13:06:24.000000000 +0200
@@ -1518,7 +1518,8 @@ static void csi_J(struct vc_data *vc, in
 			return;
 	}
 	scr_memsetw(start, vc->vc_video_erase_char, 2 * count);
-	update_region(vc, (unsigned long) start, count);
+	if (con_should_update(vc))
+		do_update_region(vc, (unsigned long) start, count);
 	vc->vc_need_wrap = 0;
 }
 



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux