|
|
Message-ID: <6ead5f7b-d645-5df0-cb06-a99178471a96@bell-sw.com>
Date: Wed, 12 Feb 2020 16:54:37 +0300
From: Alexander Scherbatiy <alexander.scherbatiy@...l-sw.com>
To: musl@...ts.openwall.com
Subject: execvp() behaviour with unrecognized file header
Hello,
execvp() works differently on Linux Alpine and Ubuntu if it is called
with a file which does not contain a proper shebang line. The file is
executed on Ubuntu. It results to ENOEXEC error on Linux Alpine.
man execvp on Ubuntu has description: "If the header of a file isn't
recognized (the attempted execve(2) failed with the error ENOEXEC),
these functions will execute the shell (/bin/sh) with the path of the
file as its first argument."
Does execvp() from musl behaves differently by purpose in this case?
The sample code:
---- execvp_sample.c ----
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
char *file = argv[1];
char *execvp_argv[1] = {NULL};
execvp(file, execvp_argv);
exit(errno);
}
--------------------------------------
gcc -o execvp_sample execvp_sample.c
---- script_1.sh ---
#!/bin/bash
echo Hello, World!
----------------------
Ubuntu: > ./execvp_sample ./script_1.sh
Hello, World!
---- script_2.sh ---
#!/bin/ash
echo Hello, World!
----------------------
Alpine Linux: > ./execvp_sample ./script_2.sh
Hello, World!
---- script_3.sh ---
echo Hello, World!
----------------------
Ubuntu: > ./execvp_sample ./script_3.sh
Hello, World!
Alpine Linux: > ./execvp_sample ./script_3.sh
error code: ENOEXEC
Thanks,
Alexander.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.