@@ -4050,6 +4050,16 @@ TEST(user_notification_filter_empty_threaded)
4050
4050
EXPECT_GT ((pollfd .revents & POLLHUP ) ?: 0 , 0 );
4051
4051
}
4052
4052
4053
+
4054
+ int get_next_fd (int prev_fd )
4055
+ {
4056
+ for (int i = prev_fd + 1 ; i < FD_SETSIZE ; ++ i ) {
4057
+ if (fcntl (i , F_GETFD ) == -1 )
4058
+ return i ;
4059
+ }
4060
+ _exit (EXIT_FAILURE );
4061
+ }
4062
+
4053
4063
TEST (user_notification_addfd )
4054
4064
{
4055
4065
pid_t pid ;
@@ -4066,7 +4076,7 @@ TEST(user_notification_addfd)
4066
4076
/* There may be arbitrary already-open fds at test start. */
4067
4077
memfd = memfd_create ("test" , 0 );
4068
4078
ASSERT_GE (memfd , 0 );
4069
- nextfd = memfd + 1 ;
4079
+ nextfd = get_next_fd ( memfd ) ;
4070
4080
4071
4081
ret = prctl (PR_SET_NO_NEW_PRIVS , 1 , 0 , 0 , 0 );
4072
4082
ASSERT_EQ (0 , ret ) {
@@ -4077,7 +4087,8 @@ TEST(user_notification_addfd)
4077
4087
/* Check that the basic notification machinery works */
4078
4088
listener = user_notif_syscall (__NR_getppid ,
4079
4089
SECCOMP_FILTER_FLAG_NEW_LISTENER );
4080
- ASSERT_EQ (listener , nextfd ++ );
4090
+ ASSERT_EQ (listener , nextfd );
4091
+ nextfd = get_next_fd (nextfd );
4081
4092
4082
4093
pid = fork ();
4083
4094
ASSERT_GE (pid , 0 );
@@ -4132,14 +4143,16 @@ TEST(user_notification_addfd)
4132
4143
4133
4144
/* Verify we can set an arbitrary remote fd */
4134
4145
fd = ioctl (listener , SECCOMP_IOCTL_NOTIF_ADDFD , & addfd );
4135
- EXPECT_EQ (fd , nextfd ++ );
4146
+ EXPECT_EQ (fd , nextfd );
4147
+ nextfd = get_next_fd (nextfd );
4136
4148
EXPECT_EQ (filecmp (getpid (), pid , memfd , fd ), 0 );
4137
4149
4138
4150
/* Verify we can set an arbitrary remote fd with large size */
4139
4151
memset (& big , 0x0 , sizeof (big ));
4140
4152
big .addfd = addfd ;
4141
4153
fd = ioctl (listener , SECCOMP_IOCTL_NOTIF_ADDFD_BIG , & big );
4142
- EXPECT_EQ (fd , nextfd ++ );
4154
+ EXPECT_EQ (fd , nextfd );
4155
+ nextfd = get_next_fd (nextfd );
4143
4156
4144
4157
/* Verify we can set a specific remote fd */
4145
4158
addfd .newfd = 42 ;
@@ -4177,7 +4190,8 @@ TEST(user_notification_addfd)
4177
4190
* Child has earlier "low" fds and now 42, so we expect the next
4178
4191
* lowest available fd to be assigned here.
4179
4192
*/
4180
- EXPECT_EQ (fd , nextfd ++ );
4193
+ EXPECT_EQ (fd , nextfd );
4194
+ nextfd = get_next_fd (nextfd );
4181
4195
ASSERT_EQ (filecmp (getpid (), pid , memfd , fd ), 0 );
4182
4196
4183
4197
/*
0 commit comments