[sparc64] kernel OOPS with gcc 7.1 / 7.2

Anatoly Pugachev matorola at gmail.com
Tue Aug 15 18:50:45 UTC 2017


Hello.

Together with Dmitry (ldv) , we've discovered that running test suite
from strace produces kernel OOPS, when kernel is compiled with gcc 7.1
or with gcc 7.2 , but not with gcc 6 :

$ git clone https://github.com/strace/strace.git
ttip:~/strace$ ./bootstrap
ttip:~/strace$ ./configure && make -j
ttip:~/strace$ cd tests-m32 && make mq
ttip:~/strace/tests-m32$ ./mq
Killed

kernel log:

[   61.839563] Unable to handle kernel NULL pointer dereference
[   61.839649] tsk->{mm,active_mm}->context = 000000000000040e
[   61.839686] tsk->{mm,active_mm}->pgd = fff8004099e06000
[   61.839721]               \|/ ____ \|/
[   61.839721]               "@'/ .. \`@"
[   61.839721]               /_| \__/ |_\
[   61.839721]                  \__U_/
[   61.839879] mq(937): Oops [#1]
[   61.839909] CPU: 10 PID: 937 Comm: mq Not tainted
4.13.0-rc5-00009-gfcd07350007b #412
[   61.839958] task: fff80040968ed940 task.stack: fff800409c26c000
[   61.839997] TSTATE: 0000004411001600 TPC: 000000000069fb2c TNPC:
000000000069fb30 Y: 000002f7    Not tainted
[   61.840062] TPC: <current_umask+0xc/0x20>
[   61.840091] g0: fff8004096588400 g1: 00000000000143c0 g2:
000000000000000a g3: 0000000000000000
[   61.840143] g4: 0000000000000000 g5: 0000000000000000 g6:
fff800409c26c000 g7: 000000000000000a
[   61.840196] o0: 0000000000000000 o1: 0000000000014000 o2:
0000000000000000 o3: 000000000000000a
[   61.840247] o4: 0000000000000001 o5: 0000000000000000 sp:
fff800409c26f3e1 ret_pc: 00000000007072d0
[   61.840308] RPC: <mq_attr_ok.isra.1+0x90/0x100>
[   61.840341] l0: 00000000000000da l1: 00000000f7c87bf0 l2:
00000000f7c34000 l3: 0000000000000000
[   61.840395] l4: 00000000f7c86100 l5: 0000000000000000 l6:
000000017c96f087 l7: 00000000f7c86000
[   61.840450] i0: 0000000000000000 i1: 0000000000c4e924 i2:
fff800409c26fd58 i3: fff800409c26fd60
[   61.840504] i4: 0000000000014000 i5: 0000000000000014 i6:
fff800409c26f491 i7: 00000000007074fc
[   61.840560] I7: <do_mq_open+0x1bc/0x320>
[   61.840590] Call Trace:
[   61.840614]  [00000000007074fc] do_mq_open+0x1bc/0x320
[   61.840652]  [000000000070839c] compat_SyS_mq_open+0x5c/0xa0
[   61.840694]  [00000000004061d4] linux_sparc_syscall32+0x34/0x60
[   61.840734] Disabling lock debugging due to kernel taint
[   61.840756] Caller[00000000007074fc]: do_mq_open+0x1bc/0x320
[   61.840778] Caller[000000000070839c]: compat_SyS_mq_open+0x5c/0xa0
[   61.840800] Caller[00000000004061d4]: linux_sparc_syscall32+0x34/0x60
[   61.840824] Caller[00000000f7c3c7fc]: 0xf7c3c7fc
[   61.840842] Instruction DUMP:
[   61.840846]  9de3bf50
[   61.840860]  01000000
[   61.840872]  01000000
[   61.840885] <c2592720>
[   61.840897]  81cfe008
[   61.840910]  d0406068
[   61.840922]  01000000
[   61.840935]  01000000
[   61.840947]  9de3bf30
[   61.840960]

And if kernel is compiled with gcc 6 , test ends in other way:

ttip:~$ cd strace/tests-m32/ && ./mq
mq_open("strace-mq-910.sample", O_RDONLY|O_CREAT, 0700, NULL) = 0
mq_getsetattr(0, NULL, {mq_flags=0, mq_maxmsg=10, mq_msgsize=8192,
mq_curmsgs=0}) = 0
mq_getsetattr(0, {mq_flags=0, mq_maxmsg=10, mq_msgsize=8192,
mq_curmsgs=0}, NULL) = 0
mq_unlink("strace-mq-910.sample") = 0
+++ exited with 0 +++

and nothing is printed in kernel logs.

versions of used gcc and kernels:

gcc 6 compiled kernel is git 4.13.0-rc5
gcc 7.2 compiled kernel is git 4.13.0-rc5-00009-gfcd07350007b

$ gcc-6 -v
Using built-in specs.
COLLECT_GCC=gcc-6
COLLECT_LTO_WRAPPER=/usr/lib/gcc/sparc64-linux-gnu/6/lto-wrapper
Target: sparc64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian
6.4.0-3' --with-bugurl=file:///usr/share/doc/gcc-6/README.Bugs
--enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++
--prefix=/usr --program-suffix=-6 --program-prefix=sparc64-linux-gnu-
--enable-shared --enable-linker-build-id --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --libdir=/usr/lib
--enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-libquadmath --enable-plugin --enable-default-pie
--with-system-zlib --disable-browser-plugin --enable-java-awt=gtk
--enable-gtk-cairo
--with-java-home=/usr/lib/jvm/java-1.5.0-gcj-6-sparc64/jre
--enable-java-home
--with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-6-sparc64
--with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-6-sparc64
--with-arch-directory=sparc64
--with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc=auto
--enable-multiarch --enable-targets=all --with-cpu-32=ultrasparc
--with-long-double-128 --enable-multilib --enable-checking=release
--build=sparc64-linux-gnu --host=sparc64-linux-gnu
--target=sparc64-linux-gnu
Thread model: posix
gcc version 6.4.0 20170805 (Debian 6.4.0-3)

$ gcc-7 -v
Using built-in specs.
COLLECT_GCC=gcc-7
COLLECT_LTO_WRAPPER=/usr/lib/gcc/sparc64-linux-gnu/7/lto-wrapper
Target: sparc64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Debian
7.1.0-13' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs
--enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++ --prefix=/usr
--with-gcc-major-version-only --program-suffix=-7
--program-prefix=sparc64-linux-gnu- --enable-shared
--enable-linker-build-id --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --libdir=/usr/lib
--enable-nls --with-sysroot=/ --enable-clocale=gnu
--enable-libstdcxx-debug --enable-libstdcxx-time=yes
--with-default-libstdcxx-abi=new --enable-gnu-unique-object
--disable-libquadmath --enable-plugin --enable-default-pie
--with-system-zlib --enable-objc-gc=auto --enable-multiarch
--disable-werror --with-cpu-32=ultrasparc --enable-targets=all
--with-long-double-128 --enable-multilib --enable-checking=release
--build=sparc64-linux-gnu --host=sparc64-linux-gnu
--target=sparc64-linux-gnu
Thread model: posix
gcc version 7.1.0 (Debian 7.1.0-13)

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/opt/gcc72/libexec/gcc/sparc64-unknown-linux-gnu/7.2.0/lto-wrapper
Target: sparc64-unknown-linux-gnu
Configured with: ../gcc-7.2.0/configure --prefix=/opt/gcc72
Thread model: posix
gcc version 7.2.0 (GCC)

Machine is LDOM debian sid sparc64.




More information about the Strace-devel mailing list