// KMSAN: uninit-value in netlink_rcv_skb
// https://syzkaller.appspot.com/bug?id=0b472733147e11d5cd32f8298a58c9a1b578b14a
// status:invalid
// autogenerated by syzkaller (http://github.com/google/syzkaller)

#define _GNU_SOURCE
#include <endian.h>
#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <unistd.h>

static uintptr_t syz_open_procfs(uintptr_t a0, uintptr_t a1)
{

  char buf[128];
  memset(buf, 0, sizeof(buf));
  if (a0 == 0) {
    snprintf(buf, sizeof(buf), "/proc/self/%s", (char*)a1);
  } else if (a0 == (uintptr_t)-1) {
    snprintf(buf, sizeof(buf), "/proc/thread-self/%s", (char*)a1);
  } else {
    snprintf(buf, sizeof(buf), "/proc/self/task/%d/%s", (int)a0, (char*)a1);
  }
  int fd = open(buf, O_RDWR);
  if (fd == -1)
    fd = open(buf, O_RDONLY);
  return fd;
}

uint64_t r[2] = {0xffffffffffffffff, 0xffffffffffffffff};
void loop()
{
  long res = 0;
  res = syscall(__NR_socket, 0x10, 2, 0);
  if (res != -1)
    r[0] = res;
  memcpy((void*)0x20000080, "\x2f\x65\x78\x65\x00\x00\x00\x00\x00\x04\x09\x00"
                            "\x4b\xdd\xd9\xde\x91\xbe\x10\xee\xbf\x00\x0e\xe9"
                            "\xa9\x0f\x79\x80\x58\x43\x9e\xd5\x54\xfa\x07\x42"
                            "\x4a\xde\xe9\x01\xd2\xda\x75\xaf\x1f\x02\xac\xc7"
                            "\xed\xbc\xd7\xa0\x71\xfb\x35\x33\x1c\xe3\x9c\x5a",
         60);
  res = syz_open_procfs(0, 0x20000080);
  if (res != -1)
    r[1] = res;
  syscall(__NR_fcntl, r[1], 4, 0x4000);
  *(uint64_t*)0x200000c0 = 0;
  syscall(__NR_sendfile, r[0], r[1], 0x200000c0, 0x80000002);
}

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