|
From: Natale P. <nat...@gm...> - 2017-02-13 13:40:30
|
Hello,
I have a UML configuration that worked fine with the 4.10.0-rc8 version
in my previous laptop (i7-2740 cpu, blabla.. does it really matters?).
With "worked fine" I mean that I was able to boot in my custom Archlinux
image (on an Archlinux host perfectly updated).
I then copied the image and the config in a new laptop (new i7-7700),
run the make for the kernel, got the kernel binary.
When trying to start, I get the following message: (Sorry for the long message!)
$ ./linux mem=512M ubd0=/home/nat/Work/Linux_UML/fs/fs.ext4
Core dump limits :
soft - NONE
hard - NONE
Checking that ptrace can change system call numbers...OK
Checking syscall emulation patch for ptrace...OK
Checking advanced syscall emulation patch for ptrace...OK
Checking environment variables for a tempdir.../tmp/nat
Checking if /tmp/nat is on tmpfs...OK
Checking PROT_EXEC mmap in /tmp/nat...OK
Adding 11587584 bytes to physical memory to account for exec-shield gap
Linux version 4.10.0-rc8-uml-00205-g7089db84e356-dirty (nat@judith) (gcc version 6.3.1 20170109 (GCC) ) #16 Mon Feb 13 15:35:51 CET 2017
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 131808
Kernel command line: mem=512M ubd0=/home/nat/Work/Linux_UML/fs/fs.ext4 root=98:0
PID hash table entries: 4096 (order: 3, 32768 bytes)
Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
Memory: 509848K/535604K available (2647K kernel code, 697K rwdata, 772K rodata, 111K init, 171K bss, 25756K reserved, 0K cma-reserved)
NR_IRQS:15
clocksource: timer: mask: 0xffffffffffffffff max_cycles: 0x1cd42e205, max_idle_ns: 881590404426 ns
Calibrating delay loop... 6889.47 BogoMIPS (lpj=34447360)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
Checking that host ptys support output SIGIO...Yes
Checking that host ptys support SIGIO on close...No, enabling workaround
devtmpfs: initialized
Using 2.6 host AIO
clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
NET: Registered protocol family 16
clocksource: Switched to clocksource timer
VFS: Disk quotas dquot_6.6.0
VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
NET: Registered protocol family 2
TCP established hash table entries: 8192 (order: 4, 65536 bytes)
TCP bind hash table entries: 8192 (order: 4, 65536 bytes)
TCP: Hash tables configured (established 8192 bind 8192)
UDP hash table entries: 512 (order: 2, 16384 bytes)
UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
NET: Registered protocol family 1
console [stderr0] disabled
mconsole (version 2) initialized on /home/nat/.uml/FdImtj/mconsole
Checking host MADV_REMOVE support...OK
futex hash table entries: 256 (order: 0, 6144 bytes)
workingset: timestamp_bits=46 max_order=17 bucket_order=0
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
io scheduler noop registered
io scheduler deadline registered (default)
NET: Registered protocol family 17
Initialized stdio console driver
Console initialized on /dev/tty0
console [tty0] enabled
Initializing software serial port version 1
console [mc-1] enabled
EXT4-fs (ubda): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (ubda): couldn't mount as ext2 due to feature incompatibilities
EXT4-fs (ubda): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) readonly on device 98:0.
devtmpfs: mounted
This architecture does not have kernel memory protection.
Kernel panic - not syncing: Attempted to kill init! exitcode=0x0000000b
CPU: 0 PID: 1 Comm: init Not tainted 4.10.0-rc8-uml-00205-g7089db84e356-dirty #16
Stack:
80433ba0 60064332 80430b00 6031bae8
600905cc 601d4673 80433bb0 601c9a41
80433cd0 60090332 80433be0 6002d3b1
Call Trace:
[<600905cc>] ?
printk+0x0/0x94
[<6001af21>]
show_stack+0x108/0x15e
[<60064332>] ?
dump_stack_print_info+0xe4/0xed
[<600905cc>] ?
printk+0x0/0x94
[<601d4673>] ?
bust_spinlocks+0x0/0x3b
[<601c9a41>]
dump_stack+0x2a/0x2c
[<60090332>]
panic+0x170/0x311
[<6002d3b1>] ?
set_signals+0x28/0x40
[<600f2c29>] ?
mntput+0x2f/0x31
[<600d723f>] ?
__fput+0x1d3/0x1e2
[<602aa6ec>] ?
_cond_resched+0x0/0x42
[<600d7292>] ?
____fput+0x10/0x12
[<60089c12>] ?
cgroup_exit+0x8c/0xcb
[<600901c2>] ?
panic+0x0/0x311
[<60038a29>]
do_exit+0x3c3/0x89d
[<60038fd7>]
do_group_exit+0x8f/0x106
[<6002d1ac>] ?
block_signals+0x0/0x16
[<6002d1ac>] ?
block_signals+0x0/0x16
[<600423ae>]
get_signal+0x4af/0x4e3
[<6001ac75>]
do_signal+0x27/0x121
[<6002d3b1>] ?
set_signals+0x28/0x40
[<6002d389>] ?
set_signals+0x0/0x40
[<6004131d>] ?
force_sig+0x18/0x1a
[<60041932>] ?
force_sigsegv+0x5f/0x69
[<6001c2d8>]
fatal_sigsegv+0x46/0x52
[<60032a5f>] ?
put_fp_registers+0x10/0x12
[<6002fed5>]
userspace+0x12b/0x447
[<60019d6f>] ?
interrupt_end+0x0/0xa0
[<600dca10>] ?
do_execveat_common+0x519/0x649
[<600c9ce1>] ?
kmem_cache_alloc+0x0/0x103
[<600dcb61>] ?
do_execve+0x21/0x23
[<600183e4>] ?
run_init_process+0x3e/0x42
[<600183e8>] ?
try_to_run_init_process+0x0/0x44
[<600183fe>] ?
try_to_run_init_process+0x16/0x44
[<600183e8>] ?
try_to_run_init_process+0x0/0x44
[<60019b98>]
new_thread_handler+0xa1/0xa3
I have investigated it, and the problem is in arch/x86/um/os-Linux/registers.c :
49 int restore_fp_registers(int pid, unsigned long *fp_regs)
50 {
51 struct iovec iov;
52
53 if (have_xstate_support) {
54 iov.iov_base = fp_regs;
55 iov.iov_len = sizeof(struct _xstate);
56 if (ptrace(PTRACE_SETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
57 return -errno;
58 return 0;
59 } else {
60 return restore_i387_registers(pid, fp_regs);
61 }
62 }
At line 56, there is a ptrace call. This call exits with -14. The 14
number means EFAULT. Well, after some tries, I patched the function to
always enter the else branch, and then calling restore_i387_registers .
With my big surprise, using this function allows me to boot correctly
the system.
Why I can't successfully boot with the stock kernel, with
have_xstate_support ?
Thank you
N.
|