// https://syzkaller.appspot.com/bug?id=af48f228194f5d83c5040d67dbab1598b83bc11c #include #include #include #include #include #include #include #include #include int main(void) { int fb_fd, tty_fd; struct fb_var_screeninfo var; int res; fb_fd = open("/dev/fb0", O_RDWR); if (fb_fd < 0) { printf("[-] Failed to open /dev/fb0: %s\n", strerror(errno)); exit(1); } printf("[+] open /dev/fb0 successful.\n"); tty_fd = open("/dev/tty1", O_RDWR); if (tty_fd < 0) { printf("[-] Failed to open /dev/tty1: %s\n", strerror(errno)); exit(1); } printf("[+] open /dev/tty1 successful.\n"); res = ioctl(fb_fd, FBIOGET_VSCREENINFO, &var); if (res < 0) { printf("[-] Failed to FBIOGET_VSCREENINFO: %s\n", strerror(errno)); exit(1); } printf("[+] FBIOGET_VSCREENINFO successful.\n"); var.yres = 8; res = ioctl(fb_fd, FBIOPUT_VSCREENINFO, &var); if (res < 0) { printf("[-] Failed to FBIOPUT_VSCREENINFO: %s\n", strerror(errno)); exit(1); } printf("[+] FBIOPUT_VSCREENINFO successful.\n"); res = write(tty_fd, "\x1b[2;50r", 7); if (res < 0) { printf("[-] Failed to write scroll region: %s\n", strerror(errno)); exit(1); } printf("[+] write scroll region successful.\n"); res = write(tty_fd, "\x1b[L", 3); if (res < 0) { printf("[-] Failed to write insert line: %s\n", strerror(errno)); exit(1); } printf("[+] write insert line successful.\n"); res = close(tty_fd); if (res < 0) { printf("[-] Failed to close tty_fd: %s\n", strerror(errno)); exit(1); } printf("[+] close tty_fd successful.\n"); res = close(fb_fd); if (res < 0) { printf("[-] Failed to close fb_fd: %s\n", strerror(errno)); exit(1); } printf("[+] close fb_fd successful.\n"); sleep(1); printf("[+] Reproducer finished.\n"); return 0; }