Hi,
I recently looked into syzkaller and have one question about the argument mutation mechanism of syzkaller: does syzkaller always follow the type definition in syscall description? Or syzkaller will also choose to randomly mutate syscall arguments regardless of syscall description?
I noticed that for some syzlang program, the arguments has the clear type information, such as "&{{0x12, 0x1, 0x300, 0x3c, 0x3b, 0xa8, 0x20, 0x424, 0xcf30, 0xcff0, 0x1, 0x2, 0x3, 0x1, [{{0x9, 0x2, 0x38, 0x1, 0x2, 0x7, 0x90, 0x75, [{{0x9, 0x4, 0xf0, 0x39, 0x0, 0xb5, 0x9d, 0x1f, 0xe, [@uac_control={{0xa, 0x24, 0x1, 0x5, 0x8}}, @cdc_ncm={{0x5}, {0x5, 0x24, 0x0, 0x3}, {0xd, 0x24, 0xf, 0x1, 0x0, 0x1, 0x2, 0x8}, {0x6, 0x24, 0x1a, 0x4, 0x12}}]}}]}}]}}".
When looking its corresponding syscall description, people can know the values of the different nested fields of this argument.
But for others, it can just be "@ANYBLOB="140000001000010000000000000000000000000a28000000000a0101000000005e1affd5020000000900010073797a300000000008000240000000032c000000030a01030000e6ff00000000020000000900010073797a30000000000900030073797a320000000014000000110001"]". People can not know the value of the nested fileds within this argument.
For those ANYBLOB cases, does it also follow the syscall description to mutate the syscall arguments or just totally random mutate its input? Or it is just a different way to show the argument?
Thanks.