@@ -172,13 +172,19 @@ class LibcFcntlCommonLockTests : public LlvmLibcFcntlTest {
172172 int fd =
173173 LIBC_NAMESPACE::open (TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU);
174174 ASSERT_THAT (LIBC_NAMESPACE::close (fd), Succeeds (0 ));
175- ASSERT_EQ (-1 , LIBC_NAMESPACE::fcntl (fd, GETLK_CMD));
175+
176+ struct flock flk = {};
177+ flk.l_type = F_RDLCK;
178+ flk.l_start = 0 ;
179+ flk.l_whence = SEEK_SET;
180+ flk.l_len = 50 ;
181+ ASSERT_EQ (-1 , LIBC_NAMESPACE::fcntl (fd, GETLK_CMD, &flk));
176182 ASSERT_ERRNO_EQ (EBADF);
177183 }
178184};
179185
180- #define COMMON_LOCK_TESTS (NAME, GETLK, SETLK ) \
181- using NAME = LibcFcntlCommonLockTests<GETLK, SETLK>; \
186+ #define COMMON_LOCK_TESTS (NAME, GETLK_CMD, SETLK_CMD ) \
187+ using NAME = LibcFcntlCommonLockTests<GETLK_CMD, GETLK_CMD>; \
182188 TEST_F (NAME, GetLkRead) { GetLkRead (); } \
183189 TEST_F (NAME, GetLkWrite) { GetLkWrite (); } \
184190 TEST_F (NAME, UseAfterClose) { UseAfterClose (); } \
@@ -188,6 +194,16 @@ COMMON_LOCK_TESTS(LlvmLibcFcntlProcessAssociatedLockTest, F_GETLK, F_SETLK);
188194COMMON_LOCK_TESTS (LlvmLibcFcntlOpenFileDescriptionLockTest, F_OFD_GETLK,
189195 F_OFD_SETLK);
190196
197+ TEST_F (LlvmLibcFcntlTest, UseAfterClose) {
198+ using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
199+ constexpr const char *TEST_FILE_NAME = " testdata/fcntl_use_after_close.test" ;
200+ auto TEST_FILE = libc_make_test_file_path (TEST_FILE_NAME);
201+ int fd = LIBC_NAMESPACE::open (TEST_FILE, O_CREAT | O_TRUNC | O_RDWR, S_IRWXU);
202+ ASSERT_THAT (LIBC_NAMESPACE::close (fd), Succeeds (0 ));
203+ ASSERT_EQ (-1 , LIBC_NAMESPACE::fcntl (fd, F_GETFL));
204+ ASSERT_ERRNO_EQ (EBADF);
205+ }
206+
191207TEST_F (LlvmLibcFcntlTest, SetGetOwnerTest) {
192208 using LIBC_NAMESPACE::testing::ErrnoSetterMatcher::Succeeds;
193209 pid_t pid = LIBC_NAMESPACE::getpid ();
0 commit comments