|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 08/12] fuzz/x86_emulate: Move all state into fuzz_state
On 10/12/2017 04:16 PM, Jan Beulich wrote:
>>>> On 11.10.17 at 19:52, <george.dunlap@xxxxxxxxxx> wrote:
>> --- a/tools/fuzz/x86_instruction_emulator/fuzz-emul.c
>> +++ b/tools/fuzz/x86_instruction_emulator/fuzz-emul.c
>> @@ -22,34 +22,31 @@
>>
>> #define SEG_NUM x86_seg_none
>>
>> -/* Layout of data expected as fuzzing input. */
>> -struct fuzz_corpus
>> +/*
>> + * State of the fuzzing harness and emulated cpu. Calculated
>> + * initially from the input corpus, and later mutated by the emulation
>> + * callbacks (and the emulator itself, in the case of regs).
>> + */
>> +struct fuzz_state
>> {
>> + /* Emulated CPU state */
>> + unsigned long options;
>> unsigned long cr[5];
>> uint64_t msr[MSR_INDEX_MAX];
>> - struct cpu_user_regs regs;
>> struct segment_register segments[SEG_NUM];
>> - unsigned long options;
>> - unsigned char data[INPUT_SIZE];
>> -} input;
>> -#define DATA_OFFSET offsetof(struct fuzz_corpus, data)
>> + struct cpu_user_regs regs;
>>
>> -/*
>> - * Internal state of the fuzzing harness. Calculated initially from the
>> input
>> - * corpus, and later mutates by the emulation callbacks.
>> - */
>> -struct fuzz_state
>> -{
>> /* Fuzzer's input data. */
>> - struct fuzz_corpus *corpus;
>> +#define DATA_OFFSET offsetof(struct fuzz_state, corpus)
>> + const unsigned char * corpus;
>
> Stray blank after *. Also any reason this can't be uint8_t,
> matching LLVMFuzzerTestOneInput()'s parameter and making
> it possible to avoid the cast you currently use on that
> assignment?
For some reason I thought this would make things uglier; but it actually
works pretty well.
>> @@ -646,11 +634,20 @@ static void set_sizes(struct x86_emulate_ctxt *ctxt)
>> ctxt->addr_size = ctxt->sp_size = 64;
>> else
>> {
>> - ctxt->addr_size = c->segments[x86_seg_cs].db ? 32 : 16;
>> - ctxt->sp_size = c->segments[x86_seg_ss].db ? 32 : 16;
>> + ctxt->addr_size = s->segments[x86_seg_cs].db ? 32 : 16;
>> + ctxt->sp_size = s->segments[x86_seg_ss].db ? 32 : 16;
>> }
>> }
>>
>> +static void setup_state(struct x86_emulate_ctxt *ctxt)
>> +{
>> + struct fuzz_state *s = ctxt->data;
>> +
>> + /* Fuzz all of the emulated state in one go */
>> + if (!input_read(s, s, DATA_OFFSET))
>
> Missing blanks.
Ack
>
>> @@ -761,12 +757,11 @@ static void disable_hooks(struct x86_emulate_ctxt
>> *ctxt)
>> static void sanitize_input(struct x86_emulate_ctxt *ctxt)
>> {
>> struct fuzz_state *s = ctxt->data;
>> - struct fuzz_corpus *c = s->corpus;
>> - struct cpu_user_regs *regs = &c->regs;
>> - unsigned long bitmap = c->options;
>> + struct cpu_user_regs *regs = ctxt->regs;
>> + unsigned long bitmap = s->options;
>>
>> /* Some hooks can't be disabled. */
>> - c->options &= ~((1<<HOOK_read)|(1<<HOOK_insn_fetch));
>> + s->options &= ~((1<<HOOK_read)|(1<<HOOK_insn_fetch));
>
> Mind adding the missing blanks here while you touch this?
Like this?
s->options &= ~((1<<HOOK_read) | (1<<HOOK_insn_fetch));
Thanks,
-George
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |