Bug 755

Summary: unable to allocate memory (linux47 only)
Product: Sudo Reporter: Bernhard Landauer <oberon>
Component: SudoAssignee: Todd C. Miller <Todd.Miller>
Status: RESOLVED FIXED    
Severity: normal    
Priority: low    
Version: 1.8.17   
Hardware: PC   
OS: Linux   
Attachments: sudo_debug as requested

Description Bernhard Landauer 2016-08-31 01:53:51 MDT
On Manjaro (Archlinux), when trying to build 32bit packages in a chroot on a 64bit system with kernel linux47 we receive this error:

sudo: main: unable to allocate memory

This happens only when using linux47 and with a chroot of different architecture.
No problem with other kernels and/or when building the host architecture. 

Maybe related in a way to https://bugzilla.sudo.ws/show_bug.cgi?id=706
?

sudo version 1.8.17.p1
Comment 1 Todd C. Miller 2016-08-31 05:35:21 MDT
It's possible that this is due to sudo not being able to get the process's tty name.  Please add the following line to /etc/sudo.conf (creating it as needed):

Debug sudo /var/log/sudo_debug all@debug

and attach the debug log to this bug.
Comment 2 Bernhard Landauer 2016-08-31 18:00:16 MDT
Created attachment 483 [details]
sudo_debug as requested

