Skip to content

The WSL1 kernel dso reports the kernel version as 3.13.11 instead of 4.4 #6557

@Marc-Aldorasi-Imprivata

Description

Environment

Windows build number: [run `cmd.exe /c ver`]
Microsoft Windows [Version 10.0.19041.804]
Your Distribution version: [On Debian or Ubuntu run `lsb_release -r` in WSL]
Release:        18.04
Whether the issue is on WSL 2 and/or WSL 1: [run `cat /proc/version` in WSL]
Linux version 4.4.0-19041-Microsoft (Microsoft@Microsoft.com) (gcc version 5.4.0 (GCC) ) #488-Microsoft Mon Sep 01 13:43:00 PST 2020

Steps to reproduce

$ gdb /bin/true
GNU gdb (Ubuntu 8.1-0ubuntu3) 8.1.0.20180409-git
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /bin/true...(no debugging symbols found)...done.
(gdb) break _dl_discover_osversion
Function "_dl_discover_osversion" not defined.
Make breakpoint pending on future shared library load? (y or [n]) y
Breakpoint 1 (_dl_discover_osversion) pending.
(gdb) r
Starting program: /bin/true

Breakpoint 1, _dl_discover_osversion () at ../sysdeps/unix/sysv/linux/dl-sysdep.c:45
45      ../sysdeps/unix/sysv/linux/dl-sysdep.c: No such file or directory.
(gdb) finish
Run till exit from #0  _dl_discover_osversion () at ../sysdeps/unix/sysv/linux/dl-sysdep.c:45
0x00007fffff403782 in dl_main (phdr=<optimized out>, phnum=<optimized out>, user_entry=<optimized out>,
    auxv=<optimized out>) at rtld.c:1318
1318    rtld.c: No such file or directory.
Value returned is $1 = 199947
(gdb) p/x 199947
$2 = 0x30d0b

The _dl_discover_osversion function (from glibc) is used to get the kernel version from the kernel dso. If glibc is built with a minimum kernel version (like it is on Arch), it will compare the kernel version to that minimum and exit the program if the kernel is too old.

This causes issues if Arch is installed in a chroot, since then none of the binaries in the chroot will run.

Expected behavior

glibc thinks the kernel version is 4.4.0

Actual behavior

glibc thinks the kernel version is 3.13.11

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions