** Description changed:
+ == SRU Justification ==
+ Custom compilation of the Trusty 3.13 kernel codebase results in a
(reproducible) QEMU boot crash (see below).
+
+ == Fix ==
+ Replace UBUNTU SAUCE patch with proper upstream commit:
+ 548acf19234d ("x86/mm: Expand the exception table logic to allow new handling
options")
+
+ == Regression Potential ==
+ Medium. The patch is quite large but the backport was a simple context
adjustment. Ran the x86 selftests and perf NMI tests for several hours to
verify stability.
+
+ == Test Case ==
+ Compile the Trusty 3.13 kernel code using the default config (make defconfig)
and run the resulting kernel in QMEU. Crashes every time.
+
+
+ Original bug description:
+
While doing kernel testing using the Trusty 3.13 code base, I get the
following boot crash with QEMU:
[ 0.338393] BUG: unable to handle kernel paging request at ffffffff014142f0
[ 0.338987] IP: [<ffffffff014142f0>] 0xffffffff014142f0
- [ 0.339388] PGD 180f067 PUD 0
- [ 0.339388] Oops: 0010 [#1] SMP
+ [ 0.339388] PGD 180f067 PUD 0
+ [ 0.339388] Oops: 0010 [#1] SMP
[ 0.339388] Modules linked in:
[ 0.339388] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.13.11-ckt39-trusty
#6
[ 0.339388] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
1.10.2-1ubuntu1 04/01/2014
[ 0.339388] task: ffff88003f708000 ti: ffff88003f6fa000 task.ti:
ffff88003f6fa000
[ 0.339388] RIP: 0010:[<ffffffff014142f0>] [<ffffffff014142f0>]
0xffffffff014142f0
[ 0.339388] RSP: 0000:ffff88003f6fbe98 EFLAGS: 00050246
[ 0.339388] RAX: 0000000000000000 RBX: 0000000000000000 RCX:
0000000000000000
[ 0.339388] RDX: 0000000000000000 RSI: ffff88003deb9eb4 RDI:
ffffffff818b8590
[ 0.339388] RBP: ffff88003f6fbe98 R08: 0000000000000000 R09:
ffff88003fa14ae0
[ 0.339388] R10: ffffffff81264c68 R11: ffffea0000fdd000 R12:
ffffffff818b8590
[ 0.339388] R13: 00000000000000ad R14: 0000000000000000 R15:
0000000000000000
[ 0.339388] FS: 0000000000000000(0000) GS:ffff88003fa00000(0000)
knlGS:0000000000000000
[ 0.339388] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[ 0.339388] CR2: ffffffff014142f0 CR3: 000000000180c000 CR4:
0000000000360770
[ 0.339388] DR0: 0000000000000000 DR1: 0000000000000000 DR2:
0000000000000000
[ 0.339388] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7:
0000000000000400
[ 0.339388] Stack:
[ 0.339388] ffff88003f6fbf08 ffffffff81000402 ffff88003f6fbf00
ffffffff81065f88
[ 0.339388] ffff88003f6fbef0 ffff88003ffd96a1 ffffffff817e9d28
000000ad00060006
[ 0.339388] ffffffff817b013d ffffffff8196cef0 ffffffff8196d018
0000000000000006
[ 0.339388] Call Trace:
[ 0.339388] [<ffffffff81000402>] do_one_initcall+0xf2/0x140
[ 0.339388] [<ffffffff81065f88>] ? parse_args+0x1e8/0x320
[ 0.339388] [<ffffffff8189df8f>] kernel_init_freeable+0x14c/0x1d1
[ 0.339388] [<ffffffff8189d842>] ? do_early_param+0x88/0x88
[ 0.339388] [<ffffffff813fac20>] ? rest_init+0x80/0x80
[ 0.339388] [<ffffffff813fac29>] kernel_init+0x9/0x120
[ 0.339388] [<ffffffff8140fcae>] ret_from_fork+0x6e/0xa0
[ 0.339388] [<ffffffff813fac20>] ? rest_init+0x80/0x80
[ 0.339388] Code: Bad RIP value.
[ 0.339388] RIP [<ffffffff014142f0>] 0xffffffff014142f0
[ 0.339388] RSP <ffff88003f6fbe98>
[ 0.339388] CR2: ffffffff014142f0
[ 0.339388] ---[ end trace a71242bdac7e8632 ]---
[ 0.339388] note: swapper/0[1] exited with preempt_count 1
[ 0.357079] swapper/0 (1) used greatest stack depth: 5424 bytes left
[ 0.357539] Kernel panic - not syncing: Attempted to kill init!
exitcode=0x00000009
- [ 0.357539]
+ [ 0.357539]
[ 0.358073] Kernel Offset: 0x0 from 0xffffffff81000000 (relocation range:
0xffffffff80000000-0xffffffff9fffffff)
Git bisect identified the following commit as the culprit:
commit 56764fdc3a847371531b8044155c70412fc5be76
Author: Andy Whitcroft <[email protected]>
Date: Thu Feb 22 11:24:00 2018 +0100
- UBUNTU: SAUCE: x86, extable: fix uaccess fixup detection
-
- BugLink: http://bugs.launchpad.net/bugs/1750786
-
- The existing code intends to identify a subset of fixups which need
- special handling, uaccess related faults need to record the failure.
- This is done by adjusting the fixup code pointer by a (random) constant
- 0x7ffffff0. This is detected in fixup_exception by comparing the two
- pointers. The intent of this code is to detect the the delta between
- the original code and its fixup code being greater than the constant.
- However, the code as written triggers undefined comparison behaviour.
- In this kernel this prevents the condition triggering, leading to panics
- when jumping to the corrupted fixup address.
-
- Convert the code to better implement the intent. Convert both of the
- offsets to final addresses and compare the delta between those. Also add
- a massive comment to explain all of this including the implicit
assumptions
- on order of the segments that this comparison implies.
-
- Fixes: 706276543b69 ("x86, extable: Switch to relative exception table
entries")
- Signed-off-by: Andy Whitcroft <[email protected]>
- Acked-by: Colin Ian King <[email protected]>
- Acked-by: Khalid Elmously <[email protected]>
- Signed-off-by: Kleber Sacilotto de Souza <[email protected]>
+ UBUNTU: SAUCE: x86, extable: fix uaccess fixup detection
+
+ BugLink: http://bugs.launchpad.net/bugs/1750786
+
+ The existing code intends to identify a subset of fixups which need
+ special handling, uaccess related faults need to record the failure.
+ This is done by adjusting the fixup code pointer by a (random) constant
+ 0x7ffffff0. This is detected in fixup_exception by comparing the two
+ pointers. The intent of this code is to detect the the delta between
+ the original code and its fixup code being greater than the constant.
+ However, the code as written triggers undefined comparison behaviour.
+ In this kernel this prevents the condition triggering, leading to panics
+ when jumping to the corrupted fixup address.
+
+ Convert the code to better implement the intent. Convert both of the
+ offsets to final addresses and compare the delta between those. Also add
+ a massive comment to explain all of this including the implicit
assumptions
+ on order of the segments that this comparison implies.
+
+ Fixes: 706276543b69 ("x86, extable: Switch to relative exception table
entries")
+ Signed-off-by: Andy Whitcroft <[email protected]>
+ Acked-by: Colin Ian King <[email protected]>
+ Acked-by: Khalid Elmously <[email protected]>
+ Signed-off-by: Kleber Sacilotto de Souza <[email protected]>
--
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1757193
Title:
Boot crash with Trusty 3.13
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/1757193/+subscriptions
--
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs