[compiler-rt] [rtsan] Add ioctl interceptor (PR #117569)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 26 15:03:48 PST 2024
================
@@ -373,6 +375,57 @@ class RtsanOpenedFileTest : public RtsanFileTest {
int fd = -1;
};
+TEST(TestRtsanInterceptors, IoctlDiesWhenRealtime) {
+ auto Func = []() { ioctl(0, FIONREAD); };
+ ExpectRealtimeDeath(Func, "ioctl");
+ ExpectNonRealtimeSurvival(Func);
+}
+
+TEST_F(RtsanOpenedFileTest, IoctlBehavesWithOutputArg) {
+ int arg{};
+ ioctl(GetOpenFd(), FIONREAD, &arg);
+
+ EXPECT_THAT(arg, Ge(0));
+}
+
+TEST(TestRtsanInterceptors, IoctlBehavesWithOutputPointer) {
+ // These initial checks just see if we CAN run these tests.
+ // If we can't (can't open a socket, or can't find an interface, just
+ // gracefully skip.
+ int sock = socket(AF_INET, SOCK_STREAM, 0);
+ if (sock == -1) {
+ perror("socket");
+ GTEST_SKIP();
+ return;
+ }
+
+ struct ifaddrs *ifaddr = nullptr;
+ if (getifaddrs(&ifaddr) == -1 || ifaddr == nullptr) {
+ perror("getifaddrs");
+ close(sock);
+ GTEST_SKIP();
+ return;
+ }
+
+ struct ifreq ifr {};
+ strncpy(ifr.ifr_name, ifaddr->ifa_name, IFNAMSIZ - 1);
+
+ int retval = ioctl(sock, SIOCGIFADDR, &ifr);
+ if (retval == -1) {
+ perror("ioctl");
+ close(sock);
+ freeifaddrs(ifaddr);
+ ASSERT_TRUE(false) << "ioctl failed";
----------------
davidtrevelyan wrote:
Could replace `ASSERT_TRUE(false)` with `FAIL()`, and `return` underneath is also not needed
https://github.com/llvm/llvm-project/pull/117569
More information about the llvm-commits
mailing list