The hunt for a kernel bug, part 1
The operating system on my computer is Ubuntu Linux, version 21.10 (Impish Indri). Recently I had an issue that, after a kernel update (and reboot), my USB keyboard and mouse didn’t work any more in the login screen. Huh, that’s unexpected.
The issue was:
- At the Grub boot menu, the keyboard works: I can use the keys, the numlock led lights up, the LCD of the Logitech G19 displays a logo.
- At the Ubuntu login screen, the keyboard (and the mouse) went dark: no backlight of the keys, no numlock led, no logo on the display. And the mouse cursor didn’t move on screen.
Must be a problem at my end, I initially thought, because surely, something so essential as input devices wouldn’t break by a simple kernel update? So I did some basic troubleshooting:
- Have you tried to turn it off and on again?
- Plug the keyboard in another USB port.
- Try a different keyboard.
- Start with the older kernel, which was still in the Grub menu. And indeed, this gave me back control over my input devices!
So if the only thing I changed was the kernel, then maybe it’s a kernel bug after all?
I know that Ubuntu 21.10 uses kernel 5.something
, and I know that I use the generic
kernels. So which kernels are we talking about, actually?
$ apt-cache show linux-image-5*-generic | grep Package: | sed 's/Package: //g'
linux-image-5.13.0-19-generic
linux-image-5.13.0-20-generic
linux-image-5.13.0-21-generic
linux-image-5.13.0-22-generic
linux-image-5.13.0-23-generic
linux-image-5.13.0-25-generic
linux-image-5.13.0-27-generic
linux-image-5.13.0-28-generic
linux-image-5.13.0-30-generic
9 kernels, that’s not too bad. All of them 5.13.0-XX-generic
. So I just installed all the kernels:
$ sudo apt install --yes \
linux-{image,headers,modules,modules-extra,tools}-5.13.0-*-generic
My /boot
directory is quite busy now:
$ ls -hl /boot
total 1,2G
drwxr-xr-x 4 root root 12K mrt 1 18:11 .
drwxr-xr-x 20 root root 4,0K mrt 1 18:11 ..
-rw-r--r-- 1 root root 252K okt 7 11:09 config-5.13.0-19-generic
-rw-r--r-- 1 root root 252K okt 15 15:53 config-5.13.0-20-generic
-rw-r--r-- 1 root root 252K okt 19 10:41 config-5.13.0-21-generic
-rw-r--r-- 1 root root 252K nov 5 10:21 config-5.13.0-22-generic
-rw-r--r-- 1 root root 252K nov 26 12:14 config-5.13.0-23-generic
-rw-r--r-- 1 root root 252K jan 7 16:16 config-5.13.0-25-generic
-rw-r--r-- 1 root root 252K jan 12 15:43 config-5.13.0-27-generic
-rw-r--r-- 1 root root 252K jan 13 18:13 config-5.13.0-28-generic
-rw-r--r-- 1 root root 252K feb 4 17:40 config-5.13.0-30-generic
drwx------ 4 root root 4,0K jan 1 1970 efi
drwxr-xr-x 5 root root 4,0K mrt 1 18:11 grub
lrwxrwxrwx 1 root root 28 feb 28 04:26 initrd.img -> initrd.img-5.13.0-22-generic
-rw-r--r-- 1 root root 40M mrt 1 16:02 initrd.img-5.13.0-19-generic
-rw-r--r-- 1 root root 40M mrt 1 17:39 initrd.img-5.13.0-20-generic
-rw-r--r-- 1 root root 40M mrt 1 17:38 initrd.img-5.13.0-21-generic
-rw-r--r-- 1 root root 40M feb 26 13:55 initrd.img-5.13.0-22-generic
-rw-r--r-- 1 root root 40M mrt 1 17:40 initrd.img-5.13.0-23-generic
-rw-r--r-- 1 root root 40M mrt 1 17:40 initrd.img-5.13.0-25-generic
-rw-r--r-- 1 root root 40M mrt 1 17:41 initrd.img-5.13.0-27-generic
-rw-r--r-- 1 root root 40M mrt 1 17:41 initrd.img-5.13.0-28-generic
-rw-r--r-- 1 root root 40M mrt 1 17:38 initrd.img-5.13.0-30-generic
-rw------- 1 root root 5,7M okt 7 11:09 System.map-5.13.0-19-generic
-rw------- 1 root root 5,7M okt 15 15:53 System.map-5.13.0-20-generic
-rw------- 1 root root 5,7M okt 19 10:41 System.map-5.13.0-21-generic
-rw------- 1 root root 5,7M nov 5 10:21 System.map-5.13.0-22-generic
-rw------- 1 root root 5,7M nov 26 12:14 System.map-5.13.0-23-generic
-rw------- 1 root root 5,7M jan 7 16:16 System.map-5.13.0-25-generic
-rw------- 1 root root 5,7M jan 12 15:43 System.map-5.13.0-27-generic
-rw------- 1 root root 5,7M jan 13 18:13 System.map-5.13.0-28-generic
-rw------- 1 root root 5,7M feb 4 17:40 System.map-5.13.0-30-generic
lrwxrwxrwx 1 root root 25 feb 28 04:27 vmlinuz -> vmlinuz-5.13.0-22-generic
-rw------- 1 root root 9,8M okt 7 19:37 vmlinuz-5.13.0-19-generic
-rw------- 1 root root 9,8M okt 15 15:56 vmlinuz-5.13.0-20-generic
-rw------- 1 root root 9,8M okt 19 10:43 vmlinuz-5.13.0-21-generic
-rw------- 1 root root 9,8M nov 5 13:51 vmlinuz-5.13.0-22-generic
-rw------- 1 root root 9,8M nov 26 11:52 vmlinuz-5.13.0-23-generic
-rw------- 1 root root 9,8M jan 7 16:19 vmlinuz-5.13.0-25-generic
-rw------- 1 root root 9,8M jan 12 16:19 vmlinuz-5.13.0-27-generic
-rw------- 1 root root 9,8M jan 13 18:10 vmlinuz-5.13.0-28-generic
-rw------- 1 root root 9,8M feb 4 17:46 vmlinuz-5.13.0-30-generic
I tried all these kernels. The last kernel where my input devices still worked, was 5.13.0-22-generic
, and the first where they stopped working, was 5.13.0-23-generic
. Which leads me to assume that some unintended change was introduced between those two versions, and it hasn’t been fixed since.
For now, I’m telling Ubuntu to keep kernel 5.13.0-22-generic
and not upgrade to a more recent version.
$ sudo apt-mark hold linux-image-5.13.0-22-generic
linux-image-5.13.0-22-generic set on hold.
I also want Grub to show me the known working kernel as the default change. To do that, I’ve put this in /etc/default/grub
:
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 5.13.0-22-generic"
followed by sudo update-grub
.
I’ll do the following things next, to get to the bottom of this:
- Install mainline kernels from kernel.org, to see if the issue comes from upstream, or if it’s an Ubuntu specific issue.
- Compile kernels from source, to hopefully find the exact change that caused the USB input devices to stop working.
git bisect
helps a lot in narrowing down the broken commit.