// KASAN: stack-out-of-bounds Read in rdma_resolve_addr
// https://syzkaller.appspot.com/bug?id=6e469f305d3cb6fd3352414e4c6e32466f91c53c
// status:dup
// autogenerated by syzkaller (http://github.com/google/syzkaller)

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

uint64_t r[2] = {0xffffffffffffffff, 0xffffffff};
void loop()
{
  long res;
  memcpy((void*)0x200001c0, "/dev/infiniband/rdma_cm", 24);
  res = syscall(__NR_openat, 0xffffffffffffff9c, 0x200001c0, 2, 0);
  if (res != -1)
    r[0] = res;
  *(uint32_t*)0x20000700 = 0;
  *(uint16_t*)0x20000704 = 0x18;
  *(uint16_t*)0x20000706 = 0xfa00;
  *(uint64_t*)0x20000708 = 0;
  *(uint64_t*)0x20000710 = 0x20000180;
  *(uint16_t*)0x20000718 = 0x13f;
  *(uint8_t*)0x2000071a = 0;
  *(uint8_t*)0x2000071b = 0;
  *(uint8_t*)0x2000071c = 0;
  *(uint8_t*)0x2000071d = 0;
  *(uint8_t*)0x2000071e = 0;
  *(uint8_t*)0x2000071f = 0;
  res = syscall(__NR_write, r[0], 0x20000700, 0x20);
  if (res != -1)
    r[1] = *(uint32_t*)0x20000180;
  *(uint32_t*)0x20000740 = 3;
  *(uint16_t*)0x20000744 = 0x40;
  *(uint16_t*)0x20000746 = 0xfa00;
  *(uint16_t*)0x20000748 = 0xa;
  *(uint16_t*)0x2000074a = htobe16(0);
  *(uint32_t*)0x2000074c = 0;
  *(uint64_t*)0x20000750 = htobe64(0);
  *(uint64_t*)0x20000758 = htobe64(1);
  *(uint32_t*)0x20000760 = 0;
  *(uint16_t*)0x20000764 = 0x1b;
  *(uint16_t*)0x20000766 = htobe16(0);
  *(uint32_t*)0x20000768 = 0;
  *(uint64_t*)0x2000076c = htobe64(0);
  *(uint64_t*)0x20000774 = htobe64(1);
  *(uint32_t*)0x2000077c = 0;
  *(uint32_t*)0x20000780 = r[1];
  *(uint32_t*)0x20000784 = 0;
  syscall(__NR_write, r[0], 0x20000740, 0x48);
}

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