// WARNING in kmalloc_slab
// https://syzkaller.appspot.com/bug?id=3d555b5a8aee84e9418c5908875bdf37fc5bb667
// status:fixed
// autogenerated by syzkaller (http://github.com/google/syzkaller)

#define _GNU_SOURCE

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

#ifndef __NR_sendto
#define __NR_sendto 369
#endif
#ifndef __NR_mmap
#define __NR_mmap 90
#endif
#ifndef __NR_socket
#define __NR_socket 359
#endif
#ifndef __NR_setsockopt
#define __NR_setsockopt 366
#endif
#undef __NR_mmap
#define __NR_mmap __NR_mmap2

long r[40];
void loop()
{
  memset(r, -1, sizeof(r));
  r[0] = syscall(__NR_mmap, 0x20000000ul, 0xfff000ul, 0x3ul, 0x32ul,
                 0xfffffffffffffffful, 0x0ul);
  r[2] = syscall(__NR_socket, 0xaul, 0x802ul, 0x0ul);
  memcpy((void*)0x20f6e000, "\x00\x00\x00\x00\x00\x00\x0f\xa6", 8);
  r[4] = syscall(__NR_setsockopt, r[2], 0x29ul, 0x3bul, 0x20f6e000ul,
                 0x8ul);
  *(uint64_t*)0x2088c000 = (uint64_t)0x0;
  *(uint64_t*)0x2088c008 = (uint64_t)0x100000000000000;
  *(uint32_t*)0x2088c010 = (uint32_t)0x800;
  *(uint8_t*)0x2088c014 = (uint8_t)0x0;
  *(uint8_t*)0x2088c015 = (uint8_t)0x2000ff;
  *(uint16_t*)0x2088c016 = (uint16_t)0x1;
  *(uint16_t*)0x2088c018 = (uint16_t)0x0;
  *(uint16_t*)0x2088c01a = (uint16_t)0x0;
  *(uint32_t*)0x2088c01c = (uint32_t)0x0;
  r[14] = syscall(__NR_setsockopt, r[2], 0x29ul, 0x20ul, 0x2088c000ul,
                  0x20ul);
  *(uint32_t*)0x2089b000 = (uint32_t)0xffffffffffffffff;
  r[16] = syscall(__NR_setsockopt, r[2], 0x29ul, 0x21ul, 0x2089b000ul,
                  0x4ul);
  memcpy((void*)0x20e72000, "\x65\x01\xd9\x03\x42\x7b\xa1\x04\x7c\x6d"
                            "\xb3\x76\xef\xaa\x5d\x50",
         16);
  r[18] = syscall(__NR_setsockopt, r[2], 0x29ul, 0x37ul, 0x20e72000ul,
                  0x10ul);
  *(uint16_t*)0x20e0afe4 = (uint16_t)0xa;
  *(uint16_t*)0x20e0afe6 = (uint16_t)0x214e;
  *(uint32_t*)0x20e0afe8 = (uint32_t)0x800;
  *(uint8_t*)0x20e0afec = (uint8_t)0xfe;
  *(uint8_t*)0x20e0afed = (uint8_t)0x80;
  *(uint8_t*)0x20e0afee = (uint8_t)0x0;
  *(uint8_t*)0x20e0afef = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff0 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff1 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff2 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff3 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff4 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff5 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff6 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff7 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff8 = (uint8_t)0x0;
  *(uint8_t*)0x20e0aff9 = (uint8_t)0x0;
  *(uint8_t*)0x20e0affa = (uint8_t)0x0;
  *(uint8_t*)0x20e0affb = (uint8_t)0xaa;
  *(uint32_t*)0x20e0affc = (uint32_t)0x0;
  r[39] = syscall(__NR_sendto, r[2], 0x2052bfccul, 0x0ul, 0x0ul,
                  0x20e0afe4ul, 0x1cul);
}

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