Skip to content

Commit

Permalink
tests: add a simple test that checks what fexecve_or_execve does
Browse files Browse the repository at this point in the history
This can be easily used to show that the issue described in
ceedbf8 is still reproduced:

$ strace -e execveat build/test-execve /bin/grep Name /proc/self/status
execveat(3, "", ["/bin/grep", "Name", "/proc/self/status"], NULL, AT_EMPTY_PATH) = 0
Name:	3
  • Loading branch information
keszybz authored and yuwata committed Jul 22, 2022
1 parent 704116c commit 35a9267
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/test/meson.build
Expand Up @@ -232,6 +232,8 @@ tests += [

[files('test-exec-util.c')],

[files('test-execve.c')],

[files('test-hexdecoct.c')],

[files('test-alloc-util.c')],
Expand Down
40 changes: 40 additions & 0 deletions src/test/test-execve.c
@@ -0,0 +1,40 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */

#include "exec-util.h"
#include "fd-util.h"
#include "log.h"
#include "main-func.h"
#include "strv.h"
#include "tests.h"

/* This program can be used to call programs through fexecve / execveat(…, "", …, AT_EMPTY_PATH),
* when compiled with -Dfexecve=true, and the fallback paths, when -Dfexecve=false.
*
* Example:
* $ strace -e execveat build/test-execve /bin/grep Name /proc/self/status
* execveat(3, "", ["/bin/grep", "Name", "/proc/self/status"], NULL, AT_EMPTY_PATH) = 0
* Name: 3
*
* FIXME: use the new kernel api to set COMM properly when the kernel makes that available.
* C.f. ceedbf8185fc7593366679f02d31da63af8c4bd1.
*/

static int run(int argc, char **argv) {
_cleanup_close_ int fd;
char **args = strv_skip(argv, 1);
int r;

test_setup_logging(LOG_DEBUG);

args = !strv_isempty(args) ? args : STRV_MAKE("/bin/true");

fd = open(args[0], O_RDONLY | O_CLOEXEC);
if (fd < 0)
return log_error_errno(errno, "open(%s) failed: %m", args[0]);

r = fexecve_or_execve(fd, args[0], args, NULL);
assert_se(r < 0);
return log_error_errno(r, "fexecve_or_execve(%s) failed: %m", args[0]);
}

DEFINE_MAIN_FUNCTION(run);

0 comments on commit 35a9267

Please sign in to comment.