map[SimplifiedCRepro:// autogenerated by syzkaller (https://github.com/google/syzkaller)
#define _GNU_SOURCE
#include <endian.h>
#include <fcntl.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>
#ifndef __NR_ioctl
#define __NR_ioctl 29
#endif
#ifndef __NR_mmap
#define __NR_mmap 222
#endif
static long syz_open_dev(volatile long a0, volatile long a1, volatile long a2)
{
if (a0 == 0xc || a0 == 0xb) {
char buf[128];
sprintf(buf, "/dev/%s/%d:%d", a0 == 0xc ? "char" : "block", (uint8_t)a1, (uint8_t)a2);
return open(buf, O_RDWR, 0);
} else {
unsigned long nb = a1;
char buf[1024];
char* hash;
strncpy(buf, (char*)a0, sizeof(buf) - 1);
buf[sizeof(buf) - 1] = 0;
while ((hash = strchr(buf, '#'))) {
*hash = '0' + (char)(nb % 10);
nb /= 10;
}
return open(buf, a2 & ~O_CREAT, 0);
}
}
uint64_t r[7] = {0xffffffffffffffff, 0xffffffffffffffff, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x0};
int main(void)
{
syscall(__NR_mmap, /*addr=*/0x1ffff000ul, /*len=*/0x1000ul, /*prot=*/0ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul);
syscall(__NR_mmap, /*addr=*/0x20000000ul, /*len=*/0x1000000ul, /*prot=PROT_WRITE|PROT_READ|PROT_EXEC*/7ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul);
syscall(__NR_mmap, /*addr=*/0x21000000ul, /*len=*/0x1000ul, /*prot=*/0ul, /*flags=MAP_FIXED|MAP_ANONYMOUS|MAP_PRIVATE*/0x32ul, /*fd=*/(intptr_t)-1, /*offset=*/0ul);
const char* reason;
(void)reason;
intptr_t res = 0;
if (write(1, "executing program\n", sizeof("executing program\n") - 1)) {}
// syz_open_dev$dri arguments: [
// dev: ptr[in, buffer] {
// buffer: {2f 64 65 76 2f 64 72 69 2f 63 61 72 64 23 00} (length 0xf)
// }
// id: intptr = 0x1 (8 bytes)
// flags: open_flags = 0x0 (8 bytes)
// ]
// returns fd_dri
memcpy((void*)0x20000080, "/dev/dri/card#\000", 15);
res = -1;
res = syz_open_dev(/*dev=*/0x20000080, /*id=*/1, /*flags=*/0);
if (res != -1)
r[0] = res;
// syz_open_dev$dri arguments: [
// dev: ptr[in, buffer] {
// buffer: {2f 64 65 76 2f 64 72 69 2f 63 61 72 64 23 00} (length 0xf)
// }
// id: intptr = 0x1ff (8 bytes)
// flags: open_flags = 0x0 (8 bytes)
// ]
// returns fd_dri
memcpy((void*)0x200000c0, "/dev/dri/card#\000", 15);
res = -1;
res = syz_open_dev(/*dev=*/0x200000c0, /*id=*/0x1ff, /*flags=*/0);
if (res != -1)
r[1] = res;
// syz_open_dev$dri arguments: [
// dev: ptr[in, buffer] {
// buffer: {2f 64 65 76 2f 64 72 69 2f 63 61 72 64 23 00} (length 0xf)
// }
// id: intptr = 0x1 (8 bytes)
// flags: open_flags = 0x0 (8 bytes)
// ]
// returns fd_dri
memcpy((void*)0x20000080, "/dev/dri/card#\000", 15);
res = -1;
res = syz_open_dev(/*dev=*/0x20000080, /*id=*/1, /*flags=*/0);
if (res != -1)
r[2] = res;
// ioctl$DRM_IOCTL_MODE_GETRESOURCES arguments: [
// fd: fd_dri (resource)
// cmd: const = 0xc04064a0 (4 bytes)
// arg: ptr[inout, drm_mode_card_res] {
// drm_mode_card_res {
// fbid: nil
// crtcid: nil
// connid: ptr[out, array[drm_connector_id]] {
// array[drm_connector_id] {
// drm_connector_id (resource)
// }
// }
// encid: nil
// nfbid: len = 0x0 (4 bytes)
// ncrtcid: len = 0x0 (4 bytes)
// nconnid: len = 0x1 (4 bytes)
// nencid: len = 0x0 (4 bytes)
// maxw: const = 0x0 (4 bytes)
// maxh: const = 0x0 (4 bytes)
// minw: const = 0x0 (4 bytes)
// minh: const = 0x0 (4 bytes)
// }
// }
// ]
*(uint64_t*)0x20000540 = 0;
*(uint64_t*)0x20000548 = 0;
*(uint64_t*)0x20000550 = 0x200004c0;
*(uint64_t*)0x20000558 = 0;
*(uint32_t*)0x20000560 = 0;
*(uint32_t*)0x20000564 = 0;
*(uint32_t*)0x20000568 = 1;
*(uint32_t*)0x2000056c = 0;
*(uint32_t*)0x20000570 = 0;
*(uint32_t*)0x20000574 = 0;
*(uint32_t*)0x20000578 = 0;
*(uint32_t*)0x2000057c = 0;
res = syscall(__NR_ioctl, /*fd=*/r[0], /*cmd=*/0xc04064a0, /*arg=*/0x20000540ul);
if (res != -1)
r[3] = *(uint32_t*)0x200004c0;
// ioctl$DRM_IOCTL_SET_CLIENT_CAP arguments: [
// fd: fd_dri (resource)
// cmd: const = 0x4010640d (4 bytes)
// arg: ptr[in, drm_get_cap] {
// drm_get_cap {
// cap: drm_cap = 0x3 (8 bytes)
// val: const = 0x2 (8 bytes)
// }
// }
// ]
*(uint64_t*)0x20000000 = 3;
*(uint64_t*)0x20000008 = 2;
syscall(__NR_ioctl, /*fd=*/r[2], /*cmd=*/0x4010640d, /*arg=*/0x20000000ul);
// ioctl$DRM_IOCTL_MODE_GETPLANERESOURCES arguments: [
// fd: fd_dri (resource)
// cmd: const = 0xc01064b5 (4 bytes)
// arg: ptr[inout, drm_mode_get_plane_res] {
// drm_mode_get_plane_res {
// ids: ptr[out, array[drm_plane_id]] {
// array[drm_plane_id] {
// drm_plane_id (resource)
// }
// }
// cnt: len = 0x1 (4 bytes)
// pad = 0x0 (4 bytes)
// }
// }
// ]
*(uint64_t*)0x20000140 = 0x20000100;
*(uint32_t*)0x20000148 = 1;
res = syscall(__NR_ioctl, /*fd=*/r[2], /*cmd=*/0xc01064b5, /*arg=*/0x20000140ul);
if (res != -1)
r[4] = *(uint32_t*)0x20000100;
// ioctl$DRM_IOCTL_MODE_GETPLANE arguments: [
// fd: fd_dri (resource)
// cmd: const = 0xc02064b6 (4 bytes)
// arg: ptr[inout, drm_mode_get_plane] {
// drm_mode_get_plane {
// plane_id: drm_plane_id (resource)
// crtc_id: drm_crtc_id (resource)
// fb_id: drm_fb_id (resource)
// possible_crtcs: const = 0x0 (4 bytes)
// gamma_size: const = 0x0 (4 bytes)
// count_format_types: len = 0x0 (4 bytes)
// format_type_ptr: nil
// }
// }
// ]
*(uint32_t*)0x200001c0 = r[4];
*(uint32_t*)0x200001c4 = 0;
*(uint32_t*)0x200001c8 = 0;
*(uint32_t*)0x200001cc = 0;
*(uint32_t*)0x200001d0 = 0;
*(uint32_t*)0x200001d4 = 0;
*(uint64_t*)0x200001d8 = 0;
res = syscall(__NR_ioctl, /*fd=*/r[2], /*cmd=*/0xc02064b6, /*arg=*/0x200001c0ul);
if (res != -1)
r[5] = *(uint32_t*)0x200001c8;
// ioctl$DRM_IOCTL_MODE_GETPLANE arguments: [
// fd: fd_dri (resource)
// cmd: const = 0xc02064b6 (4 bytes)
// arg: ptr[inout, drm_mode_get_plane] {
// drm_mode_get_plane {
// plane_id: drm_plane_id (resource)
// crtc_id: drm_crtc_id (resource)
// fb_id: drm_fb_id (resource)
// possible_crtcs: const = 0x0 (4 bytes)
// gamma_size: const = 0x0 (4 bytes)
// count_format_types: len = 0x0 (4 bytes)
// format_type_ptr: nil
// }
// }
// ]
*(uint32_t*)0x20000200 = r[4];
*(uint32_t*)0x20000204 = 0;
*(uint32_t*)0x20000208 = 0;
*(uint32_t*)0x2000020c = 0;
*(uint32_t*)0x20000210 = 0;
*(uint32_t*)0x20000214 = 0;
*(uint64_t*)0x20000218 = 0;
res = syscall(__NR_ioctl, /*fd=*/r[1], /*cmd=*/0xc02064b6, /*arg=*/0x20000200ul);
if (res != -1)
r[6] = *(uint32_t*)0x20000204;
// ioctl$DRM_IOCTL_MODE_SETCRTC arguments: [
// fd: fd_dri (resource)
// cmd: const = 0xc06864a2 (4 bytes)
// arg: ptr[in, drm_mode_crtc$DRM_IOCTL_MODE_SETCRTC] {
// drm_mode_crtc$DRM_IOCTL_MODE_SETCRTC {
// set_connectors_ptr: ptr[in, array[drm_connector_id]] {
// array[drm_connector_id] {
// drm_connector_id (resource)
// }
// }
// count_connectors: len = 0x1 (4 bytes)
// crtc_id: drm_crtc_id (resource)
// fb_id: drm_fb_id (resource)
// x: int32 = 0x0 (4 bytes)
// y: int32 = 0x0 (4 bytes)
// gamma_size: int32 = 0x0 (4 bytes)
// mode_valid: int32 = 0x8 (4 bytes)
// mode: drm_mode_modeinfo {
// clock: int32 = 0x4 (4 bytes)
// hdisplay: int16 = 0x1 (2 bytes)
// hsync_start: int16 = 0x3 (2 bytes)
// hsync_end: int16 = 0x69 (2 bytes)
// htotal: int16 = 0x200 (2 bytes)
// hskew: int16 = 0x0 (2 bytes)
// vdisplay: int16 = 0x1 (2 bytes)
// vsync_start: int16 = 0x5 (2 bytes)
// vsync_end: int16 = 0x4dab (2 bytes)
// vtotal: int16 = 0x8000 (2 bytes)
// vscan: int16 = 0xfffe (2 bytes)
// vrefresh: int32 = 0x0 (4 bytes)
// flags: int32 = 0x237 (4 bytes)
// type: int32 = 0x0 (4 bytes)
// name: buffer: {fe 1d 0e 22 3e de 04 a6 a7 70 f5 db e6 0b 0b d1 7b 48 12 40 ff 8e b8 39 77 36 ec 02 68 20 8f 7d} (length 0x20)
// }
// }
// }
// ]
*(uint64_t*)0x20000400 = 0x20000480;
*(uint32_t*)0x20000480 = r[3];
*(uint32_t*)0x20000408 = 1;
*(uint32_t*)0x2000040c = r[6];
*(uint32_t*)0x20000410 = r[5];
*(uint32_t*)0x20000414 = 0;
*(uint32_t*)0x20000418 = 0;
*(uint32_t*)0x2000041c = 0;
*(uint32_t*)0x20000420 = 8;
*(uint32_t*)0x20000424 = 4;
*(uint16_t*)0x20000428 = 1;
*(uint16_t*)0x2000042a = 3;
*(uint16_t*)0x2000042c = 0x69;
*(uint16_t*)0x2000042e = 0x200;
*(uint16_t*)0x20000430 = 0;
*(uint16_t*)0x20000432 = 1;
*(uint16_t*)0x20000434 = 5;
*(uint16_t*)0x20000436 = 0x4dab;
*(uint16_t*)0x20000438 = 0x8000;
*(uint16_t*)0x2000043a = 0xfffe;
*(uint32_t*)0x2000043c = 0;
*(uint32_t*)0x20000440 = 0x237;
*(uint32_t*)0x20000444 = 0;
memcpy((void*)0x20000448, "... [truncated large byte array] ...", 32);
syscall(__NR_ioctl, /*fd=*/r[0], /*cmd=*/0xc06864a2, /*arg=*/0x20000400ul);
return 0;
}
]