Thank you. log attached.
Comment 3 Todd C. Miller 2016-09-01 09:53:18 MDT
I was hoping to get a debug log from when sudo received the "unable to allocate memory" failure, the one you attached doesn't appear to be failing.  Perhaps the sudo.conf file needs to be inside the chroot?
Comment 4 Bernhard Landauer 2016-09-01 15:23:29 MDT
Yes, of course! ;) The config and log need to be inside the chroot.
Here you go. Looks like you were right about tty name being null...
Comment 5 Bernhard Landauer 2016-09-01 15:29:30 MDT
Sep  1 21:17:34 sudo[17763] -> sudo_check_suid @ ./sudo.c:829
Sep  1 21:17:34 sudo[17763] <- sudo_check_suid @ ./sudo.c:873
Sep  1 21:17:34 sudo[17763] -> save_signals @ ./signal.c:65
Sep  1 21:17:34 sudo[17763] <- save_signals @ ./signal.c:72
Sep  1 21:17:34 sudo[17763] -> init_signals @ ./signal.c:122
Sep  1 21:17:34 sudo[17763] -> pipe_nonblock @ ./exec.c:980
Sep  1 21:17:34 sudo[17763] <- pipe_nonblock @ ./exec.c:998 := 0
Sep  1 21:17:34 sudo[17763] <- init_signals @ ./signal.c:162
Sep  1 21:17:34 sudo[17763] -> sudo_conf_read_v1 @ ./sudo_conf.c:562
Sep  1 21:17:34 sudo[17763] -> sudo_secure_path @ ./secure_path.c:43
Sep  1 21:17:34 sudo[17763] <- sudo_secure_path @ ./secure_path.c:62 := 0
Sep  1 21:17:34 sudo[17763] -> sudo_parseln_v1 @ ./parseln.c:55
Sep  1 21:17:34 sudo[17763] <- sudo_parseln_v1 @ ./parseln.c:118 := 40
Sep  1 21:17:34 sudo[17763] -> sudo_parseln_v1 @ ./parseln.c:55
Sep  1 21:17:34 sudo[17763] <- sudo_parseln_v1 @ ./parseln.c:118 := 0
Sep  1 21:17:34 sudo[17763] -> sudo_parseln_v1 @ ./parseln.c:55
Sep  1 21:17:34 sudo[17763] <- sudo_parseln_v1 @ ./parseln.c:117 := -1
Sep  1 21:17:34 sudo[17763] <- sudo_conf_read_v1 @ ./sudo_conf.c:651 := 1
Sep  1 21:17:34 sudo[17763] -> get_user_info @ ./sudo.c:496
Sep  1 21:17:34 sudo[17763] -> sudo_new_key_val_v1 @ ./key_val.c:44
Sep  1 21:17:34 sudo[17763] <- sudo_new_key_val_v1 @ ./key_val.c:56 := user=root
Sep  1 21:17:34 sudo[17763] -> get_user_groups @ ./sudo.c:434
Sep  1 21:17:34 sudo[17763] <- get_user_groups @ ./sudo.c:480 := groups=0,1,2,3,4,6,10,19
Sep  1 21:17:34 sudo[17763] -> sudo_new_key_val_v1 @ ./key_val.c:44
Sep  1 21:17:34 sudo[17763] <- sudo_new_key_val_v1 @ ./key_val.c:56 := cwd=/startdir
Sep  1 21:17:34 sudo[17763] -> get_process_ttyname @ ./ttyname.c:484
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_dev @ ./ttyname.c:320
Sep  1 21:17:34 sudo[17763] comparing dev 34817 to /dev/pts/1: no @ sudo_ttyname_dev() ./ttyname.c:345
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/ @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/v4l @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/v4l/by-path @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/v4l/by-id @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/vboxusb @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/vboxusb/001 @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/dri @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/input @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/input/by-id @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/input/by-path @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/snd @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/snd/by-path @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/vfio @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/mapper @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/net @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/mqueue @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/hugepages @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/shm @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/usb @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/disk @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/disk/by-uuid @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/disk/by-partuuid @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/disk/by-path @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/disk/by-id @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/block @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/bsg @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/bus @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/bus/usb @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/bus/usb/002 @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/bus/usb/001 @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/char @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] -> sudo_ttyname_scan @ ./ttyname.c:181
Sep  1 21:17:34 sudo[17763] scanning for dev 34817 in /dev/cpu @ sudo_ttyname_scan() ./ttyname.c:187
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_scan @ ./ttyname.c:305 := (null)
Sep  1 21:17:34 sudo[17763] <- sudo_ttyname_dev @ ./ttyname.c:371 := (null)
Sep  1 21:17:34 sudo[17763] unable to resolve tty via /proc/17763/stat: Value too large for defined data type @ get_process_ttyname() ./ttyname.c:524
Sep  1 21:17:34 sudo[17763] <- get_process_ttyname @ ./ttyname.c:526 := (null)
Sep  1 21:17:34 sudo[17763] <- get_user_info @ ./sudo.c:601 := (nil)
Sep  1 21:17:34 sudo[17763] main: unable to allocate memory @ main() ./sudo.c:204
Comment 6 Bernhard Landauer 2016-09-01 15:30:21 MDT
Sorry, I kept getting errors when trying to attach the new file. So I just pasted it as a comment ...
Comment 7 Todd C. Miller 2016-09-02 07:34:58 MDT
No problem.  It looks like something is failing with EOVERFLOW, probably stat(2).  That shouldn't happen since configure should set _FILE_OFFSET_BITS to 64.  Since this only happens with a 4.7 kernel my guess is that there's either bug with stat64() on i386 or sudo was not compiled with _FILE_OFFSET_BITS = 64 (which configure should do for you).

You could strace the sudo process to see which syscall is returning EOVERFLOW.

I've committed a change to just warn and not exit when the tty cannot be resolved but it would be nice to understand exactly what is going on.
Comment 8 Todd C. Miller 2016-09-02 08:06:51 MDT
I think I've found the root cause of the problem.  Large file support was disabled in the ttyname code to work around a limitation on Solaris.  It should be fixed by:

https://www.sudo.ws/repos/sudo/rev/09450ce8b8a8

The upcoming sudo-1.8.18b4 will include this fix.
Comment 9 Bernhard Landauer 2016-09-02 15:59:48 MDT
Thanks a lot, Todd! This seems to fix the issue here.
Comment 10 Todd C. Miller 2016-09-20 15:15:51 MDT
Fixed in sudo 1.8.18