test-coredump-util: also test parse_auxv() with unaligned data

This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2023-03-23 18:07:45 +01:00
parent 2f809d29e8
commit f39546a881
+42 -13
View File
@@ -69,6 +69,33 @@ TEST(coredump_filter_mask_from_string) {
1 << COREDUMP_FILTER_SHARED_DAX)));
}
static void test_parse_auxv_two(
uint8_t elf_class,
size_t offset,
const char *data,
size_t data_size,
int expect_at_secure,
uid_t expect_uid,
uid_t expect_euid,
gid_t expect_gid,
gid_t expect_egid) {
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_debug("[offset=%zu] at_secure=%d, uid="UID_FMT", euid="UID_FMT", gid="GID_FMT", egid="GID_FMT,
offset,
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);
}
static void test_parse_auxv_one(
uint8_t elf_class,
int dir_fd,
@@ -79,24 +106,26 @@ static void test_parse_auxv_one(
gid_t expect_gid,
gid_t expect_egid) {
_cleanup_free_ char *data;
_cleanup_free_ char *buf;
const char *data;
size_t data_size;
log_info("Parsing %s…", filename);
assert_se(read_full_file_at(dir_fd, filename, &data, &data_size) >= 0);
assert_se(read_full_file_at(dir_fd, filename, &buf, &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);
for (size_t offset = 0; offset < 8; offset++) {
_cleanup_free_ char *buf2 = NULL;
log_info("at_secure=%d, uid="UID_FMT", euid="UID_FMT", gid="GID_FMT", egid="GID_FMT,
at_secure, uid, euid, gid, egid);
if (offset == 0)
data = buf;
else {
assert_se(buf2 = malloc(offset + data_size));
memcpy(buf2 + offset, buf, data_size);
data = buf2 + offset;
}
assert_se(uid == expect_uid);
assert_se(euid == expect_euid);
assert_se(gid == expect_gid);
assert_se(egid == expect_egid);
test_parse_auxv_two(elf_class, offset, data, data_size,
expect_at_secure, expect_uid, expect_euid, expect_gid, expect_egid);
}
}
TEST(test_parse_auxv) {