From efb8552b05431520d66ecd970628b35126039629 Mon Sep 17 00:00:00 2001 From: Vasiliy Ulyanov Date: Mon, 8 Feb 2021 13:47:30 +0100 Subject: [PATCH] tests/int: add device access test The test verifies if the device file can be queried using 'access(dev_name, F_OK)' when the permissions are set to 'rw'. The call does not explicitly trigger read or write access but should succeed. Signed-off-by: Vasiliy Ulyanov --- tests/integration/dev.bats | 8 +++++++- tests/integration/testdata/dev_access_test.c | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/integration/testdata/dev_access_test.c diff --git a/tests/integration/dev.bats b/tests/integration/dev.bats index 11c53c955..5ef515525 100644 --- a/tests/integration/dev.bats +++ b/tests/integration/dev.bats @@ -59,7 +59,7 @@ function teardown() { @test "runc run [device cgroup allow rw char device]" { requires root - update_config ' .linux.resources.devices = [{"allow": false, "access": "rwm"},{"allow": true, "type": "c", "major": 1, "minor": 11, "access": "rwm"}] + update_config ' .linux.resources.devices = [{"allow": false, "access": "rwm"},{"allow": true, "type": "c", "major": 1, "minor": 11, "access": "rw"}] | .linux.devices = [{"path": "/dev/kmsg", "type": "c", "major": 1, "minor": 11}] | .process.args |= ["sh"] | .hostname = "myhostname"' @@ -75,6 +75,12 @@ function teardown() { # test read runc exec test_allow_char sh -c 'head -n 1 /dev/kmsg' [ "$status" -eq 0 ] + + # test access + TEST_NAME="dev_access_test" + gcc -static -o "rootfs/bin/${TEST_NAME}" "${TESTDATA}/${TEST_NAME}.c" + runc exec test_allow_char sh -c "${TEST_NAME} /dev/kmsg" + [ "$status" -eq 0 ] } @test "runc run [device cgroup allow rm block device]" { diff --git a/tests/integration/testdata/dev_access_test.c b/tests/integration/testdata/dev_access_test.c new file mode 100644 index 000000000..705096c6d --- /dev/null +++ b/tests/integration/testdata/dev_access_test.c @@ -0,0 +1,17 @@ +#include +#include + +int main(int argc, char *argv[]) +{ + const char *dev_name = "/dev/kmsg"; + + if (argc > 1) + dev_name = argv[1]; + + if (access(dev_name, F_OK) < 0) { + perror(dev_name); + return 1; + } + + return 0; +}