Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'linux-kselftest-5.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest

Pull kselftest fixes from Shuah Khan:
"Fixes to rtc, seccomp and other tests"

* tag 'linux-kselftest-5.0-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/shuah/linux-kselftest:
selftests/seccomp: Abort without user notification support
selftests: gpio-mockup-chardev: Check asprintf() for error
selftests: seccomp: use LDLIBS instead of LDFLAGS
selftests/vm/gup_benchmark.c: match gup struct to kernel
tools/testing/selftests/x86/unwind_vdso.c: Remove duplicate header
x86/mpx/selftests: fix spelling mistake "succeded" -> "succeeded"
selftests: rtc: rtctest: add alarm test on minute boundary
selftests: rtc: rtctest: fix alarm tests

+118 -16
+6 -3
tools/testing/selftests/gpio/gpio-mockup-chardev.c
··· 37 37 struct libmnt_table *tb; 38 38 struct libmnt_iter *itr = NULL; 39 39 struct libmnt_fs *fs; 40 - int found = 0; 40 + int found = 0, ret; 41 41 42 42 cxt = mnt_new_context(); 43 43 if (!cxt) ··· 58 58 break; 59 59 } 60 60 } 61 - if (found) 62 - asprintf(path, "%s/gpio", mnt_fs_get_target(fs)); 61 + if (found) { 62 + ret = asprintf(path, "%s/gpio", mnt_fs_get_target(fs)); 63 + if (ret < 0) 64 + err(EXIT_FAILURE, "failed to format string"); 65 + } 63 66 64 67 mnt_free_iter(itr); 65 68 mnt_free_context(cxt);
+104 -5
tools/testing/selftests/rtc/rtctest.c
··· 145 145 146 146 rc = select(self->fd + 1, &readfds, NULL, NULL, &tv); 147 147 ASSERT_NE(-1, rc); 148 - EXPECT_NE(0, rc); 148 + ASSERT_NE(0, rc); 149 149 150 150 /* Disable alarm interrupts */ 151 151 rc = ioctl(self->fd, RTC_AIE_OFF, 0); 152 152 ASSERT_NE(-1, rc); 153 - 154 - if (rc == 0) 155 - return; 156 153 157 154 rc = read(self->fd, &data, sizeof(unsigned long)); 158 155 ASSERT_NE(-1, rc); ··· 199 202 200 203 rc = select(self->fd + 1, &readfds, NULL, NULL, &tv); 201 204 ASSERT_NE(-1, rc); 202 - EXPECT_NE(0, rc); 205 + ASSERT_NE(0, rc); 206 + 207 + rc = read(self->fd, &data, sizeof(unsigned long)); 208 + ASSERT_NE(-1, rc); 209 + 210 + rc = ioctl(self->fd, RTC_RD_TIME, &tm); 211 + ASSERT_NE(-1, rc); 212 + 213 + new = timegm((struct tm *)&tm); 214 + ASSERT_EQ(new, secs); 215 + } 216 + 217 + TEST_F(rtc, alarm_alm_set_minute) { 218 + struct timeval tv = { .tv_sec = 62 }; 219 + unsigned long data; 220 + struct rtc_time tm; 221 + fd_set readfds; 222 + time_t secs, new; 223 + int rc; 224 + 225 + rc = ioctl(self->fd, RTC_RD_TIME, &tm); 226 + ASSERT_NE(-1, rc); 227 + 228 + secs = timegm((struct tm *)&tm) + 60 - tm.tm_sec; 229 + gmtime_r(&secs, (struct tm *)&tm); 230 + 231 + rc = ioctl(self->fd, RTC_ALM_SET, &tm); 232 + if (rc == -1) { 233 + ASSERT_EQ(EINVAL, errno); 234 + TH_LOG("skip alarms are not supported."); 235 + return; 236 + } 237 + 238 + rc = ioctl(self->fd, RTC_ALM_READ, &tm); 239 + ASSERT_NE(-1, rc); 240 + 241 + TH_LOG("Alarm time now set to %02d:%02d:%02d.", 242 + tm.tm_hour, tm.tm_min, tm.tm_sec); 243 + 244 + /* Enable alarm interrupts */ 245 + rc = ioctl(self->fd, RTC_AIE_ON, 0); 246 + ASSERT_NE(-1, rc); 247 + 248 + FD_ZERO(&readfds); 249 + FD_SET(self->fd, &readfds); 250 + 251 + rc = select(self->fd + 1, &readfds, NULL, NULL, &tv); 252 + ASSERT_NE(-1, rc); 253 + ASSERT_NE(0, rc); 254 + 255 + /* Disable alarm interrupts */ 256 + rc = ioctl(self->fd, RTC_AIE_OFF, 0); 257 + ASSERT_NE(-1, rc); 258 + 259 + rc = read(self->fd, &data, sizeof(unsigned long)); 260 + ASSERT_NE(-1, rc); 261 + TH_LOG("data: %lx", data); 262 + 263 + rc = ioctl(self->fd, RTC_RD_TIME, &tm); 264 + ASSERT_NE(-1, rc); 265 + 266 + new = timegm((struct tm *)&tm); 267 + ASSERT_EQ(new, secs); 268 + } 269 + 270 + TEST_F(rtc, alarm_wkalm_set_minute) { 271 + struct timeval tv = { .tv_sec = 62 }; 272 + struct rtc_wkalrm alarm = { 0 }; 273 + struct rtc_time tm; 274 + unsigned long data; 275 + fd_set readfds; 276 + time_t secs, new; 277 + int rc; 278 + 279 + rc = ioctl(self->fd, RTC_RD_TIME, &alarm.time); 280 + ASSERT_NE(-1, rc); 281 + 282 + secs = timegm((struct tm *)&alarm.time) + 60 - alarm.time.tm_sec; 283 + gmtime_r(&secs, (struct tm *)&alarm.time); 284 + 285 + alarm.enabled = 1; 286 + 287 + rc = ioctl(self->fd, RTC_WKALM_SET, &alarm); 288 + if (rc == -1) { 289 + ASSERT_EQ(EINVAL, errno); 290 + TH_LOG("skip alarms are not supported."); 291 + return; 292 + } 293 + 294 + rc = ioctl(self->fd, RTC_WKALM_RD, &alarm); 295 + ASSERT_NE(-1, rc); 296 + 297 + TH_LOG("Alarm time now set to %02d/%02d/%02d %02d:%02d:%02d.", 298 + alarm.time.tm_mday, alarm.time.tm_mon + 1, 299 + alarm.time.tm_year + 1900, alarm.time.tm_hour, 300 + alarm.time.tm_min, alarm.time.tm_sec); 301 + 302 + FD_ZERO(&readfds); 303 + FD_SET(self->fd, &readfds); 304 + 305 + rc = select(self->fd + 1, &readfds, NULL, NULL, &tv); 306 + ASSERT_NE(-1, rc); 307 + ASSERT_NE(0, rc); 203 308 204 309 rc = read(self->fd, &data, sizeof(unsigned long)); 205 310 ASSERT_NE(-1, rc);
+1 -1
tools/testing/selftests/seccomp/Makefile
··· 9 9 CFLAGS += -Wl,-no-as-needed -Wall 10 10 11 11 seccomp_bpf: seccomp_bpf.c ../kselftest_harness.h 12 - $(CC) $(CFLAGS) $(LDFLAGS) -lpthread $< -o $@ 12 + $(CC) $(CFLAGS) $(LDFLAGS) $< -lpthread -o $@ 13 13 14 14 TEST_PROGS += $(BINARIES) 15 15 EXTRA_CLEAN := $(BINARIES)
+5 -5
tools/testing/selftests/seccomp/seccomp_bpf.c
··· 3044 3044 /* Check that the basic notification machinery works */ 3045 3045 listener = user_trap_syscall(__NR_getpid, 3046 3046 SECCOMP_FILTER_FLAG_NEW_LISTENER); 3047 - EXPECT_GE(listener, 0); 3047 + ASSERT_GE(listener, 0); 3048 3048 3049 3049 /* Installing a second listener in the chain should EBUSY */ 3050 3050 EXPECT_EQ(user_trap_syscall(__NR_getpid, ··· 3103 3103 3104 3104 listener = user_trap_syscall(__NR_getpid, 3105 3105 SECCOMP_FILTER_FLAG_NEW_LISTENER); 3106 - EXPECT_GE(listener, 0); 3106 + ASSERT_GE(listener, 0); 3107 3107 3108 3108 /* 3109 3109 * Check that nothing bad happens when we kill the task in the middle ··· 3152 3152 3153 3153 listener = user_trap_syscall(__NR_gettid, 3154 3154 SECCOMP_FILTER_FLAG_NEW_LISTENER); 3155 - EXPECT_GE(listener, 0); 3155 + ASSERT_GE(listener, 0); 3156 3156 3157 3157 pid = fork(); 3158 3158 ASSERT_GE(pid, 0); ··· 3215 3215 3216 3216 listener = user_trap_syscall(__NR_getpid, 3217 3217 SECCOMP_FILTER_FLAG_NEW_LISTENER); 3218 - EXPECT_GE(listener, 0); 3218 + ASSERT_GE(listener, 0); 3219 3219 3220 3220 /* 3221 3221 * Check that we get an ENOSYS when the listener is closed. ··· 3376 3376 { 3377 3377 struct seccomp_notif_sizes sizes; 3378 3378 3379 - EXPECT_EQ(seccomp(SECCOMP_GET_NOTIF_SIZES, 0, &sizes), 0); 3379 + ASSERT_EQ(seccomp(SECCOMP_GET_NOTIF_SIZES, 0, &sizes), 0); 3380 3380 EXPECT_EQ(sizes.seccomp_notif, sizeof(struct seccomp_notif)); 3381 3381 EXPECT_EQ(sizes.seccomp_notif_resp, sizeof(struct seccomp_notif_resp)); 3382 3382 }
+1
tools/testing/selftests/vm/gup_benchmark.c
··· 25 25 __u64 size; 26 26 __u32 nr_pages_per_call; 27 27 __u32 flags; 28 + __u64 expansion[10]; /* For future use */ 28 29 }; 29 30 30 31 int main(int argc, char **argv)
+1 -1
tools/testing/selftests/x86/mpx-mini-test.c
··· 1503 1503 exit(20); 1504 1504 } 1505 1505 if (successes != total_nr_tests) { 1506 - eprintf("ERROR: succeded fewer than number of tries (%d != %d)\n", 1506 + eprintf("ERROR: succeeded fewer than number of tries (%d != %d)\n", 1507 1507 successes, total_nr_tests); 1508 1508 exit(21); 1509 1509 }
-1
tools/testing/selftests/x86/unwind_vdso.c
··· 44 44 #include <stdbool.h> 45 45 #include <sys/ptrace.h> 46 46 #include <sys/user.h> 47 - #include <sys/ucontext.h> 48 47 #include <link.h> 49 48 #include <sys/auxv.h> 50 49 #include <dlfcn.h>