From 2f809d29e85527acd75d4d2e46aaa14adc2f09dd Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 22 Mar 2023 13:42:40 +0100 Subject: [PATCH] test-coredump-util: add tests for parse_aux() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 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. --- src/test/test-coredump-util.c | 63 ++++++++++++++++++++ test/auxv/.gitattributes | 3 + test/auxv/bash.riscv64 | Bin 0 -> 384 bytes test/auxv/cat.s390x | Bin 0 -> 304 bytes test/auxv/dbus-broker-launch.aarch64 | Bin 0 -> 336 bytes test/auxv/dbus-broker-launch.amd64 | Bin 0 -> 336 bytes test/auxv/polkitd.aarch64 | Bin 0 -> 336 bytes test/auxv/resolved.arm32 | Bin 0 -> 160 bytes test/auxv/sleep.i686 | Bin 0 -> 192 bytes test/auxv/sleep32.i686 | Bin 0 -> 192 bytes test/auxv/sleep64.amd64 | Bin 0 -> 336 bytes test/auxv/sudo.aarch64 | Bin 0 -> 336 bytes test/auxv/sudo.amd64 | Bin 0 -> 336 bytes test/meson.build | 83 +++++++++------------------ 14 files changed, 92 insertions(+), 57 deletions(-) create mode 100644 test/auxv/.gitattributes create mode 100644 test/auxv/bash.riscv64 create mode 100644 test/auxv/cat.s390x create mode 100644 test/auxv/dbus-broker-launch.aarch64 create mode 100644 test/auxv/dbus-broker-launch.amd64 create mode 100644 test/auxv/polkitd.aarch64 create mode 100644 test/auxv/resolved.arm32 create mode 100644 test/auxv/sleep.i686 create mode 100644 test/auxv/sleep32.i686 create mode 100644 test/auxv/sleep64.amd64 create mode 100644 test/auxv/sudo.aarch64 create mode 100644 test/auxv/sudo.amd64 diff --git a/src/test/test-coredump-util.c b/src/test/test-coredump-util.c index 40b68df9f4..755cb49dae 100644 --- a/src/test/test-coredump-util.c +++ b/src/test/test-coredump-util.c @@ -1,7 +1,12 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #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); diff --git a/test/auxv/.gitattributes b/test/auxv/.gitattributes new file mode 100644 index 0000000000..58e3ff4c98 --- /dev/null +++ b/test/auxv/.gitattributes @@ -0,0 +1,3 @@ +/*.* -whitespace +/*.* binary +/*.* generated diff --git a/test/auxv/bash.riscv64 b/test/auxv/bash.riscv64 new file mode 100644 index 0000000000000000000000000000000000000000..273a468b300ba75532527ff4746f31dca3d0d9ea GIT binary patch literal 384 zcmY#nfP#h<^X!344LBdd(1h|G7&yQzEi`#;G7ZNzHjf+1 qe+jh+W)6(cizd&9#utb3VU#44;r}n}Hz+*iq5OCMA$*uR7!3gMoEBjK literal 0 HcmV?d00001 diff --git a/test/auxv/cat.s390x b/test/auxv/cat.s390x new file mode 100644 index 0000000000000000000000000000000000000000..aa76441fed60eef4598e972a30db9d5cca5cb8bf GIT binary patch literal 304 zcmZQz00Tt^2Il{L{SP2K1_l8zgZ=-1r~n&;h6n@Mf>7}kD9y~kz_dzSgTVpHXMxfd zP?{A=b3$o$uzej+9s>ghoCRS3)q%{@m;e>$hS0n-p?n@RJ}(-d4~;Jl)d!;_LH6I_ X|0n|$kcaU9zlZYqq4GK~4KNx2r`;G6 literal 0 HcmV?d00001 diff --git a/test/auxv/dbus-broker-launch.aarch64 b/test/auxv/dbus-broker-launch.aarch64 new file mode 100644 index 0000000000000000000000000000000000000000..3a05e3cabb0d25a6ec8b16bc908e89c0b6263e17 GIT binary patch literal 336 zcmY#nfP#d;ZU6r>Fc?F*1ws&p0F?iKz95*%2IVtAB?O`T6e!IMr5zYF53O3oz`z3K zTR>@6D9sI}*`YMU1YfZI956nV=7iD>z7X?Z`e4dV!Z literal 0 HcmV?d00001 diff --git a/test/auxv/polkitd.aarch64 b/test/auxv/polkitd.aarch64 new file mode 100644 index 0000000000000000000000000000000000000000..ff1ea9f1409bcaaa3578eb5a73299afd89192c01 GIT binary patch literal 336 zcmY#nfP#jgY5)H-Fc?F*1ws&p0F?iKz95*%2IVtAB?O`T6e!IMr5zZw)~s5^z`z3K zTR>@6D9sI}*`YMU20yU<956nV=7jN=L(GHeg9-D%7*LuQjn9Y17f0huLismXUf%%u YUkXiL9?HMR50U4G@?SvJqbX+q0Km~6Z2$lO literal 0 HcmV?d00001 diff --git a/test/auxv/resolved.arm32 b/test/auxv/resolved.arm32 new file mode 100644 index 0000000000000000000000000000000000000000..7d05f3b20b8f961b92f7aa1de3794d1af0f98f52 GIT binary patch literal 160 zcmY#n0D^*l`vid0wGH+RY#=_6BM78YfS4JGO&A;)Sb($w5VHa?ClIp(F+;K7JtE8z>H>zyJUR CJQhs= literal 0 HcmV?d00001 diff --git a/test/auxv/sleep.i686 b/test/auxv/sleep.i686 new file mode 100644 index 0000000000000000000000000000000000000000..d0b5f2c92747c8f47a351db746dd2a42a5d8a18d GIT binary patch literal 192 zcmY#jU|ui5CGEuf4|<(1`-Ey1c6iv5Hka@NdpT93y@X- zVpbsL0b+I_W;pQqI|qmc0!|=Kn83op4WwTHHG$NCXkI7{v;xc*2ht!Q3B=tOC;XQJ Y(o8@s55(`@Px#Ldq-O)gffQB%0LarEy8r+H literal 0 HcmV?d00001 diff --git a/test/auxv/sleep32.i686 b/test/auxv/sleep32.i686 new file mode 100644 index 0000000000000000000000000000000000000000..f52f512436de7eba5847aade98baabb3cd3f4521 GIT binary patch literal 192 zcmY#jU|>(xfy99vK_Ha^#LPf!(!j#O0;Cmy zm=%b5fS4VK84BKg=K#?_zzM_&6IeL7f%FTYCXgBs%?qW0Rxoe@u{aPj0r?DJ_thq%K!iS^?neO4a#SLN(e&vDNvdjN;@z(fLSb1z6F$K zh0?rGnjK0rFs%J=0JNV2&WA8Kp?n7c2QZ5p%6|d1hzE@iGZ!Wg^#%hMRGm1KW`xp` gP&!j@6D9sI}*`YK;!F90x956nV=7iD*Iw9u4^hIpoj|55aK;>Z+FO&h3=R@O*L-~wQ jS`tcoY%hKV^1l?652NIvj92F&^88SK1XMjt9gGG5Iw~Y! literal 0 HcmV?d00001 diff --git a/test/auxv/sudo.amd64 b/test/auxv/sudo.amd64 new file mode 100644 index 0000000000000000000000000000000000000000..91e46466154133d87ae0f87f1c3231ac6043aba8 GIT binary patch literal 336 zcmY#nfPxRw;s5Iy7>uD@13m~t0LuUW`}KYhlMTvefJz8L`6*DE8A>}mh*Vn>%D}(^ zKrv05{tkC;$Ke literal 0 HcmV?d00001 diff --git a/test/meson.build b/test/meson.build index 1135ecd920..1721cffcd5 100644 --- a/test/meson.build +++ b/test/meson.build @@ -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') -- 2.25.1