1*8a272653SPeter Holm#!/bin/sh 2*8a272653SPeter Holm 3*8a272653SPeter Holm# $ pgrep syzkaller21 | xargs ps -lHp 4*8a272653SPeter Holm# UID PID PPID CPU PRI NI VSZ RSS MWCHAN STAT TT TIME COMMAND 5*8a272653SPeter Holm# 0 3891 1 0 20 0 29828 2852 - T 0 0:00,14 ./syzkaller21 6*8a272653SPeter Holm# 0 3891 1 0 52 0 29828 2852 ufs T 0 0:00,00 ./syzkaller21 7*8a272653SPeter Holm# 0 3891 1 0 52 0 29828 2852 ufs T 0 0:00,00 ./syzkaller21 8*8a272653SPeter Holm# $ pgrep syzkaller21 | xargs procstat -k 9*8a272653SPeter Holm# PID TID COMM TDNAME KSTACK 10*8a272653SPeter Holm# 3891 100250 syzkaller21 - mi_switch thread_suspend_switch thread_single exit1 sys_sys_exit amd64_syscall fast_syscall_common 11*8a272653SPeter Holm# 3891 100777 syzkaller21 - mi_switch sleepq_switch sleeplk lockmgr_xlock_hard ffs_lock VOP_LOCK1_APV _vn_lock vget_finish vfs_hash_get ffs_vgetf softdep_sync_buf ffs_syncvnode ffs_fsync VOP_FSYNC_APV kern_fsync amd64_syscall fast_syscall_common 12*8a272653SPeter Holm# 3891 100778 syzkaller21 - mi_switch sleepq_switch sleeplk lockmgr_slock_hard ffs_lock VOP_LOCK1_APV _vn_lock vget_finish cache_lookup vfs_cache_lookup VOP_LOOKUP_APV lookup namei kern_chdir amd64_syscall fast_syscall_common 13*8a272653SPeter Holm# $ uname -a 14*8a272653SPeter Holm# FreeBSD t2.osted.lan 13.0-CURRENT FreeBSD 13.0-CURRENT #5 r363786M: Tue Aug 4 16:51:52 CEST 2020 15*8a272653SPeter Holm# pho@t2.osted.lan:/usr/src/sys/amd64/compile/PHO amd64 16*8a272653SPeter Holm# $ 17*8a272653SPeter Holm 18*8a272653SPeter Holm[ `uname -p` != "amd64" ] && exit 0 19*8a272653SPeter Holm 20*8a272653SPeter Holm. ../default.cfg 21*8a272653SPeter Holmcat > /tmp/syzkaller21.c <<EOF 22*8a272653SPeter Holm// autogenerated by syzkaller (https://github.com/google/syzkaller) 23*8a272653SPeter Holm 24*8a272653SPeter Holm#define _GNU_SOURCE 25*8a272653SPeter Holm 26*8a272653SPeter Holm#include <sys/types.h> 27*8a272653SPeter Holm 28*8a272653SPeter Holm#include <dirent.h> 29*8a272653SPeter Holm#include <errno.h> 30*8a272653SPeter Holm#include <pthread.h> 31*8a272653SPeter Holm#include <pwd.h> 32*8a272653SPeter Holm#include <setjmp.h> 33*8a272653SPeter Holm#include <signal.h> 34*8a272653SPeter Holm#include <stdarg.h> 35*8a272653SPeter Holm#include <stdbool.h> 36*8a272653SPeter Holm#include <stdint.h> 37*8a272653SPeter Holm#include <stdio.h> 38*8a272653SPeter Holm#include <stdlib.h> 39*8a272653SPeter Holm#include <string.h> 40*8a272653SPeter Holm#include <sys/endian.h> 41*8a272653SPeter Holm#include <sys/stat.h> 42*8a272653SPeter Holm#include <sys/syscall.h> 43*8a272653SPeter Holm#include <sys/wait.h> 44*8a272653SPeter Holm#include <time.h> 45*8a272653SPeter Holm#include <unistd.h> 46*8a272653SPeter Holm 47*8a272653SPeter Holmstatic __thread int skip_segv; 48*8a272653SPeter Holmstatic __thread jmp_buf segv_env; 49*8a272653SPeter Holm 50*8a272653SPeter Holmstatic void segv_handler(int sig, siginfo_t* info, void* ctx __unused) 51*8a272653SPeter Holm{ 52*8a272653SPeter Holm uintptr_t addr = (uintptr_t)info->si_addr; 53*8a272653SPeter Holm const uintptr_t prog_start = 1 << 20; 54*8a272653SPeter Holm const uintptr_t prog_end = 100 << 20; 55*8a272653SPeter Holm if (__atomic_load_n(&skip_segv, __ATOMIC_RELAXED) && 56*8a272653SPeter Holm (addr < prog_start || addr > prog_end)) { 57*8a272653SPeter Holm _longjmp(segv_env, 1); 58*8a272653SPeter Holm } 59*8a272653SPeter Holm exit(sig); 60*8a272653SPeter Holm} 61*8a272653SPeter Holm 62*8a272653SPeter Holmstatic void install_segv_handler(void) 63*8a272653SPeter Holm{ 64*8a272653SPeter Holm struct sigaction sa; 65*8a272653SPeter Holm memset(&sa, 0, sizeof(sa)); 66*8a272653SPeter Holm sa.sa_sigaction = segv_handler; 67*8a272653SPeter Holm sa.sa_flags = SA_NODEFER | SA_SIGINFO; 68*8a272653SPeter Holm sigaction(SIGSEGV, &sa, NULL); 69*8a272653SPeter Holm sigaction(SIGBUS, &sa, NULL); 70*8a272653SPeter Holm} 71*8a272653SPeter Holm 72*8a272653SPeter Holm#define NONFAILING(...) \ 73*8a272653SPeter Holm { \ 74*8a272653SPeter Holm __atomic_fetch_add(&skip_segv, 1, __ATOMIC_SEQ_CST); \ 75*8a272653SPeter Holm if (_setjmp(segv_env) == 0) { \ 76*8a272653SPeter Holm __VA_ARGS__; \ 77*8a272653SPeter Holm } \ 78*8a272653SPeter Holm __atomic_fetch_sub(&skip_segv, 1, __ATOMIC_SEQ_CST); \ 79*8a272653SPeter Holm } 80*8a272653SPeter Holm 81*8a272653SPeter Holmstatic void kill_and_wait(int pid, int* status) 82*8a272653SPeter Holm{ 83*8a272653SPeter Holm kill(pid, SIGKILL); 84*8a272653SPeter Holm while (waitpid(-1, status, 0) != pid) { 85*8a272653SPeter Holm } 86*8a272653SPeter Holm} 87*8a272653SPeter Holm 88*8a272653SPeter Holmstatic void sleep_ms(uint64_t ms) 89*8a272653SPeter Holm{ 90*8a272653SPeter Holm usleep(ms * 1000); 91*8a272653SPeter Holm} 92*8a272653SPeter Holm 93*8a272653SPeter Holmstatic uint64_t current_time_ms(void) 94*8a272653SPeter Holm{ 95*8a272653SPeter Holm struct timespec ts; 96*8a272653SPeter Holm if (clock_gettime(CLOCK_MONOTONIC, &ts)) 97*8a272653SPeter Holm exit(1); 98*8a272653SPeter Holm return (uint64_t)ts.tv_sec * 1000 + (uint64_t)ts.tv_nsec / 1000000; 99*8a272653SPeter Holm} 100*8a272653SPeter Holm 101*8a272653SPeter Holmstatic void use_temporary_dir(void) 102*8a272653SPeter Holm{ 103*8a272653SPeter Holm char tmpdir_template[] = "./syzkaller.XXXXXX"; 104*8a272653SPeter Holm char* tmpdir = mkdtemp(tmpdir_template); 105*8a272653SPeter Holm if (!tmpdir) 106*8a272653SPeter Holm exit(1); 107*8a272653SPeter Holm if (chmod(tmpdir, 0777)) 108*8a272653SPeter Holm exit(1); 109*8a272653SPeter Holm if (chdir(tmpdir)) 110*8a272653SPeter Holm exit(1); 111*8a272653SPeter Holm} 112*8a272653SPeter Holm 113*8a272653SPeter Holmstatic void remove_dir(const char* dir) 114*8a272653SPeter Holm{ 115*8a272653SPeter Holm DIR* dp; 116*8a272653SPeter Holm struct dirent* ep; 117*8a272653SPeter Holm dp = opendir(dir); 118*8a272653SPeter Holm if (dp == NULL) 119*8a272653SPeter Holm exit(1); 120*8a272653SPeter Holm while ((ep = readdir(dp))) { 121*8a272653SPeter Holm if (strcmp(ep->d_name, ".") == 0 || strcmp(ep->d_name, "..") == 0) 122*8a272653SPeter Holm continue; 123*8a272653SPeter Holm char filename[FILENAME_MAX]; 124*8a272653SPeter Holm snprintf(filename, sizeof(filename), "%s/%s", dir, ep->d_name); 125*8a272653SPeter Holm struct stat st; 126*8a272653SPeter Holm if (lstat(filename, &st)) 127*8a272653SPeter Holm exit(1); 128*8a272653SPeter Holm if (S_ISDIR(st.st_mode)) { 129*8a272653SPeter Holm remove_dir(filename); 130*8a272653SPeter Holm continue; 131*8a272653SPeter Holm } 132*8a272653SPeter Holm if (unlink(filename)) 133*8a272653SPeter Holm exit(1); 134*8a272653SPeter Holm } 135*8a272653SPeter Holm closedir(dp); 136*8a272653SPeter Holm if (rmdir(dir)) 137*8a272653SPeter Holm exit(1); 138*8a272653SPeter Holm} 139*8a272653SPeter Holm 140*8a272653SPeter Holmstatic void thread_start(void* (*fn)(void*), void* arg) 141*8a272653SPeter Holm{ 142*8a272653SPeter Holm pthread_t th; 143*8a272653SPeter Holm pthread_attr_t attr; 144*8a272653SPeter Holm pthread_attr_init(&attr); 145*8a272653SPeter Holm pthread_attr_setstacksize(&attr, 128 << 10); 146*8a272653SPeter Holm int i; 147*8a272653SPeter Holm for (i = 0; i < 100; i++) { 148*8a272653SPeter Holm if (pthread_create(&th, &attr, fn, arg) == 0) { 149*8a272653SPeter Holm pthread_attr_destroy(&attr); 150*8a272653SPeter Holm return; 151*8a272653SPeter Holm } 152*8a272653SPeter Holm if (errno == EAGAIN) { 153*8a272653SPeter Holm usleep(50); 154*8a272653SPeter Holm continue; 155*8a272653SPeter Holm } 156*8a272653SPeter Holm break; 157*8a272653SPeter Holm } 158*8a272653SPeter Holm exit(1); 159*8a272653SPeter Holm} 160*8a272653SPeter Holm 161*8a272653SPeter Holmtypedef struct { 162*8a272653SPeter Holm pthread_mutex_t mu; 163*8a272653SPeter Holm pthread_cond_t cv; 164*8a272653SPeter Holm int state; 165*8a272653SPeter Holm} event_t; 166*8a272653SPeter Holm 167*8a272653SPeter Holmstatic void event_init(event_t* ev) 168*8a272653SPeter Holm{ 169*8a272653SPeter Holm if (pthread_mutex_init(&ev->mu, 0)) 170*8a272653SPeter Holm exit(1); 171*8a272653SPeter Holm if (pthread_cond_init(&ev->cv, 0)) 172*8a272653SPeter Holm exit(1); 173*8a272653SPeter Holm ev->state = 0; 174*8a272653SPeter Holm} 175*8a272653SPeter Holm 176*8a272653SPeter Holmstatic void event_reset(event_t* ev) 177*8a272653SPeter Holm{ 178*8a272653SPeter Holm ev->state = 0; 179*8a272653SPeter Holm} 180*8a272653SPeter Holm 181*8a272653SPeter Holmstatic void event_set(event_t* ev) 182*8a272653SPeter Holm{ 183*8a272653SPeter Holm pthread_mutex_lock(&ev->mu); 184*8a272653SPeter Holm if (ev->state) 185*8a272653SPeter Holm exit(1); 186*8a272653SPeter Holm ev->state = 1; 187*8a272653SPeter Holm pthread_mutex_unlock(&ev->mu); 188*8a272653SPeter Holm pthread_cond_broadcast(&ev->cv); 189*8a272653SPeter Holm} 190*8a272653SPeter Holm 191*8a272653SPeter Holmstatic void event_wait(event_t* ev) 192*8a272653SPeter Holm{ 193*8a272653SPeter Holm pthread_mutex_lock(&ev->mu); 194*8a272653SPeter Holm while (!ev->state) 195*8a272653SPeter Holm pthread_cond_wait(&ev->cv, &ev->mu); 196*8a272653SPeter Holm pthread_mutex_unlock(&ev->mu); 197*8a272653SPeter Holm} 198*8a272653SPeter Holm 199*8a272653SPeter Holmstatic int event_isset(event_t* ev) 200*8a272653SPeter Holm{ 201*8a272653SPeter Holm pthread_mutex_lock(&ev->mu); 202*8a272653SPeter Holm int res = ev->state; 203*8a272653SPeter Holm pthread_mutex_unlock(&ev->mu); 204*8a272653SPeter Holm return res; 205*8a272653SPeter Holm} 206*8a272653SPeter Holm 207*8a272653SPeter Holmstatic int event_timedwait(event_t* ev, uint64_t timeout) 208*8a272653SPeter Holm{ 209*8a272653SPeter Holm uint64_t start = current_time_ms(); 210*8a272653SPeter Holm uint64_t now = start; 211*8a272653SPeter Holm pthread_mutex_lock(&ev->mu); 212*8a272653SPeter Holm for (;;) { 213*8a272653SPeter Holm if (ev->state) 214*8a272653SPeter Holm break; 215*8a272653SPeter Holm uint64_t remain = timeout - (now - start); 216*8a272653SPeter Holm struct timespec ts; 217*8a272653SPeter Holm ts.tv_sec = remain / 1000; 218*8a272653SPeter Holm ts.tv_nsec = (remain % 1000) * 1000 * 1000; 219*8a272653SPeter Holm pthread_cond_timedwait(&ev->cv, &ev->mu, &ts); 220*8a272653SPeter Holm now = current_time_ms(); 221*8a272653SPeter Holm if (now - start > timeout) 222*8a272653SPeter Holm break; 223*8a272653SPeter Holm } 224*8a272653SPeter Holm int res = ev->state; 225*8a272653SPeter Holm pthread_mutex_unlock(&ev->mu); 226*8a272653SPeter Holm return res; 227*8a272653SPeter Holm} 228*8a272653SPeter Holm 229*8a272653SPeter Holmstruct thread_t { 230*8a272653SPeter Holm int created, call; 231*8a272653SPeter Holm event_t ready, done; 232*8a272653SPeter Holm}; 233*8a272653SPeter Holm 234*8a272653SPeter Holmstatic struct thread_t threads[16]; 235*8a272653SPeter Holmstatic void execute_call(int call); 236*8a272653SPeter Holmstatic int running; 237*8a272653SPeter Holm 238*8a272653SPeter Holmstatic void* thr(void* arg) 239*8a272653SPeter Holm{ 240*8a272653SPeter Holm struct thread_t* th = (struct thread_t*)arg; 241*8a272653SPeter Holm for (;;) { 242*8a272653SPeter Holm event_wait(&th->ready); 243*8a272653SPeter Holm event_reset(&th->ready); 244*8a272653SPeter Holm execute_call(th->call); 245*8a272653SPeter Holm __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED); 246*8a272653SPeter Holm event_set(&th->done); 247*8a272653SPeter Holm } 248*8a272653SPeter Holm return 0; 249*8a272653SPeter Holm} 250*8a272653SPeter Holm 251*8a272653SPeter Holmstatic void execute_one(void) 252*8a272653SPeter Holm{ 253*8a272653SPeter Holm int i, call, thread; 254*8a272653SPeter Holm int collide = 0; 255*8a272653SPeter Holmagain: 256*8a272653SPeter Holm for (call = 0; call < 9; call++) { 257*8a272653SPeter Holm for (thread = 0; thread < (int)(sizeof(threads) / sizeof(threads[0])); 258*8a272653SPeter Holm thread++) { 259*8a272653SPeter Holm struct thread_t* th = &threads[thread]; 260*8a272653SPeter Holm if (!th->created) { 261*8a272653SPeter Holm th->created = 1; 262*8a272653SPeter Holm event_init(&th->ready); 263*8a272653SPeter Holm event_init(&th->done); 264*8a272653SPeter Holm event_set(&th->done); 265*8a272653SPeter Holm thread_start(thr, th); 266*8a272653SPeter Holm } 267*8a272653SPeter Holm if (!event_isset(&th->done)) 268*8a272653SPeter Holm continue; 269*8a272653SPeter Holm event_reset(&th->done); 270*8a272653SPeter Holm th->call = call; 271*8a272653SPeter Holm __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED); 272*8a272653SPeter Holm event_set(&th->ready); 273*8a272653SPeter Holm if (collide && (call % 2) == 0) 274*8a272653SPeter Holm break; 275*8a272653SPeter Holm event_timedwait(&th->done, 45); 276*8a272653SPeter Holm break; 277*8a272653SPeter Holm } 278*8a272653SPeter Holm } 279*8a272653SPeter Holm for (i = 0; i < 100 && __atomic_load_n(&running, __ATOMIC_RELAXED); i++) 280*8a272653SPeter Holm sleep_ms(1); 281*8a272653SPeter Holm if (!collide) { 282*8a272653SPeter Holm collide = 1; 283*8a272653SPeter Holm goto again; 284*8a272653SPeter Holm } 285*8a272653SPeter Holm} 286*8a272653SPeter Holm 287*8a272653SPeter Holmstatic void execute_one(void); 288*8a272653SPeter Holm 289*8a272653SPeter Holm#define WAIT_FLAGS 0 290*8a272653SPeter Holm 291*8a272653SPeter Holmstatic void loop(void) 292*8a272653SPeter Holm{ 293*8a272653SPeter Holm int iter; 294*8a272653SPeter Holm for (iter = 0;; iter++) { 295*8a272653SPeter Holm char cwdbuf[32]; 296*8a272653SPeter Holm sprintf(cwdbuf, "./%d", iter); 297*8a272653SPeter Holm if (mkdir(cwdbuf, 0777)) 298*8a272653SPeter Holm exit(1); 299*8a272653SPeter Holm int pid = fork(); 300*8a272653SPeter Holm if (pid < 0) 301*8a272653SPeter Holm exit(1); 302*8a272653SPeter Holm if (pid == 0) { 303*8a272653SPeter Holm if (chdir(cwdbuf)) 304*8a272653SPeter Holm exit(1); 305*8a272653SPeter Holm execute_one(); 306*8a272653SPeter Holm exit(0); 307*8a272653SPeter Holm } 308*8a272653SPeter Holm int status = 0; 309*8a272653SPeter Holm uint64_t start = current_time_ms(); 310*8a272653SPeter Holm for (;;) { 311*8a272653SPeter Holm if (waitpid(-1, &status, WNOHANG | WAIT_FLAGS) == pid) 312*8a272653SPeter Holm break; 313*8a272653SPeter Holm sleep_ms(1); 314*8a272653SPeter Holm if (current_time_ms() - start < 5 * 1000) 315*8a272653SPeter Holm continue; 316*8a272653SPeter Holm kill_and_wait(pid, &status); 317*8a272653SPeter Holm break; 318*8a272653SPeter Holm } 319*8a272653SPeter Holm remove_dir(cwdbuf); 320*8a272653SPeter Holm } 321*8a272653SPeter Holm} 322*8a272653SPeter Holm 323*8a272653SPeter Holmuint64_t r[4] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 324*8a272653SPeter Holm 0xffffffffffffffff}; 325*8a272653SPeter Holm 326*8a272653SPeter Holmvoid execute_call(int call) 327*8a272653SPeter Holm{ 328*8a272653SPeter Holm intptr_t res = 0; 329*8a272653SPeter Holm switch (call) { 330*8a272653SPeter Holm case 0: 331*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000000, ".\000", 2)); 332*8a272653SPeter Holm res = syscall(SYS_open, 0x20000000ul, 0ul, 0ul); 333*8a272653SPeter Holm if (res != -1) 334*8a272653SPeter Holm r[0] = res; 335*8a272653SPeter Holm break; 336*8a272653SPeter Holm case 1: 337*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000040, "./file0\000", 8)); 338*8a272653SPeter Holm syscall(SYS_mkdirat, r[0], 0x20000040ul, 0ul); 339*8a272653SPeter Holm break; 340*8a272653SPeter Holm case 2: 341*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000000, ".\000", 2)); 342*8a272653SPeter Holm res = syscall(SYS_open, 0x20000000ul, 0ul, 0ul); 343*8a272653SPeter Holm if (res != -1) 344*8a272653SPeter Holm r[1] = res; 345*8a272653SPeter Holm break; 346*8a272653SPeter Holm case 3: 347*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000040, "./file1\000", 8)); 348*8a272653SPeter Holm syscall(SYS_mkdirat, r[1], 0x20000040ul, 0ul); 349*8a272653SPeter Holm break; 350*8a272653SPeter Holm case 4: 351*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000000, ".\000", 2)); 352*8a272653SPeter Holm res = syscall(SYS_open, 0x20000000ul, 0ul, 0ul); 353*8a272653SPeter Holm if (res != -1) 354*8a272653SPeter Holm r[2] = res; 355*8a272653SPeter Holm break; 356*8a272653SPeter Holm case 5: 357*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000080, "./file1\000", 8)); 358*8a272653SPeter Holm NONFAILING(memcpy((void*)0x200000c0, "./file0/file0\000", 14)); 359*8a272653SPeter Holm syscall(SYS_renameat, r[1], 0x20000080ul, r[2], 0x200000c0ul); 360*8a272653SPeter Holm break; 361*8a272653SPeter Holm case 6: 362*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000100, "./file0/file0\000", 14)); 363*8a272653SPeter Holm res = syscall(SYS_open, 0x20000100ul, 0ul, 0ul); 364*8a272653SPeter Holm if (res != -1) 365*8a272653SPeter Holm r[3] = res; 366*8a272653SPeter Holm break; 367*8a272653SPeter Holm case 7: 368*8a272653SPeter Holm syscall(SYS_fsync, r[3]); 369*8a272653SPeter Holm break; 370*8a272653SPeter Holm case 8: 371*8a272653SPeter Holm NONFAILING(memcpy((void*)0x20000140, "./file0/file0\000", 14)); 372*8a272653SPeter Holm syscall(SYS_chdir, 0x20000140ul); 373*8a272653SPeter Holm break; 374*8a272653SPeter Holm } 375*8a272653SPeter Holm} 376*8a272653SPeter Holmint main(void) 377*8a272653SPeter Holm{ 378*8a272653SPeter Holm syscall(SYS_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x1012ul, -1, 0ul); 379*8a272653SPeter Holm install_segv_handler(); 380*8a272653SPeter Holm use_temporary_dir(); 381*8a272653SPeter Holm loop(); 382*8a272653SPeter Holm return 0; 383*8a272653SPeter Holm} 384*8a272653SPeter HolmEOF 385*8a272653SPeter Holmmycc -o /tmp/syzkaller21 -Wall -Wextra -O2 /tmp/syzkaller21.c -lpthread || 386*8a272653SPeter Holm exit 1 387*8a272653SPeter Holm 388*8a272653SPeter Holm(cd ../testcases/swap; ./swap -t 1m -i 20 -h > /dev/null 2>&1) & 389*8a272653SPeter Holm(cd /tmp; ./syzkaller21) & 390*8a272653SPeter Holmsleep 60 391*8a272653SPeter Holmwhile pkill swap; do sleep .2; done 392*8a272653SPeter Holmpkill -9 syzkaller21 393*8a272653SPeter Holmsleep .5 394*8a272653SPeter Holmif pgrep -q syzkaller21; then 395*8a272653SPeter Holm pgrep syzkaller21 | xargs ps -lHp 396*8a272653SPeter Holm pgrep syzkaller21 | xargs procstat -k 397*8a272653SPeter Holm exit 1 398*8a272653SPeter Holmfi 399*8a272653SPeter Holmwait 400*8a272653SPeter Holm 401*8a272653SPeter Holmrm -rf /tmp/syzkaller21.* 402*8a272653SPeter Holmrm -f /tmp/syzkaller21 403*8a272653SPeter Holmexit 0 404