libc6 crash while running 'xm'
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
eglibc (Ubuntu) |
Fix Released
|
Undecided
|
Adam Conrad | ||
Precise |
Fix Released
|
High
|
Adam Conrad |
Bug Description
SRU Justification:
[Impact]
When using xen as a hypervisor on AMD Bulldozer/Opteron hardware, 'xm list' will cause an 'invalid opcode' trap and crash.
[Development Fix]
This is fixed in quantal.
[Stable Fix]
A fix can be backported from quantal into precise.
[Test Case]
Install xen on an AMD machine with AVX/FMA4 extensions. Run 'xm list'. It is expected to not cause an invalid opcode trap.
[Regression Potential]
This patch add checks proper FMA4 and AVX detection in eglibc.
--
Ubuntu Version: 12.04 (precise)
libc6: 2.15-0ubuntu5
xen-hypervisor-
linux-image-
Everytime I try to run 'xm list' on a new AMD Opteron 6274 system (Bulldozer architecture) I'm getting a crash.
I couldn't even file a bug report through "apport-bug".
Repeating the same procedure with Ubuntu Oneiric showed no problems at all.
dmesg showed following messages:
[ 479.891581] xm[1746] trap invalid opcode ip:7fd684f8a5fc sp:7fff3ebb3c70 error:0 in libm-2.
[ 479.937611] apport[1758] trap invalid opcode ip:7fd6cb9ea5fc sp:7fff9bbc06b0 error:0 in libm-2.
[ 479.937641] Process 1758(apport) has RLIMIT_CORE set to 1
[ 479.937645] Aborting core
description: | updated |
Changed in eglibc (Ubuntu Precise): | |
importance: | Undecided → Medium |
milestone: | none → precise-updates |
status: | New → Confirmed |
assignee: | nobody → Adam Conrad (adconrad) |
Changed in eglibc (Ubuntu Precise): | |
importance: | Medium → High |
description: | updated |
description: | updated |
tags: |
added: verification-done removed: verification-needed |
I am running into this issue as well on a 12.04 domU with a AMD Opteron 6272 based box.
[14553.237586] apport[18522] trap invalid opcode ip:7f1d632625fc sp:7ffff8701390 error:0 in libm-2. 15.so[7f1d63220 000+f9000]
Debugging info
(gdb) exec-file python-dbg 64-linux- gnu/libthread_ db.so.1" .
(gdb) run
Starting program: /usr/bin/python-dbg
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_
Python 2.7.3 (default, Apr 20 2012, 22:01:19)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print test
Program received signal SIGILL, Illegal instruction. ieee754/ dbl-64/ e_exp.c: 63 ieee754/ dbl-64/ e_exp.c: No such file or directory. ieee754/ dbl-64/ e_exp.c: 63 exp_fma4" is a function at address 0x7ffff6cc35f0. cc35f0 <__ieee754_ exp_fma4+ 0>: push %rbp cc35f1 <__ieee754_ exp_fma4+ 1>: mov %rsp,%rbp cc35f4 <__ieee754_ exp_fma4+ 4>: and $0xffffffffffff ffe0,%rsp cc35f8 <__ieee754_ exp_fma4+ 8>: add $0x10,%rsp exp_fma4+ 12>: vmovsd %xmm0,-0x20(%rsp) cc3602 <__ieee754_ exp_fma4+ 18>: mov -0x20(%rsp),%rax cc3607 <__ieee754_ exp_fma4+ 23>: mov %rax,%rcx cc360a <__ieee754_ exp_fma4+ 26>: shr $0x20,%rcx
__ieee754_exp_fma4 (x=-0.5) at ../sysdeps/
63 ../sysdeps/
(gdb) bt
#0 __ieee754_exp_fma4 (x=-0.5) at ../sysdeps/
#1 0x000000000058509f in ?? ()
#2 0x00000000009bde80 in ?? ()
#3 0x0000000100c52a10 in ?? ()
#4 0x0000000000417380 in ?? ()
#5 0x00000000009d2970 in ?? ()
#6 0x0000000000000000 in ?? ()
(gdb) info address __ieee754_exp_fma4
Symbol "__ieee754_
(gdb) disassemble 0x7ffff6cc35f0,+30
Dump of assembler code from 0x7ffff6cc35f0 to 0x7ffff6cc360e:
0x00007ffff6
0x00007ffff6
0x00007ffff6
0x00007ffff6
=> 0x00007ffff6cc35fc <__ieee754_
0x00007ffff6
0x00007ffff6
0x00007ffff6
vmovsd is an avx instruction, but avx isn't supported according to cpu flags.
# grep flags /proc/cpuinfo | head -1
flags : fpu de tsc msr pae cx8 cmov pat clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt lm rep_good nopl aperfmperf pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes hypervisor lahf_lm cmp_legacy extapic cr8_legacy abm sse4a misalignsse 3dnowprefetch xop fma4 perfctr_core arat cpb
perhaps eglibc is assuming if fma4 is supported, avx must be too.
thanks
jim