test-coredump-util: add tests for parse_aux()
The test files are /proc//auxv files copies from various architecutres signified by the file name suffix. Those tests are fairly simple, but when we run them on n architectures, we do ~n² cross-arch tests.
This commit is contained in:
@@ -1,7 +1,12 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
|
||||
#include <elf.h>
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "coredump-util.h"
|
||||
#include "fileio.h"
|
||||
#include "fd-util.h"
|
||||
#include "format-util.h"
|
||||
#include "macro.h"
|
||||
#include "tests.h"
|
||||
|
||||
@@ -64,4 +69,62 @@ TEST(coredump_filter_mask_from_string) {
|
||||
1 << COREDUMP_FILTER_SHARED_DAX)));
|
||||
}
|
||||
|
||||
static void test_parse_auxv_one(
|
||||
uint8_t elf_class,
|
||||
int dir_fd,
|
||||
const char *filename,
|
||||
int expect_at_secure,
|
||||
uid_t expect_uid,
|
||||
uid_t expect_euid,
|
||||
gid_t expect_gid,
|
||||
gid_t expect_egid) {
|
||||
|
||||
_cleanup_free_ char *data;
|
||||
size_t data_size;
|
||||
log_info("Parsing %s…", filename);
|
||||
assert_se(read_full_file_at(dir_fd, filename, &data, &data_size) >= 0);
|
||||
|
||||
int at_secure;
|
||||
uid_t uid, euid;
|
||||
gid_t gid, egid;
|
||||
assert_se(parse_auxv(LOG_ERR, elf_class, data, data_size,
|
||||
&at_secure, &uid, &euid, &gid, &egid) == 0);
|
||||
|
||||
log_info("at_secure=%d, uid="UID_FMT", euid="UID_FMT", gid="GID_FMT", egid="GID_FMT,
|
||||
at_secure, uid, euid, gid, egid);
|
||||
|
||||
assert_se(uid == expect_uid);
|
||||
assert_se(euid == expect_euid);
|
||||
assert_se(gid == expect_gid);
|
||||
assert_se(egid == expect_egid);
|
||||
}
|
||||
|
||||
TEST(test_parse_auxv) {
|
||||
_cleanup_free_ char *dir = NULL;
|
||||
_cleanup_close_ int dir_fd = -EBADF;
|
||||
|
||||
assert_se(get_testdata_dir("auxv", &dir) >= 0);
|
||||
dir_fd = open(dir, O_RDONLY | O_CLOEXEC | O_DIRECTORY | O_PATH);
|
||||
assert_se(dir_fd >= 0);
|
||||
|
||||
if (__BYTE_ORDER == __LITTLE_ENDIAN) {
|
||||
test_parse_auxv_one(ELFCLASS32, dir_fd, "resolved.arm32", 0, 193, 193, 193, 193);
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "bash.riscv64", 0, 1001, 1001, 1001, 1001);
|
||||
test_parse_auxv_one(ELFCLASS32, dir_fd, "sleep.i686", 0, 1000, 1000, 1000, 1000);
|
||||
/* after chgrp and chmod g+s */
|
||||
test_parse_auxv_one(ELFCLASS32, dir_fd, "sleep32.i686", 1, 1000, 1000, 1000, 10);
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "sleep64.amd64", 1, 1000, 1000, 1000, 10);
|
||||
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "sudo.aarch64", 1, 1494200408, 0, 1494200408, 1494200408);
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "sudo.amd64", 1, 1000, 0, 1000, 1000);
|
||||
|
||||
/* Those run unprivileged, but start as root. */
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "dbus-broker-launch.amd64", 0, 0, 0, 0, 0);
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "dbus-broker-launch.aarch64", 0, 0, 0, 0, 0);
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "polkitd.aarch64", 0, 0, 0, 0, 0);
|
||||
} else {
|
||||
test_parse_auxv_one(ELFCLASS64, dir_fd, "cat.s390x", 0, 3481, 3481, 3481, 3481);
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_TEST_MAIN(LOG_INFO);
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
/*.* -whitespace
|
||||
/*.* binary
|
||||
/*.* generated
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+26
-57
@@ -3,63 +3,32 @@
|
||||
if install_tests
|
||||
testdata_dir = testsdir + '/testdata/'
|
||||
|
||||
install_subdir('journal-data',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('test-execute',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('test-fstab-generator',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('test-path',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('test-path-util',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('test-umount',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('test-network-generator-conversion',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-03.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-04.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-06.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-10.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-11.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-16.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-28.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-30.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-52.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-63.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
install_subdir('testsuite-80.units',
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
foreach subdir : [
|
||||
'auxv',
|
||||
'journal-data',
|
||||
'units',
|
||||
'test-execute',
|
||||
'test-fstab-generator',
|
||||
'test-path',
|
||||
'test-path-util',
|
||||
'test-umount',
|
||||
'test-network-generator-conversion',
|
||||
'testsuite-03.units',
|
||||
'testsuite-04.units',
|
||||
'testsuite-06.units',
|
||||
'testsuite-10.units',
|
||||
'testsuite-11.units',
|
||||
'testsuite-16.units',
|
||||
'testsuite-28.units',
|
||||
'testsuite-30.units',
|
||||
'testsuite-52.units',
|
||||
'testsuite-63.units',
|
||||
'testsuite-80.units',
|
||||
]
|
||||
install_subdir(subdir,
|
||||
exclude_files : '.gitattributes',
|
||||
install_dir : testdata_dir)
|
||||
endforeach
|
||||
|
||||
install_data(kbd_model_map,
|
||||
install_dir : testdata_dir + '/test-keymap-util')
|
||||
|
||||
Reference in New Issue
Block a user