Skip to content

execve.2: execve also returns E2BIG if a string is too long#37

Open
rikvanriel wants to merge 1 commit intomkerrisk:masterfrom
rikvanriel:master
Open

execve.2: execve also returns E2BIG if a string is too long#37
rikvanriel wants to merge 1 commit intomkerrisk:masterfrom
rikvanriel:master

Conversation

@rikvanriel
Copy link
Contributor

Document that if a command line or environment string is too long (> MAX_ARG_STRLEN), execve will also return E2BIG.

The execve syscall returns -E2BIG in 3 cases:
- The total length of the command line arguments and environment is too large.
- An argument or environment string (including the NUL byte) is longer than MAX_ARG_STRLEN.
- The full path to the executable (including the NUL byte) exceeds MAX_ARG_STRLEN.

Spell out all 3 cases in the -E2BIG section.

Discovered by moving a too large commandline parameter to an environment
variable, and finding that things still did not work. Examined the code
in fs/exec.c to get the details.

This simple shell script starts failing at 2^17 on a system with 4kB
page size:
./exec2big.sh: line 10: /bin/true: Argument list too long
fork failed at loop 17

STRING="a"

for loop in `seq 20`; do
	STRING="$STRING$STRING"
	export STRING
	if /bin/true ; then
		: # still under the limit
	else
		echo "fork failed at loop $loop"
	fi
done

Signed-off-by: Rik van Riel <riel@surriel.com>
Suggested-by: Matthew House <mattlloydhouse@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant