From e6b0d3140b98e8456fbd089d584e932e19257d94 Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Tue, 1 Dec 2020 19:31:29 -0800 Subject: sys/linux: add some basic fscrypt test programs With fscrypt (a.k.a. ext4, f2fs, and ubifs encryption), several steps are required to get to a properly set-up encrypted directory: - Mount a filesystem that supports encryption. - Call FS_IOC_ADD_ENCRYPTION_KEY on the mountpoint. - Create a directory in the filesystem. - Call FS_IOC_SET_ENCRYPTION_POLICY on the directory, specifying the encryption key that was added earlier. - Then actually create stuff in the directory. It may be too hard for syzkaller to generate all these steps, which may explain why syzbot isn't yet properly covering the fscrypt code; see https://storage.googleapis.com/syzkaller/cover/ci-upstream-kasan-gce.html which currently shows only 5% coverage of the fs/crypto/ directory. Therefore add some test programs which do this setup on ext4 and f2fs. Note that ubifs support can't be included yet because syzkaller doesn't yet know how to mount an ubifs filesystem (which would likely require using block2mtd, as ubifs uses MTD devices rather than block devices). --- sys/linux/test/fscrypt_ext4 | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 sys/linux/test/fscrypt_ext4 (limited to 'sys/linux/test/fscrypt_ext4') diff --git a/sys/linux/test/fscrypt_ext4 b/sys/linux/test/fscrypt_ext4 new file mode 100644 index 000000000..0ba0c0f20 --- /dev/null +++ b/sys/linux/test/fscrypt_ext4 @@ -0,0 +1,12 @@ +# This program mounts an empty ext4 filesystem that supports encryption +# (generated by 'mkfs.ext4 -O encrypt'), then adds an encryption key to that +# filesystem and creates an encrypted directory using that key. + +syz_mount_image$ext4(&(0x7f0000000000)='ext4\x00', &(0x7f0000000100)='./mnt\x00', 0x10000, 0x1d, &(0x7f0000000200)=[{&(0x7f0000010000)="1000000040000000030000002b00000005000000010000000000000000000000002000000020000010000000000000009f09c75f0000ffff53ef0100010000009f09c75f000000000000000001000000000000000b0000008000000038000000c20201006b04000076b65be2f6da47278c750525a5b65a090000000000000000", 0x80, 0x400}, {&(0x7f0000010080)="000000000000000000000000ede2de4df49d4f87b54a3176cfd4eb4f010040000c000000000000009f09c75f0000000000000000000000000000000000000000", 0x40, 0x4e0}, {&(0x7f00000100c0)="0100000000000000000000000000000000000000040100001200000000000000", 0x20, 0x560}, {&(0x7f00000100e0)="0000000000000000000000000000000000000000010400000000000000000000", 0x20, 0x640}, {&(0x7f0000010100)="000000000000000000000000000000000000000000000000000000005178aedb0300000013000000230000002b0005000200040000000000907306c205002a9c00000000000000000000000000000000000000000000000091ecd11b00000000", 0x60, 0x7e0}, {&(0x7f0000010160)="ffff05000c000080ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020000000c0001022e000000020000000c0002022e2e00000b000000dc030a026c6f73742b666f756e6400000000000000000000000000000000000000000000", 0x440, 0xc00}, {&(0x7f00000105a0)="0000000000000000000000000000000000000000000000000c0000de46b807b70b0000000c0001022e00000002000000e80302022e2e00000000000000000000", 0x40, 0x13e0}, {&(0x7f00000105e0)="0000000000000000000000000000000000000000000000000c0000de5551aadd00000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x17e0}, {&(0x7f0000010620)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x1be0}, {&(0x7f0000010660)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x1fe0}, {&(0x7f00000106a0)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x23e0}, {&(0x7f00000106e0)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x27e0}, {&(0x7f0000010720)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x2be0}, {&(0x7f0000010760)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x2fe0}, {&(0x7f00000107a0)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x33e0}, {&(0x7f00000107e0)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x37e0}, {&(0x7f0000010820)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x3be0}, {&(0x7f0000010860)="0000000000000000000000000000000000000000000000000c0000de2b607f2900000000f4030000000000000000000000000000000000000000000000000000", 0x40, 0x3fe0}, {&(0x7f00000108a0)="0000000000000000000000000000000000000000000000000c0000de2b607f29", 0x20, 0x43e0}, {&(0x7f00000108c0)="ff07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", 0x400, 0x4c00}, {&(0x7f0000010cc0)="00000000000000009f09c75f9f09c75f9f09c75f000000000000000000000000", 0x20, 0x8c00}, {&(0x7f0000010ce0)="00000000000000000000000000000000000000000000000000000000c99b0000ed410000000400009f09c75f9f09c75f9f09c75f00000000000003000200000000000800000000000af3010004000000000000000000000001000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005c1f0000", 0xa0, 0x8c60}, {&(0x7f0000010d80)="00000000000000000000000000000000000000000000000000000000acff0000", 0x20, 0x8d60}, {&(0x7f0000010da0)="000000000000000000000000000000000000000000000000000000000ee30000", 0x20, 0x8de0}, {&(0x7f0000010dc0)="00000000000000000000000000000000000000000000000000000000ce1e0000", 0x20, 0x8e60}, {&(0x7f0000010de0)="000000000000000000000000000000000000000000000000000000007f6e000080810000003004049f09c75f9f09c75f9f09c75f000000000000010002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000005620000", 0xa0, 0x8ee0}, {&(0x7f0000010e80)="000000000000000000000000000000000000000000000000000000003b570000", 0x20, 0x8fe0}, {&(0x7f0000010ea0)="00000000000000000000000000000000000000000000000000000000fbaa0000", 0x20, 0x9060}, {&(0x7f0000010ec0)="000000000000000000000000000000000000000000000000000000004ada0000c0410000003000009f09c75f9f09c75f9f09c75f00000000000002001800000000000800000000000af301000400000000000000000000000c0000000500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000070fa0000", 0xa0, 0x90e0}], 0x0, &(0x7f0000010f60)) +r0 = openat(0xffffffffffffff9c, &AUTO='mnt', 0x0, 0x0) +ioctl$FS_IOC_ADD_ENCRYPTION_KEY(r0, 0xc0506617, &AUTO={@id={0x2, 0x0, @a='\x69\xb2\xf6\xed\xee\xe7\x20\xcc\xe0\x57\x79\x37\xeb\x8a\x67\x51', [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]}, 0x40, 0x0, [0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0], @a='\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f\x20\x21\x22\x23\x24\x25\x26\x27\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x3a\x3b\x3c\x3d\x3e\x3f\x40'}) +mkdirat(0xffffffffffffff9c, &AUTO='mnt/encrypted_dir\x00', 0x1c0) +r1 = openat(0xffffffffffffff9c, &AUTO='mnt/encrypted_dir\x00', 0x0, 0x0) +ioctl$FS_IOC_SET_ENCRYPTION_POLICY(r1, 0x800c6613, &AUTO=@v2={0x2, @aes256, 0x0, [0x0, 0x0, 0x0, 0x0], @a='\x69\xb2\xf6\xed\xee\xe7\x20\xcc\xe0\x57\x79\x37\xeb\x8a\x67\x51'}) +r2 = openat(0xffffffffffffff9c, &AUTO='mnt/encrypted_dir/file\x00', 0x42, 0x180) +write(r2, &AUTO='foo', 0x3) -- cgit mrf-deployment