Skip to content

[linux] fill in rest of system call table #92

@derekbruening

Description

@derekbruening

From derek.br...@gmail.com on December 10, 2010 17:57:32

PR 406302

I wrote a new script to lay out an initial linux system call table but there are many details missing.
For the missing writes we can add them lazily as they'll show up as false positives.
But the missing reads will be false negatives and we should proactively add those.

xref PR 416456 driving completion of some syscall entries
of particular note from that case is fcntl64: even when the sys_ declaration shows an arg
it may be optional (xref PR 406355)

Update on 2009/07/07 20:39:04

     PR 406302: fill in more of linux syscall table
     * added SYS__sysctl special-case handling
     * added SYS_fcntl* 3rd arg being ignored in certain cases

     PR 425498: sbb reg,reg defines reg even if undefined previously
     * from PR 416456 though turned out not to cause false pos there
     * fix here will have to be more sophisticated once we have PR 425622

Update on 2009/07/14 09:43:51

     PR 406302: [linux] fill in rest of system call table
     * added stats on syscalls executed so we can approach false positives
       from that angle

Update on 2009/07/14 15:43:55

     PR 406302: [linux] fill in rest of system call table
     Filled in data for 7 syscalls that were incomplete.
     * ioctl: very painful
     * socketcall: painful
     * poll
     * rt_sigaction
     * mmap2
     * stat64
     * lstat64

Update on 2009/07/23 12:36:08

     Fixed errors that have cropped up on spec bmarks:

     PR 447413: 75 UNADDR on spec bmarks: mmap merged w/ DR bss
     * mem walk looks for region that starts inside DR lib but extends beyond
       (merged by kernel) and splits it up

     PR 406302: [linux] fill in rest of system call table
     * sigaction struct often doesn't have sa_restorer set if flags doesn't have
       SA_RESTORER => special-cased it

Update on 2010/02/03 07:15:31

PR 406302: [linux] fill in rest of system call table

  • SYS_socketcall was not correctly accounting for all memory read and
    written by the kernel:
    • sockaddr defined fields vary by family
    • sockaddr write length not known until post-syscall
    • read/readfrom data length not known until post-syscall
    • msg_iov was ignored
    • msg_name was ignored
    • msg_control was ignored
  • added SYS_ipc support. SYS_ipc is a multiplexing syscall for sem_, msg_,
    and shm* ipc features, essentially containing quite a few syscalls inside
    it
  • added MEMREF_CHECK_UNADDRESSABLE for pre-write checks

I tested a few client-server sample apps, but do not have
tests for all the syscall paths here. I filed PR 519781 to cover adding
syscall tests.

Update on 2010/02/18 20:11:48

PR 406302: [linux] fill in rest of system call table

  • SYS_select and SYS_prctl: added support for them,
    in addition to SYS_pselect6 since nearly identical to SYS_select.
  • PR 519781 covers testing the corner cases here

Original issue: http://code.google.com/p/drmemory/issues/detail?id=92

Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions