// KMSAN: uninit-value in __skb_try_recv_from_queue
// https://syzkaller.appspot.com/bug?id=9843a5813422c77d088288d7b88cb724bf8d3170
// status:fixed
// autogenerated by syzkaller (http://github.com/google/syzkaller)

#define _GNU_SOURCE
#include <endian.h>
#include <linux/futex.h>
#include <pthread.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>

#define BITMASK_LEN(type, bf_len) (type)((1ull << (bf_len)) - 1)

#define BITMASK_LEN_OFF(type, bf_off, bf_len)                                  \
  (type)(BITMASK_LEN(type, (bf_len)) << (bf_off))

#define STORE_BY_BITMASK(type, addr, val, bf_off, bf_len)                      \
  if ((bf_off) == 0 && (bf_len) == 0) {                                        \
    *(type*)(addr) = (type)(val);                                              \
  } else {                                                                     \
    type new_val = *(type*)(addr);                                             \
    new_val &= ~BITMASK_LEN_OFF(type, (bf_off), (bf_len));                     \
    new_val |= ((type)(val)&BITMASK_LEN(type, (bf_len))) << (bf_off);          \
    *(type*)(addr) = new_val;                                                  \
  }

struct csum_inet {
  uint32_t acc;
};

static void csum_inet_init(struct csum_inet* csum)
{
  csum->acc = 0;
}

static void csum_inet_update(struct csum_inet* csum, const uint8_t* data,
                             size_t length)
{
  if (length == 0)
    return;

  size_t i;
  for (i = 0; i < length - 1; i += 2)
    csum->acc += *(uint16_t*)&data[i];

  if (length & 1)
    csum->acc += (uint16_t)data[length - 1];

  while (csum->acc > 0xffff)
    csum->acc = (csum->acc & 0xffff) + (csum->acc >> 16);
}

static uint16_t csum_inet_digest(struct csum_inet* csum)
{
  return ~csum->acc;
}

struct thread_t {
  int created, running, call;
  pthread_t th;
};

static struct thread_t threads[16];
static void execute_call(int call);
static int running;

static void* thr(void* arg)
{
  struct thread_t* th = (struct thread_t*)arg;
  for (;;) {
    while (!__atomic_load_n(&th->running, __ATOMIC_ACQUIRE))
      syscall(SYS_futex, &th->running, FUTEX_WAIT, 0, 0);
    execute_call(th->call);
    __atomic_fetch_sub(&running, 1, __ATOMIC_RELAXED);
    __atomic_store_n(&th->running, 0, __ATOMIC_RELEASE);
    syscall(SYS_futex, &th->running, FUTEX_WAKE);
  }
  return 0;
}

static void execute(int num_calls)
{
  int call, thread;
  running = 0;
  for (call = 0; call < num_calls; call++) {
    for (thread = 0; thread < sizeof(threads) / sizeof(threads[0]); thread++) {
      struct thread_t* th = &threads[thread];
      if (!th->created) {
        th->created = 1;
        pthread_attr_t attr;
        pthread_attr_init(&attr);
        pthread_attr_setstacksize(&attr, 128 << 10);
        pthread_create(&th->th, &attr, thr, th);
      }
      if (!__atomic_load_n(&th->running, __ATOMIC_ACQUIRE)) {
        th->call = call;
        __atomic_fetch_add(&running, 1, __ATOMIC_RELAXED);
        __atomic_store_n(&th->running, 1, __ATOMIC_RELEASE);
        syscall(SYS_futex, &th->running, FUTEX_WAKE);
        struct timespec ts;
        ts.tv_sec = 0;
        ts.tv_nsec = 20 * 1000 * 1000;
        syscall(SYS_futex, &th->running, FUTEX_WAIT, 1, &ts);
        if (running)
          usleep((call == num_calls - 1) ? 10000 : 1000);
        break;
      }
    }
  }
}

uint64_t r[1] = {0xffffffffffffffff};
void execute_call(int call)
{
  long res;
  switch (call) {
  case 0:
    memcpy((void*)0x20001280, "\xff\x39\x97\xff\xcd\x00", 6);
    *(uint8_t*)0x20001286 = 0xaa;
    *(uint8_t*)0x20001287 = 0xaa;
    *(uint8_t*)0x20001288 = 0xaa;
    *(uint8_t*)0x20001289 = 0xaa;
    *(uint8_t*)0x2000128a = 0xaa;
    *(uint8_t*)0x2000128b = 0;
    *(uint16_t*)0x2000128c = htobe16(0x800);
    STORE_BY_BITMASK(uint8_t, 0x2000128e, 5, 0, 4);
    STORE_BY_BITMASK(uint8_t, 0x2000128e, 4, 4, 4);
    STORE_BY_BITMASK(uint8_t, 0x2000128f, 0, 0, 2);
    STORE_BY_BITMASK(uint8_t, 0x2000128f, 0, 2, 6);
    *(uint16_t*)0x20001290 = htobe16(0x24);
    *(uint16_t*)0x20001292 = htobe16(0);
    *(uint16_t*)0x20001294 = htobe16(0);
    *(uint8_t*)0x20001296 = 0;
    *(uint8_t*)0x20001297 = 0x88;
    *(uint16_t*)0x20001298 = 0;
    *(uint32_t*)0x2000129a = htobe32(0);
    *(uint32_t*)0x2000129e = htobe32(-1);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 0, 0, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 0, 1, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 1, 2, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 0, 3, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 0, 4, 4);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 0, 8, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 0, 9, 4);
    STORE_BY_BITMASK(uint16_t, 0x200012a2, 1, 13, 3);
    *(uint16_t*)0x200012a4 = htobe16(0x880b);
    *(uint16_t*)0x200012a6 = htobe16(0);
    *(uint16_t*)0x200012a8 = htobe16(0);
    STORE_BY_BITMASK(uint16_t, 0x200012aa, 0, 0, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012aa, 0, 1, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012aa, 0, 2, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012aa, 0, 3, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012aa, 0, 4, 9);
    STORE_BY_BITMASK(uint16_t, 0x200012aa, 0, 13, 3);
    *(uint16_t*)0x200012ac = htobe16(0x800);
    STORE_BY_BITMASK(uint16_t, 0x200012ae, 0, 0, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012ae, 0, 1, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012ae, 0, 2, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012ae, 0, 3, 1);
    STORE_BY_BITMASK(uint16_t, 0x200012ae, 0, 4, 9);
    STORE_BY_BITMASK(uint16_t, 0x200012ae, 0, 13, 3);
    *(uint16_t*)0x200012b0 = htobe16(0x86dd);
    *(uint16_t*)0x200012b2 = 0;
    *(uint16_t*)0x200012b4 = htobe16(0);
    *(uint32_t*)0x200012b6 = htobe32(0);
    STORE_BY_BITMASK(uint8_t, 0x200012ba, 0, 0, 4);
    STORE_BY_BITMASK(uint8_t, 0x200012ba, 0, 4, 4);
    *(uint8_t*)0x200012bb = 0;
    STORE_BY_BITMASK(uint8_t, 0x200012bc, 0, 0, 2);
    STORE_BY_BITMASK(uint8_t, 0x200012bc, 0, 2, 1);
    STORE_BY_BITMASK(uint8_t, 0x200012bc, 0, 3, 2);
    STORE_BY_BITMASK(uint8_t, 0x200012bc, 0, 5, 3);
    *(uint8_t*)0x200012bd = 0;
    *(uint32_t*)0x200012be = 0;
    *(uint32_t*)0x200012c2 = htobe32(0);
    *(uint16_t*)0x200012c6 = 0;
    *(uint16_t*)0x200012c8 = htobe16(0);
    *(uint32_t*)0x200012ca = htobe32(0);
    STORE_BY_BITMASK(uint8_t, 0x200012ce, 0, 0, 4);
    STORE_BY_BITMASK(uint8_t, 0x200012ce, 0, 4, 4);
    *(uint8_t*)0x200012cf = 0;
    STORE_BY_BITMASK(uint8_t, 0x200012d0, 0, 0, 2);
    STORE_BY_BITMASK(uint8_t, 0x200012d0, 0, 2, 1);
    STORE_BY_BITMASK(uint8_t, 0x200012d0, 0, 3, 2);
    STORE_BY_BITMASK(uint8_t, 0x200012d0, 0, 5, 3);
    *(uint8_t*)0x200012d1 = 0;
    *(uint32_t*)0x200012d2 = 0;
    *(uint32_t*)0x200012d6 = htobe32(0);
    *(uint16_t*)0x200012da = htobe16(0);
    STORE_BY_BITMASK(uint8_t, 0x200012dc, 0, 0, 2);
    STORE_BY_BITMASK(uint8_t, 0x200012dc, 0, 2, 5);
    STORE_BY_BITMASK(uint8_t, 0x200012dc, 0, 7, 1);
    STORE_BY_BITMASK(uint8_t, 0x200012dd, 0, 0, 1);
    STORE_BY_BITMASK(uint8_t, 0x200012dd, 0, 1, 2);
    STORE_BY_BITMASK(uint8_t, 0x200012dd, 0, 3, 1);
    STORE_BY_BITMASK(uint8_t, 0x200012dd, 0, 4, 1);
    *(uint16_t*)0x200012de = 0;
    *(uint16_t*)0x200012e0 = htobe16(0);
    *(uint32_t*)0x200012e2 = htobe32(0);
    struct csum_inet csum_1;
    csum_inet_init(&csum_1);
    csum_inet_update(&csum_1, (const uint8_t*)0x2000128e, 20);
    *(uint16_t*)0x20001298 = csum_inet_digest(&csum_1);
    break;
  case 1:
    res = syscall(__NR_socket, 0xa, 3, 0x2b);
    if (res != -1)
      r[0] = res;
    break;
  case 2:
    *(uint16_t*)0x20017000 = 0xa;
    *(uint16_t*)0x20017002 = htobe16(0x4e20);
    *(uint32_t*)0x20017004 = 0;
    *(uint8_t*)0x20017008 = 0;
    *(uint8_t*)0x20017009 = 0;
    *(uint8_t*)0x2001700a = 0;
    *(uint8_t*)0x2001700b = 0;
    *(uint8_t*)0x2001700c = 0;
    *(uint8_t*)0x2001700d = 0;
    *(uint8_t*)0x2001700e = 0;
    *(uint8_t*)0x2001700f = 0;
    *(uint8_t*)0x20017010 = 0;
    *(uint8_t*)0x20017011 = 0;
    *(uint8_t*)0x20017012 = 0;
    *(uint8_t*)0x20017013 = 0;
    *(uint8_t*)0x20017014 = 0;
    *(uint8_t*)0x20017015 = 0;
    *(uint8_t*)0x20017016 = 0;
    *(uint8_t*)0x20017017 = 0;
    *(uint32_t*)0x20017018 = 0;
    syscall(__NR_connect, r[0], 0x20017000, 0x1c);
    break;
  case 3:
    *(uint64_t*)0x20001000 = 0x20000840;
    *(uint32_t*)0x20001008 = 0x10;
    *(uint64_t*)0x20001010 = 0x20000a00;
    *(uint64_t*)0x20001018 = 0;
    *(uint64_t*)0x20001020 = 0x20000f40;
    *(uint64_t*)0x20001028 = 0xac;
    *(uint32_t*)0x20001030 = 0;
    *(uint32_t*)0x20001038 = 0;
    *(uint64_t*)0x20000a40 = 0;
    *(uint64_t*)0x20000a48 = 0x989680;
    syscall(__NR_recvmmsg, r[0], 0x20001000, 1, 0x10022, 0x20000a40);
    break;
  case 4:
    *(uint64_t*)0x20000580 = 0;
    *(uint32_t*)0x20000588 = 0;
    *(uint64_t*)0x20000590 = 0x20000200;
    *(uint64_t*)0x20000598 = 0;
    *(uint64_t*)0x200005a0 = 0x20000780;
    *(uint64_t*)0x200005a8 = 0;
    *(uint32_t*)0x200005b0 = 0;
    syscall(__NR_sendmsg, r[0], 0x20000580, 0);
    break;
  }
}

void loop()
{
  execute(5);
}

int main()
{
  syscall(__NR_mmap, 0x20000000, 0x1000000, 3, 0x32, -1, 0);
  loop();
  return 0;
}
