Bug 204039

Summary: Console scrollback function causes OOPS and console freeze
Product: Drivers Reporter: kr
Component: Console/FramebuffersAssignee: James Simmons (jsimmons)
Status: NEW ---    
Severity: high    
Priority: P1    
Hardware: x86-64   
OS: Linux   
Kernel Version: 4.19.19+ Subsystem:
Regression: No Bisected commit-id:
Attachments: Oops message appearing when pressing SHIFT-PgUp

Description kr 2019-07-01 01:40:51 UTC
Created attachment 283505 [details]
Oops message appearing when pressing SHIFT-PgUp

Accessing the VGA console scrollback buffer with SHIFT+PgUp results in a kernel OOPS since 4.19.19.

Steps to reproduce:

1. Boot a system with kernel 4.19.19 and a standard VGA console
2. Press SHIFT-PgUp twice

Expected result: The screen should scroll twice
Actual result: The screen scrolls once, followed by the console freezing

I was able to capture the Oops message on an SSH console (see attachment).

I've reproduced this on two different systems, both x86_64 but otherwise quite different, hardware-wise. The bug exists in all kernels from 4.19.19 onwards, all the way up to and including 5.1.15.

Reverting commit f4abbb16ed9add95be72e85b9b5db8529e736b74 ("vgacon: unconfuse vc_origin when using soft scrollback") fixes the issue. Here's the offending patch on the LKML: https://lkml.org/lkml/2019/1/29/418

Note: Not sure if it's relevant, but the kernel configuration in question is based on the Slackware "huge" kernel, and as such has compiled-in support for speakup (CONFIG_SPEAKUP=y and CONFIG_SPEAKUP_SYNTH_<various>=y). I have not (yet) tried reproducing this bug using non-speakup kernels.
Comment 1 kr 2019-07-01 16:48:47 UTC
Having done some further testing I can confirm that indeed, the bug does not surface when no speakup support is compiled in or loaded.

However, all it takes is "modprobe speakup" for the bug to be instantly reproducible with shift-PgUp.
Comment 2 kr 2019-09-29 15:54:06 UTC
The bug is still present in 5.3.1.

modprobe speakup

followed by on or two Shift-PgUp keypresses triggers an oops.