diff options
| author | Chih-Hung Hsieh <chh@google.com> | 2017-08-16 17:53:12 +0000 |
|---|---|---|
| committer | Chih-Hung Hsieh <chh@google.com> | 2017-08-16 17:53:12 +0000 |
| commit | 3be4ecb15b9e51ee959be424a7ce9e006859e4e3 (patch) | |
| tree | b56355865a090a6a6135ff54dd5a9d02e2a979aa /clang-tools-extra/test | |
| parent | 5ac20c9c2527f9deee70405155798e37ab56b332 (diff) | |
| download | bcm5719-llvm-3be4ecb15b9e51ee959be424a7ce9e006859e4e3.tar.gz bcm5719-llvm-3be4ecb15b9e51ee959be424a7ce9e006859e4e3.zip | |
[clang-tidy] Add a close-on-exec check on epoll_create1() in Android module.
Summary:
epoll_create1() is better to set EPOLL_CLOEXEC flag to avoid file descriptor leakage.
Differential Revision: https://reviews.llvm.org/D35365
llvm-svn: 311028
Diffstat (limited to 'clang-tools-extra/test')
| -rw-r--r-- | clang-tools-extra/test/clang-tidy/android-cloexec-epoll-create1.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/clang-tools-extra/test/clang-tidy/android-cloexec-epoll-create1.cpp b/clang-tools-extra/test/clang-tidy/android-cloexec-epoll-create1.cpp new file mode 100644 index 00000000000..696a20cd07b --- /dev/null +++ b/clang-tools-extra/test/clang-tidy/android-cloexec-epoll-create1.cpp @@ -0,0 +1,59 @@ +// RUN: %check_clang_tidy %s android-cloexec-epoll-create1 %t + +#define __O_CLOEXEC 3 +#define EPOLL_CLOEXEC __O_CLOEXEC +#define TEMP_FAILURE_RETRY(exp) \ + ({ \ + int _rc; \ + do { \ + _rc = (exp); \ + } while (_rc == -1); \ + }) + +extern "C" int epoll_create1(int flags); + +void a() { + epoll_create1(0); + // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'epoll_create1' should use EPOLL_CLOEXEC where possible [android-cloexec-epoll-create1] + // CHECK-FIXES: epoll_create1(EPOLL_CLOEXEC); + TEMP_FAILURE_RETRY(epoll_create1(0)); + // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: 'epoll_create1' + // CHECK-FIXES: TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC)); +} + +void f() { + epoll_create1(3); + // CHECK-MESSAGES: :[[@LINE-1]]:18: warning: 'epoll_create1' + // CHECK-FIXES: epoll_create1(EPOLL_CLOEXEC); + TEMP_FAILURE_RETRY(epoll_create1(3)); + // CHECK-MESSAGES: :[[@LINE-1]]:37: warning: 'epoll_create1' + // CHECK-FIXES: TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC)); + + int flag = 0; + epoll_create1(EPOLL_CLOEXEC); + TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC)); +} + +namespace i { +int epoll_create1(int flags); + +void d() { + epoll_create1(0); + TEMP_FAILURE_RETRY(epoll_create1(0)); +} + +} // namespace i + +void e() { + epoll_create1(EPOLL_CLOEXEC); + TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC)); +} + +class G { +public: + int epoll_create1(int flags); + void d() { + epoll_create1(EPOLL_CLOEXEC); + TEMP_FAILURE_RETRY(epoll_create1(EPOLL_CLOEXEC)); + } +}; |

