summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuis Hector Chavez <lhchavez@google.com>2018-04-24 08:40:10 -0700
committerLuis Hector Chavez <lhchavez@google.com>2018-04-26 08:38:32 -0700
commitca4e5e87e5bf18698638b43a4b0a954e1f900028 (patch)
tree8143dafec8ced8d9711d446cd728739a93b594a9
parent2381050555c065cb1b721d24c0ff511f027af1b5 (diff)
downloadextras-ca4e5e87e5bf18698638b43a4b0a954e1f900028.tar.gz
Make the NOT_CONFIG_SYSVIPC test also exercise the syscalls
This change augments the NOT_CONFIG_SYSVIPC test, such that in addition to being evidence-based (by inspecting some paths in /proc), it also tries to invoke the syscalls. This is done because in some platforms like Chrome OS, the SYSVIPC kernel config is enabled (because some parts of the system require that to boot), but when Android is running, all SYSVIPC syscalls are blocked by an LSM in the kernel. It also changes the /proc/sysvipc path check from using access(2) and F_OK to R_OK, since the paths itself is present and visible. Bug: 77490033 Test: CtsKernelConfigTestCases Change-Id: I79df1816e0e5d3618da2a0e242c3d685352b7220 Merged-In: I79df1816e0e5d3618da2a0e242c3d685352b7220 (cherry picked from commit 687cd48d8bce5548c7bf1dcbbfd3fd770e452362)
-rw-r--r--tests/kernel.config/sysvipc_test.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/tests/kernel.config/sysvipc_test.cpp b/tests/kernel.config/sysvipc_test.cpp
index 49952f01..015991d6 100644
--- a/tests/kernel.config/sysvipc_test.cpp
+++ b/tests/kernel.config/sysvipc_test.cpp
@@ -18,6 +18,10 @@
#include <linux/kcmp.h>
#include <sys/syscall.h>
#endif
+#include <sys/ipc.h>
+#include <sys/msg.h>
+#include <sys/sem.h>
+#include <sys/shm.h>
#include <unistd.h>
#include <gtest/gtest.h>
@@ -36,9 +40,19 @@ TEST(kernel_config, NOT_CONFIG_SYSVIPC) {
EXPECT_EQ(-1, kcmp(pid, pid, KCMP_SYSVSEM, 0, 0));
EXPECT_EQ(EOPNOTSUPP, error);
#endif
- EXPECT_EQ(-1, access("/proc/sysvipc", F_OK));
+
+ EXPECT_EQ(-1, access("/proc/sysvipc", R_OK));
+
EXPECT_EQ(-1, access("/proc/sysvipc/msg", F_OK));
+ EXPECT_EQ(-1, msgctl(-1, IPC_STAT, nullptr));
+ EXPECT_EQ(ENOSYS, errno);
+
EXPECT_EQ(-1, access("/proc/sysvipc/sem", F_OK));
+ EXPECT_EQ(-1, semctl(-1, 0, IPC_STAT, nullptr));
+ EXPECT_EQ(ENOSYS, errno);
+
EXPECT_EQ(-1, access("/proc/sysvipc/shm", F_OK));
+ EXPECT_EQ(-1, shmctl(-1, IPC_STAT, nullptr));
+ EXPECT_EQ(ENOSYS, errno);
}