http://copilotco.com/mail-archives/uml.2008/msg01515.html

On Thu, Aug 6, 2015 at 7:54 PM, Sergei Antonov <sap...@gmail.com> wrote:
> Hello!
> I'm trying compile and run UML (version 4.1) on x86_64. It builds and
> runs fine as a normal program. But when run under gdb, it produces
> several segmentation faults.
>
> This is how I build and run it (based on
> http://user-mode-linux.sourceforge.net/hacking.html instructions and
> disk image from http://fs.devloop.org.uk/ ):
> cd linux &&
> make mrproper &&
> make mrproper ARCH=um &&
> git checkout v4.1 &&
> make defconfig ARCH=um &&
> make -j6 ARCH=um &&
> cd .. &&
> gdb --args linux/linux ubda=BusyBox-1.13.2-amd64-root_fs mem=256m
>
>
> And this is a complete gdb output:
>
> ===========================================================
> GNU gdb (GDB) 7.9.1
> Copyright (C) 2015 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-unknown-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 linux/linux...done.
> (gdb) r
> Starting program: /root/exfat/linux/linux
> ubda=BusyBox-1.13.2-amd64-root_fs mem=256m
> Core dump limits :
> soft - 0
> hard - NONE
> Core dump limits :
> soft - 0
> hard - NONE
> Core dump limits :
> soft - 0
> hard - NONE
> Core dump limits :
> soft - 0
> hard - NONE
> Checking environment variables for a tempdir...none found
> Checking if /dev/shm is on tmpfs...OK
> Checking PROT_EXEC mmap in /dev/shm...OK
> Core dump limits :
> soft - 0
> hard - NONE
> Checking environment variables for a tempdir...none found
> Checking if /dev/shm is on tmpfs...OK
> Checking PROT_EXEC mmap in /dev/shm...OK
> Initializing cgroup subsys cpuset
> Initializing cgroup subsys cpu
> Initializing cgroup subsys cpuacct
> Linux version 4.1.0 (root@linux64) (gcc version 4.9.2 (GCC) ) #1 Tue
> Aug 4 17:31:01 CEST 2015
> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 64640
> Kernel command line: ubda=BusyBox-1.13.2-amd64-root_fs mem=256m root=98:0
> PID hash table entries: 1024 (order: 1, 8192 bytes)
> Dentry cache hash table entries: 32768 (order: 6, 262144 bytes)
> Inode-cache hash table entries: 16384 (order: 5, 131072 bytes)
> Memory: 253796K/262144K available (2471K kernel code, 624K rwdata,
> 780K rodata, 109K init, 161K bss, 8348K reserved, 0K cma-reserved)
> NR_IRQS:15
> clocksource itimer: mask: 0xffffffffffffffff max_cycles: 0x1d854df40,
> max_idle_ns: 3526361616960 ns
> Calibrating delay loop... 2649.29 BogoMIPS (lpj=13246464)
> pid_max: default: 32768 minimum: 301
> Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
> Mountpoint-cache hash table entries: 512 (order: 0, 4096 bytes)
> Initializing cgroup subsys blkio
> Initializing cgroup subsys devices
> Initializing cgroup subsys freezer
> 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
> Switched to clocksource itimer
> NET: Registered protocol family 2
> TCP established hash table entries: 2048 (order: 2, 16384 bytes)
> TCP bind hash table entries: 2048 (order: 2, 16384 bytes)
> TCP: Hash tables configured (established 2048 bind 2048)
> UDP hash table entries: 256 (order: 1, 8192 bytes)
> UDP-Lite hash table entries: 256 (order: 1, 8192 bytes)
> NET: Registered protocol family 1
> console [stderr0] disabled
> mconsole (version 2) initialized on /root/.uml/1BxIWh/mconsole
> Checking host MADV_REMOVE support...OK
> futex hash table entries: 256 (order: 0, 6144 bytes)
> VFS: Disk quotas dquot_6.6.0
> VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
> 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
>
> Program received signal SIGSEGV, Segmentation fault.
> 0x00007ffff78b16c4 in memset () from /lib64/libc.so.6
> (gdb) bt
> #0  0x00007ffff78b16c4 in memset () from /lib64/libc.so.6
> #1  0x00000000601b14f3 in check_partition (hd=<optimized out>,
> bdev=<optimized out>) at block/partitions/check.c:165
> #2  0x00000000601b0abb in rescan_partitions (disk=0x70800000,
> bdev=0x0) at block/partition-generic.c:433
> #3  0x00000000600e7783 in __blkdev_get (bdev=0x6f802880,
> mode=<optimized out>, for_part=0) at fs/block_dev.c:1213
> #4  0x00000000600e7c3b in blkdev_get (bdev=0x0, mode=<optimized out>,
> holder=0x0) at fs/block_dev.c:1317
> #5  0x00000000601ae7e3 in register_disk (disk=<optimized out>) at
> block/genhd.c:556
> #6  add_disk (disk=0x6fd94000) at block/genhd.c:618
> #7  0x0000000060026270 in ubd_disk_register (major=<optimized out>,
> size=<optimized out>, unit=1614123056, disk_out=0x603f6340
> <ubd_gendisk>) at arch/um/drivers/ubd_kern.c:835
> #8  0x0000000060026b1a in ubd_add (n=0, error_out=0x6fc4de90) at
> arch/um/drivers/ubd_kern.c:872
> #9  0x0000000060003c23 in ubd_init () at arch/um/drivers/ubd_kern.c:1073
> #10 0x00000000600184c4 in do_one_initcall (fn=0x60003b5a <ubd_init>)
> at init/main.c:788
> #11 0x0000000060001e38 in do_initcall_level (level=<optimized out>) at
> init/main.c:853
> #12 do_initcalls () at init/main.c:861
> #13 do_basic_setup () at init/main.c:880
> #14 kernel_init_freeable () at init/main.c:1001
> #15 0x000000006027ce2f in kernel_init (unused=<optimized out>) at
> init/main.c:931
> #16 0x0000000060019a7f in new_thread_handler () at 
> arch/um/kernel/process.c:129
> #17 0x0000000000000000 in ?? ()
> (gdb) c
> Continuing.
>
> Program received signal SIGSEGV, Segmentation fault.
> n_tty_open (tty=0x6fcb5c00) at drivers/tty/n_tty.c:1929
> 1929 ldata->overrun_time = jiffies;
> (gdb) bt
> #0  n_tty_open (tty=0x6fcb5c00) at drivers/tty/n_tty.c:1929
> #1  0x00000000601d1f49 in tty_ldisc_open (tty=0x70804288,
> ld=<optimized out>) at drivers/tty/tty_ldisc.c:450
> #2  0x00000000601d289a in tty_ldisc_setup (tty=0x6fcb5c00, o_tty=0x0)
> at drivers/tty/tty_ldisc.c:735
> #3  0x00000000601cc503 in tty_init_dev (driver=0x6fdb3d00, idx=0) at
> drivers/tty/tty_io.c:1548
> #4  0x00000000601cc906 in tty_open (inode=0x6f8001e0, filp=0x6fd2d900)
> at drivers/tty/tty_io.c:2091
> #5  0x00000000600bce52 in chrdev_open (inode=0x6f8001e0,
> filp=0x6fd2d900) at fs/char_dev.c:388
> #6  0x00000000600b74c2 in do_dentry_open (f=0x6fd2d900,
> open=0x600bcd15 <chrdev_open>, cred=<optimized out>) at fs/open.c:734
> #7  0x00000000600b7690 in vfs_open (path=<optimized out>,
> filp=<optimized out>, cred=<optimized out>) at fs/open.c:871
> #8  0x00000000600c42ad in do_last (nd=0x6fc4de10, path=0x6fc4ddb0,
> file=0x6fd2d900, op=<optimized out>, opened=<optimized out>,
> name=<optimized out>) at fs/namei.c:3104
> #9  0x00000000600c62ca in path_openat (dfd=<optimized out>,
> pathname=<optimized out>, nd=0x6fc4de10, op=0x6fc4df0c,
> flags=<optimized out>) at fs/namei.c:3243
> #10 0x00000000600c7443 in do_filp_open (dfd=-100, pathname=0x6fe37000,
> op=0x6fc4df0c) at fs/namei.c:3290
> #11 0x00000000600b860e in do_sys_open (dfd=-100, filename=<optimized
> out>, flags=<optimized out>, mode=<optimized out>) at fs/open.c:1014
> #12 0x00000000600b86e0 in SYSC_open (mode=<optimized out>,
> flags=<optimized out>, filename=<optimized out>) at fs/open.c:1032
> #13 SyS_open (filename=<optimized out>, flags=<optimized out>,
> mode=<optimized out>) at fs/open.c:1027
> #14 0x0000000060001e6b in kernel_init_freeable () at init/main.c:1004
> #15 0x000000006027ce2f in kernel_init (unused=<optimized out>) at
> init/main.c:931
> #16 0x0000000060019a7f in new_thread_handler () at 
> arch/um/kernel/process.c:129
> #17 0x0000000000000000 in ?? ()
> (gdb) c
> Continuing.
> EXT4-fs (ubda): mounting ext3 file system using the ext4 subsystem
> EXT4-fs (ubda): mounted filesystem with ordered data mode. Opts: (null)
> VFS: Mounted root (ext3 filesystem) readonly on device 98:0.
> devtmpfs: mounted
>
> Program received signal SIGSEGV, Segmentation fault.
> n_tty_open (tty=0x6fd16800) at drivers/tty/n_tty.c:1929
> 1929 ldata->overrun_time = jiffies;
> (gdb)
> Continuing.
> Virtual console 5 assigned device '/dev/pts/1'
>
> Program received signal SIGSEGV, Segmentation fault.
> n_tty_open (tty=0x6fd16000) at drivers/tty/n_tty.c:1929
> 1929 ldata->overrun_time = jiffies;
> (gdb)
> Continuing.
> Serial line 0 assigned device '/dev/pts/2'
>
> Please press Enter to activate this console.
> ===========================================================
>
>
> The first fault happens in check_partition(), then several more happen
> in some tty code. I investigated the first fault a little and found
> this.
>
> 1. The memset is called by this line:
>   memset(state->parts, 0, state->limit * sizeof(state->parts[0]));
>
> 2. I printk-ed its parameters:
>   printk("  %s %p %lu\n", __func__, state->parts, state->limit *
> sizeof(state->parts[0]));
> they look normal:
>   check_partition 0000000070800000 2048
>
> 3. Even a 1-byte memset produces segfault too:
>   memset(state->parts, 0, 1);
>
> 4. The memory is allocated by vzalloc() in allocate_partitions().
>
> 5. Writing 1 byte with vwrite() does not fault and returns 0.
>   vwrite(state->parts, &some_variable, 1);
>
>
> I tried changing a kernel version (4.0) and a version of gdb (7.7.1) -
> it was all the same.
>
> How do I fix this problem and debug UML without getting scary and
> disturbing faults?
>
> ------------------------------------------------------------------------------
> _______________________________________________
> User-mode-linux-user mailing list
> User-mode-linux-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user

------------------------------------------------------------------------------
_______________________________________________
User-mode-linux-user mailing list
User-mode-linux-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-user

Reply via email to