1 //===-- sanitizer_ioctl_test.cc -------------------------------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Tests for ioctl interceptor implementation in sanitizer_common.
12 //===----------------------------------------------------------------------===//
14 #include "sanitizer_common/sanitizer_platform.h"
17 #include <linux/input.h>
20 #include "interception/interception.h"
21 #include "sanitizer_test_utils.h"
22 #include "sanitizer_common/sanitizer_platform_limits_posix.h"
23 #include "sanitizer_common/sanitizer_common.h"
24 #include "gtest/gtest.h"
27 using namespace __sanitizer
;
29 #define COMMON_INTERCEPTOR_READ_RANGE(ctx, ptr, sz) \
35 #define COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ptr, sz) \
42 #include "sanitizer_common/sanitizer_common_interceptors_ioctl.inc"
44 static struct IoctlInit
{
47 // Avoid unused function warnings.
48 (void)&ioctl_common_pre
;
49 (void)&ioctl_common_post
;
52 } ioctl_static_initializer
;
54 TEST(SanitizerIoctl
, Fixup
) {
55 EXPECT_EQ((unsigned)FIONBIO
, ioctl_request_fixup(FIONBIO
));
57 EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(0, 16)));
58 EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(1, 16)));
59 EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(1, 17)));
60 EXPECT_EQ(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(31, 16)));
61 EXPECT_NE(EVIOCGBIT(0, 0), ioctl_request_fixup(EVIOCGBIT(32, 16)));
63 EXPECT_EQ(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(0)));
64 EXPECT_EQ(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(5)));
65 EXPECT_EQ(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(63)));
66 EXPECT_NE(EVIOCGABS(0), ioctl_request_fixup(EVIOCGABS(64)));
68 EXPECT_EQ(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(0)));
69 EXPECT_EQ(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(5)));
70 EXPECT_EQ(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(63)));
71 EXPECT_NE(EVIOCSABS(0), ioctl_request_fixup(EVIOCSABS(64)));
73 const ioctl_desc
*desc
= ioctl_lookup(EVIOCGKEY(16));
74 EXPECT_NE((void *)0, desc
);
75 EXPECT_EQ(EVIOCGKEY(0), desc
->req
);
78 #endif // SANITIZER_LINUX