blob: 71da677c2f35d1472e69bcef8b74a9cd12add55b [file] [log] [blame]
// WARNING in iov_iter_revert
// https://syzkaller.appspot.com/bug?id=1339e0a805a4ddb11eaee6fb6b1bc905493ded77
// status:fixed
// 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>
#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;
}
uint64_t r[1] = {0xffffffffffffffff};
void loop()
{
long res = 0;
res = syscall(__NR_socket, 0xa, 1, 0);
if (res != -1)
r[0] = res;
syscall(__NR_shutdown, r[0], 1);
*(uint32_t*)0x200000c0 = 1;
syscall(__NR_setsockopt, r[0], 6, 0x13, 0x200000c0, 0x1d4);
*(uint16_t*)0x20000080 = 0xa;
*(uint16_t*)0x20000082 = htobe16(0);
*(uint32_t*)0x20000084 = 0;
*(uint8_t*)0x20000088 = 0;
*(uint8_t*)0x20000089 = 0;
*(uint8_t*)0x2000008a = 0;
*(uint8_t*)0x2000008b = 0;
*(uint8_t*)0x2000008c = 0;
*(uint8_t*)0x2000008d = 0;
*(uint8_t*)0x2000008e = 0;
*(uint8_t*)0x2000008f = 0;
*(uint8_t*)0x20000090 = 0;
*(uint8_t*)0x20000091 = 0;
*(uint8_t*)0x20000092 = 0;
*(uint8_t*)0x20000093 = 0;
*(uint8_t*)0x20000094 = 0;
*(uint8_t*)0x20000095 = 0;
*(uint8_t*)0x20000096 = 0;
*(uint8_t*)0x20000097 = 0;
*(uint32_t*)0x20000098 = 0;
syscall(__NR_connect, r[0], 0x20000080, 0x1c);
memcpy((void*)0x20000040, "tls", 4);
syscall(__NR_setsockopt, r[0], 6, 0x1f, 0x20000040, 0x13a);
*(uint16_t*)0x20000100 = 0x303;
*(uint16_t*)0x20000102 = 0x33;
syscall(__NR_setsockopt, r[0], 0x11a, 1, 0x20000100, 0x28);
memcpy((void*)0x20000140, "e", 1);
*(uint16_t*)0x20000180 = 0xa;
*(uint16_t*)0x20000182 = htobe16(0);
*(uint32_t*)0x20000184 = 0;
*(uint8_t*)0x20000188 = -1;
*(uint8_t*)0x20000189 = 1;
*(uint8_t*)0x2000018a = 0;
*(uint8_t*)0x2000018b = 0;
*(uint8_t*)0x2000018c = 0;
*(uint8_t*)0x2000018d = 0;
*(uint8_t*)0x2000018e = 0;
*(uint8_t*)0x2000018f = 0;
*(uint8_t*)0x20000190 = 0;
*(uint8_t*)0x20000191 = 0;
*(uint8_t*)0x20000192 = 0;
*(uint8_t*)0x20000193 = 0;
*(uint8_t*)0x20000194 = 0;
*(uint8_t*)0x20000195 = 0;
*(uint8_t*)0x20000196 = 0;
*(uint8_t*)0x20000197 = 1;
*(uint32_t*)0x20000198 = 0;
syscall(__NR_sendto, r[0], 0x20000140, 1, 0x8000, 0x20000180, 0x1c);
*(uint64_t*)0x20001340 = 0x20000200;
*(uint16_t*)0x20000200 = 0x1d;
*(uint32_t*)0x20000204 = 0;
*(uint32_t*)0x20000208 = 0;
*(uint32_t*)0x2000020c = 0;
*(uint32_t*)0x20001348 = 0x80;
*(uint64_t*)0x20001350 = 0x200002c0;
*(uint64_t*)0x200002c0 = 0x20000280;
memcpy((void*)0x20000280,
"\xd1\xac\x95\x44\x47\x07\xda\x12\x0d\x27\xba\x70\xc0\x45\x23\xad\xa1",
17);
*(uint64_t*)0x200002c8 = 0x11;
*(uint64_t*)0x20001358 = 1;
*(uint64_t*)0x20001360 = 0x200001c0;
*(uint64_t*)0x20001368 = 0;
*(uint32_t*)0x20001370 = 0;
syscall(__NR_sendmsg, r[0], 0x20001340, 0);
*(uint8_t*)0x200000c0 = 0xaa;
*(uint8_t*)0x200000c1 = 0xaa;
*(uint8_t*)0x200000c2 = 0xaa;
*(uint8_t*)0x200000c3 = 0xaa;
*(uint8_t*)0x200000c4 = 0xaa;
*(uint8_t*)0x200000c5 = 0xbb;
*(uint8_t*)0x200000c6 = 0xaa;
*(uint8_t*)0x200000c7 = 0xaa;
*(uint8_t*)0x200000c8 = 0xaa;
*(uint8_t*)0x200000c9 = 0xaa;
*(uint8_t*)0x200000ca = 0xaa;
*(uint8_t*)0x200000cb = 0xbb;
*(uint16_t*)0x200000cc = htobe16(0x8100);
STORE_BY_BITMASK(uint16_t, 0x200000ce, 0xfa0b, 0, 3);
STORE_BY_BITMASK(uint16_t, 0x200000ce, 4, 3, 1);
STORE_BY_BITMASK(uint16_t, 0x200000ce, 0, 4, 12);
*(uint16_t*)0x200000d0 = htobe16(0x800);
STORE_BY_BITMASK(uint8_t, 0x200000d2, 0x12, 0, 4);
STORE_BY_BITMASK(uint8_t, 0x200000d2, 4, 4, 4);
STORE_BY_BITMASK(uint8_t, 0x200000d3, 2, 0, 2);
STORE_BY_BITMASK(uint8_t, 0x200000d3, 0x99, 2, 6);
*(uint16_t*)0x200000d4 = htobe16(0x90);
*(uint16_t*)0x200000d6 = htobe16(0x68);
*(uint16_t*)0x200000d8 = htobe16(0);
*(uint8_t*)0x200000da = 0;
*(uint8_t*)0x200000db = 0x11;
*(uint16_t*)0x200000dc = 0;
*(uint8_t*)0x200000de = 0xac;
*(uint8_t*)0x200000df = 0x14;
*(uint8_t*)0x200000e0 = 0x14;
*(uint8_t*)0x200000e1 = 0xbb;
*(uint32_t*)0x200000e2 = htobe32(0xe0000001);
*(uint8_t*)0x200000e6 = 0x83;
*(uint8_t*)0x200000e7 = 0x13;
*(uint8_t*)0x200000e8 = 5;
*(uint32_t*)0x200000e9 = htobe32(0xe0000001);
*(uint8_t*)0x200000ed = 0xac;
*(uint8_t*)0x200000ee = 0x14;
*(uint8_t*)0x200000ef = 0x14;
*(uint8_t*)0x200000f0 = 0x10;
*(uint8_t*)0x200000f1 = 0xac;
*(uint8_t*)0x200000f2 = 0x14;
*(uint8_t*)0x200000f3 = 0x14;
*(uint8_t*)0x200000f4 = 0xbb;
*(uint8_t*)0x200000f5 = 0xac;
*(uint8_t*)0x200000f6 = 0x14;
*(uint8_t*)0x200000f7 = 0x14;
*(uint8_t*)0x200000f8 = 0xaa;
*(uint8_t*)0x200000f9 = 0;
*(uint8_t*)0x200000fa = 0x83;
*(uint8_t*)0x200000fb = 0x1f;
*(uint8_t*)0x200000fc = 0;
*(uint32_t*)0x200000fd = htobe32(-1);
*(uint8_t*)0x20000101 = 0xac;
*(uint8_t*)0x20000102 = 0x14;
*(uint8_t*)0x20000103 = 0x14;
*(uint8_t*)0x20000104 = 0xaa;
*(uint32_t*)0x20000105 = htobe32(0xe0000001);
*(uint32_t*)0x20000109 = htobe32(0);
*(uint32_t*)0x2000010d = htobe32(0x7f000001);
*(uint32_t*)0x20000111 = htobe32(-1);
*(uint32_t*)0x20000115 = htobe32(0);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 0, 0, 1);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 0, 1, 1);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 1, 2, 1);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 2, 3, 1);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 0, 4, 4);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 3, 8, 1);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 0, 9, 4);
STORE_BY_BITMASK(uint16_t, 0x2000011a, 1, 13, 3);
*(uint16_t*)0x2000011c = htobe16(0x880b);
*(uint16_t*)0x2000011e = htobe16(0);
*(uint16_t*)0x20000120 = htobe16(1);
STORE_BY_BITMASK(uint16_t, 0x20000122, -1, 0, 1);
STORE_BY_BITMASK(uint16_t, 0x20000122, 0, 1, 1);
STORE_BY_BITMASK(uint16_t, 0x20000122, 0xfffe, 2, 1);
STORE_BY_BITMASK(uint16_t, 0x20000122, 2, 3, 1);
STORE_BY_BITMASK(uint16_t, 0x20000122, 0, 4, 9);
STORE_BY_BITMASK(uint16_t, 0x20000122, 0, 13, 3);
*(uint16_t*)0x20000124 = htobe16(0x800);
*(uint16_t*)0x20000126 = htobe16(7);
STORE_BY_BITMASK(uint16_t, 0x20000128, 0x200, 0, 1);
STORE_BY_BITMASK(uint16_t, 0x20000128, 0, 1, 1);
STORE_BY_BITMASK(uint16_t, 0x20000128, 0x2e1c, 2, 1);
STORE_BY_BITMASK(uint16_t, 0x20000128, 0x20, 3, 1);
STORE_BY_BITMASK(uint16_t, 0x20000128, 0, 4, 9);
STORE_BY_BITMASK(uint16_t, 0x20000128, 0, 13, 3);
*(uint16_t*)0x2000012a = htobe16(0x86dd);
*(uint16_t*)0x2000012c = htobe16(0);
*(uint16_t*)0x2000012e = 8;
*(uint16_t*)0x20000130 = htobe16(0x88be);
*(uint32_t*)0x20000132 = htobe32(4);
STORE_BY_BITMASK(uint8_t, 0x20000136, 7, 0, 4);
STORE_BY_BITMASK(uint8_t, 0x20000136, 1, 4, 4);
*(uint8_t*)0x20000137 = 0xe;
STORE_BY_BITMASK(uint8_t, 0x20000138, 6, 0, 2);
STORE_BY_BITMASK(uint8_t, 0x20000138, 0xc0, 2, 1);
STORE_BY_BITMASK(uint8_t, 0x20000138, 0, 3, 2);
STORE_BY_BITMASK(uint8_t, 0x20000138, 0x25, 5, 3);
*(uint8_t*)0x20000139 = 9;
*(uint32_t*)0x2000013a = 1;
*(uint32_t*)0x2000013e = htobe32(0xde1);
*(uint16_t*)0x20000142 = 8;
*(uint16_t*)0x20000144 = htobe16(0x22eb);
*(uint32_t*)0x20000146 = htobe32(3);
STORE_BY_BITMASK(uint8_t, 0x2000014a, 5, 0, 4);
STORE_BY_BITMASK(uint8_t, 0x2000014a, 2, 4, 4);
*(uint8_t*)0x2000014b = 0x55;
STORE_BY_BITMASK(uint8_t, 0x2000014c, -1, 0, 2);
STORE_BY_BITMASK(uint8_t, 0x2000014c, 0xf8, 2, 1);
STORE_BY_BITMASK(uint8_t, 0x2000014c, 8, 3, 2);
STORE_BY_BITMASK(uint8_t, 0x2000014c, 0, 5, 3);
*(uint8_t*)0x2000014d = -1;
*(uint32_t*)0x2000014e = 2;
*(uint32_t*)0x20000152 = htobe32(0x48);
*(uint16_t*)0x20000156 = htobe16(0x73);
STORE_BY_BITMASK(uint8_t, 0x20000158, 8, 0, 2);
STORE_BY_BITMASK(uint8_t, 0x20000158, 9, 2, 5);
STORE_BY_BITMASK(uint8_t, 0x20000158, 3, 7, 1);
STORE_BY_BITMASK(uint8_t, 0x20000159, 0x40, 0, 1);
STORE_BY_BITMASK(uint8_t, 0x20000159, 0xba, 1, 2);
STORE_BY_BITMASK(uint8_t, 0x20000159, 0x7f, 3, 1);
STORE_BY_BITMASK(uint8_t, 0x20000159, 0x27, 4, 1);
*(uint16_t*)0x2000015a = 8;
*(uint16_t*)0x2000015c = htobe16(0x6558);
*(uint32_t*)0x2000015e = htobe32(0);
*(uint32_t*)0x20000000 = 0;
*(uint32_t*)0x20000004 = 4;
*(uint32_t*)0x20000008 = 0xbbf;
*(uint32_t*)0x2000000c = 0x1c0;
*(uint32_t*)0x20000010 = 0xc69;
*(uint32_t*)0x20000014 = 0x4ae;
struct csum_inet csum_1;
csum_inet_init(&csum_1);
csum_inet_update(&csum_1, (const uint8_t*)0x200000d2, 72);
*(uint16_t*)0x200000dc = csum_inet_digest(&csum_1);
}
int main()
{
syscall(__NR_mmap, 0x20000000, 0x1000000, 3, 0x32, -1, 0);
loop();
return 0;
}