https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=200617
Bug ID: 200617
Summary: exec silently fails if text_size > maxtsiz
Product: Base System
Version: 11.0-CURRENT
Hardware: Any
OS: Any
Status: New
Severity: Affects Only Me
Priority: ---
Component: kern
Assignee: [email protected]
Reporter: [email protected]
I tried to run a debug build of Chrome:
feynman% ./chrome
zsh: abort ./chrome
There's no log message on the console or in /var/log/messages.
LLDB is no help:
feynman% lldb ./chrome
Current executable set to './chrome' (x86_64).
(lldb) run
Process 25332 launching
failed to fetch ps_strings: No such process
Process 25332 stopped
(lldb) error: initial process state wasn't stopped: exited
GDB is no help:
feynman% gdb79 ./chrome
GNU gdb (GDB) 7.9 [GDB v7.9 for FreeBSD]
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-portbld-freebsd10.1".
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 ./chrome...(no debugging symbols found)...done.
(gdb) run
Starting program: /tank/emaste/src/ports/www/chromium/chrome
During startup program terminated with signal SIGABRT, Aborted.
(gdb)
If one knows what to look for dtrace is helpful:
dtrace: description 'fbt:kernel:exec_elf64_imgact:return ' matched 1 probe
CPU ID FUNCTION:NAME
4 13890 exec_elf64_imgact:return error=12
That's ENOMEM. From imgact_elf.c:
if (data_size > lim_cur(imgp->proc, RLIMIT_DATA) ||
text_size > maxtsiz ||
total_size > lim_cur(imgp->proc, RLIMIT_VMEM) ||
racct_set(imgp->proc, RACCT_DATA, data_size) != 0 ||
racct_set(imgp->proc, RACCT_VMEM, total_size) != 0) {
PROC_UNLOCK(imgp->proc);
return (ENOMEM);
}
This case should produce some sort of user-facing log message (likely from
kern_execve, not imgact_elf).
/*
* Loop through the list of image activators, calling each one.
* An activator returns -1 if there is no match, 0 on success,
* and an error otherwise.
*/
for (i = 0; error == -1 && execsw[i]; ++i) {
if (execsw[i]->ex_imgact == NULL ||
execsw[i]->ex_imgact == img_first) {
continue;
}
error = (*execsw[i]->ex_imgact)(imgp);
}
if (error) {
if (error == -1) {
if (textset == 0)
VOP_UNSET_TEXT(imgp->vp);
error = ENOEXEC;
}
goto exec_fail_dealloc;
}
--
You are receiving this mail because:
You are the assignee for the bug.
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "[email protected]"