GSoC status report - #3 of 10

Srikavin Ramkumar srikavinramkumar at
Tue Jun 29 06:57:02 UTC 2021


This is status update #3, for real this time.


Last week, I continued to work on the code generation. I've added support for
pointer types (such as strings, paths, int *, etc). A little more work needs to
be done for cases with more than 1 'out' pointer since we need to store the values
at the given address (using set_tcb_priv_data) when entering the syscall and then
decode the value after exiting the syscall. 

As an example, the following syzlang definition

    read(fd fd, buf ptr[out, stringnoz[ref[@ret]]], count size_t) int

is automatically transformed into the following:

    // Debug Location: defs/example.syzlang:1:1 Node Type: AST_SYSCALL
        if (entering(tcp)) {
            /* arg: fd (fd) */
            printfd(tcp, (tcp)->u_arg[0]);
            return 0;
        /* arg: buf (stringnoz *) */
        if (syserror(tcp)) {
        } else {
            printstrn(tcp, (tcp)->u_arg[1], (tcp)->u_rval);
        /* arg: count (size_t) */
        PRINT_VAL_U((size_t) (tcp)->u_arg[2]);
        return RVAL_DECODED;
I also added support for flags using existing xlat definitions:

    access(file ptr[in, path], flags or_flags[access_modes, ?_OK])

is converted into the following:

    // Debug Location: defs/example.syzlang:1:1 Node Type: AST_SYSCALL
        /* arg: file (char *) */
        printpath(tcp, (tcp)->u_arg[0]);

        /* arg: flags (or_flags) */
        printflags(access_modes, (tcp)->u_arg[1], "?_OK");

        return RVAL_DECODED;

I also improved the output of warning messages during the codegen phase, and
added return flags (like RVAL_FD, RVAL_TGID, etc.) when a syscall returns the
corresponding type:
    gettid() tid

results in

    // Debug Location: defs/example.syzlang:1:1 Node Type: AST_SYSCALL
        return RVAL_DECODED | RVAL_TID;

 - Continue working on the code generation
   - Improve support for pointer types
   - Add support for variant syscall types where argument types depend on the
     first argument (like prctl and ioctl))
      - Preprocess the AST to group variants together
      - Use const parameters to distinguish variants and generate a decoder that
        delegates to generated variant decoders based on syscall arg values.
   - Add way to define decoders for specified types in syzlang files
   - Automatically generate struct decoding for simple structs
 - Incorporate code generation with the build process
 - Finalize CLI arguments, and add usage documentation

-- Srikavin

More information about the Strace-devel mailing list