* caps.awk: Add patterns for additional checks. * caps.c: Implement additional checks. --- tests/caps.awk | 16 +++++++++++++--- tests/caps.c | 28 +++++++++++++++++++++++++++- 2 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/tests/caps.awk b/tests/caps.awk index 67003ac..6130482 100644 --- a/tests/caps.awk +++ b/tests/caps.awk @@ -31,16 +31,26 @@ BEGIN { cap = "(0|1<<CAP_[A-Z_]+(\\|1<<CAP_[A-Z_]+)*|1<<CAP_[A-Z_]+(\\|1<<CAP_[A-Z_]+){37}\\|0xffffffc0)" s_efault = "-1 EFAULT (Bad address)" r_efault = "-1 EFAULT \\(Bad address\\)" + r_einval = "-1 EINVAL \\(Invalid argument\\)" r_addr = "0x[[:xdigit:]]+" s[1] = "capget(NULL, NULL) = " s_efault r[2] = "^capget\\(" r_addr ", " r_addr "\\) = " r_efault r[3] = "^capget\\(\\{_LINUX_CAPABILITY_VERSION_3, 0\\}, " r_addr "\\) = " r_efault r[4] = "^capget\\(\\{_LINUX_CAPABILITY_VERSION_3, 0\\}, \\{" cap ", " cap ", " cap "\\}\\) = 0$" + + capset_v1_data = "{1<<CAP_DAC_OVERRIDE, 1<<CAP_DAC_READ_SEARCH, 0}" + capset_v3hi_data = "{1<<CAP_WAKE_ALARM, 1<<CAP_BLOCK_SUSPEND, 0}" capset_data = "{1<<CAP_DAC_OVERRIDE|1<<CAP_WAKE_ALARM, 1<<CAP_DAC_READ_SEARCH|1<<CAP_BLOCK_SUSPEND, 0}" - s[5] = "capset({_LINUX_CAPABILITY_VERSION_3, 0}, " capset_data ") = -1 EPERM (Operation not permitted)" - s[6] = "+++ exited with 0 +++" + s[5] = "capset(NULL, NULL) = " s_efault + r[6] = "^capset\\(" r_addr ", " r_addr "\\) = " r_efault + r[7] = "^capset\\(\\{0xbadc0ded /\\* _LINUX_CAPABILITY_VERSION_\\?\\?\\? \\*/, -1576685468\\}, " r_addr "\\) = " r_einval + r[8] = "^capset\\(\\{_LINUX_CAPABILITY_VERSION_2, 0\\}, " r_addr "\\) = " r_efault + s[9] = "capset({_LINUX_CAPABILITY_VERSION_3, 0}, " capset_data ") = -1 EPERM (Operation not permitted)" + s[10] = "capset({_LINUX_CAPABILITY_VERSION_3, 0}, " capset_v3hi_data ") = -1 EPERM (Operation not permitted)" + s[11] = "capset({_LINUX_CAPABILITY_VERSION_1, 0}, " capset_v1_data ") = -1 EPERM (Operation not permitted)" + s[12] = "+++ exited with 0 +++" - lines = 6 + lines = 12 fail = 0 } diff --git a/tests/caps.c b/tests/caps.c index 17e1077..9f33a39 100644 --- a/tests/caps.c +++ b/tests/caps.c @@ -38,6 +38,8 @@ int main(void) { const int data[] = { 2, 4, 0, 8, 16, 0 }; + const int v1 = 0x19980330; + const int v2 = 0x20071026; const int v3 = 0x20080522; int * const head = tail_alloc(sizeof(int) * 2); @@ -55,7 +57,31 @@ main(void) error_msg_and_skip("capget: v3 expected"); memcpy(tail_data, data, sizeof(data)); - if (capset(head, data) == 0 || errno != EPERM) + + capset(NULL, NULL); + capset(head + 2, tail_data); + + head[0] = 0xbadc0ded; + head[1] = 2718281828U; + capset(head, tail_data + ARRAY_SIZE(data) - 2); + + head[0] = v2; + head[1] = 0; + capset(head, tail_data + ARRAY_SIZE(data) - 5); + + memcpy(tail_data, data, sizeof(data)); + head[0] = v3; + if (capset(head, tail_data) == 0 || errno != EPERM) + perror_msg_and_skip("capset"); + + memset(tail_data, 0, sizeof(data) / 2); + if (capset(head, tail_data) == 0 || errno != EPERM) + perror_msg_and_skip("capset"); + + memcpy(tail_data + ARRAY_SIZE(data) / 2, data, sizeof(data) / 2); + head[0] = v1; + if (capset(head, tail_data + ARRAY_SIZE(data) / 2) == 0 || + errno != EPERM) perror_msg_and_skip("capset"); return 0; -- 1.7.10.4 ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel