// autogenerated by syzkaller (http://github.com/google/syzkaller)

#ifndef __NR_userfaultfd
#define __NR_userfaultfd 323
#endif

#define _GNU_SOURCE

#include <pthread.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>

long r[13];
void* thr(void* arg)
{
  switch ((long)arg) {
  case 0:
    r[0] = syscall(__NR_mmap, 0x20000000ul, 0x5d000ul, 0x3ul, 0x32ul,
                   0xfffffffffffffffful, 0x0ul);
    break;
  case 1:
    r[1] = syscall(__NR_userfaultfd, 0x0ul);
    break;
  case 2:
    *(uint64_t*)0x200590fe = (uint64_t)0xaa;
    *(uint64_t*)0x20059106 = (uint64_t)0x52;
    *(uint64_t*)0x2005910e = (uint64_t)0x0;
    r[5] = syscall(__NR_ioctl, r[1], 0xc018aa3ful, 0x200590feul);
    break;
  case 3:
    *(uint64_t*)0x20034fe0 = (uint64_t)0x20002000;
    *(uint64_t*)0x20034fe8 = (uint64_t)0x12000;
    *(uint64_t*)0x20034ff0 = (uint64_t)0x1;
    *(uint64_t*)0x20034ff8 = (uint64_t)0x0;
    r[10] = syscall(__NR_ioctl, r[1], 0xc020aa00ul, 0x20034fe0ul);
    break;
  case 4:
    r[11] = syscall(__NR_clone, 0x400ul, 0x20013000ul, 0x20059ffcul,
                    0x20058ffcul, 0x20058ffdul);
    break;
  case 5:
    r[12] = syscall(__NR_close, r[1]);
    break;
  }
  return 0;
}

void loop()
{
  long i;
  pthread_t th[12];

  memset(r, -1, sizeof(r));
  for (i = 0; i < 6; i++) {
    pthread_create(&th[i], 0, thr, (void*)i);
    usleep(rand() % 10000);
  }
  usleep(rand() % 100000);
}

int main()
{
  loop();
  return 0;
}
