[compiler-rt] r179592 - [sanitizer] Implement wait4 and waitpid syscall hooks.

Evgeniy Stepanov eugeni.stepanov at gmail.com
Mon Apr 22 04:03:54 PDT 2013


Technically, yes, but they will be trivial and closely mirror the
handler code. Essentially, we will be comparing our knowledge of some
system call behavior with ... our knowledge of that same system call
behavior. I don't think there is any value in such tests.


On Thu, Apr 18, 2013 at 8:16 PM, Kostya Serebryany <kcc at google.com> wrote:
> Are tests possible here?
>
>
> On Tue, Apr 16, 2013 at 6:06 AM, Evgeniy Stepanov
> <eugeni.stepanov at gmail.com> wrote:
>>
>> Author: eugenis
>> Date: Tue Apr 16 08:06:20 2013
>> New Revision: 179592
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=179592&view=rev
>> Log:
>> [sanitizer] Implement wait4 and waitpid syscall hooks.
>>
>> Modified:
>>     compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h
>>     compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
>>
>> Modified: compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h?rev=179592&r1=179591&r2=179592&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h (original)
>> +++ compiler-rt/trunk/include/sanitizer/linux_syscall_hooks.h Tue Apr 16
>> 08:06:20 2013
>> @@ -29,11 +29,15 @@ void __sanitizer_syscall_pre_rt_sigpendi
>>  void __sanitizer_syscall_pre_getdents(int fd, void *dirp, int count);
>>  void __sanitizer_syscall_pre_getdents64(int fd, void *dirp, int count);
>>  void __sanitizer_syscall_pre_recvmsg(int sockfd, void *msg, int flags);
>> +void __sanitizer_syscall_pre_wait4(int pid, int* status, int options,
>> void* r);
>> +void __sanitizer_syscall_pre_waitpid(int pid, int *status, int options);
>>
>>  void __sanitizer_syscall_post_rt_sigpending(long res, void *p, size_t s);
>>  void __sanitizer_syscall_post_getdents(long res, int fd, void *dirp, int
>> count);
>>  void __sanitizer_syscall_post_getdents64(long res, int fd, void *dirp,
>> int count);
>>  void __sanitizer_syscall_post_recvmsg(long res, int sockfd, void *msg,
>> int flags);
>> +void __sanitizer_syscall_post_wait4(long res, int pid, int* status, int
>> options, void* r);
>> +void __sanitizer_syscall_post_waitpid(long res, int pid, int *status, int
>> options);
>>
>>  // And now a few syscalls we don't handle yet.
>>
>> @@ -408,11 +412,10 @@ void __sanitizer_syscall_post_recvmsg(lo
>>  #define __sanitizer_syscall_pre_vm86old(...)
>>  #define __sanitizer_syscall_pre_vmsplice(...)
>>  #define __sanitizer_syscall_pre_vserver(...)
>> -#define __sanitizer_syscall_pre_wait4(...)
>>  #define __sanitizer_syscall_pre_waitid(...)
>> -#define __sanitizer_syscall_pre_waitpid(...)
>>  #define __sanitizer_syscall_pre_write(...)
>>  #define __sanitizer_syscall_pre_writev(...)
>> +
>>  #define __sanitizer_syscall_post_accept4(res, ...)
>>  #define __sanitizer_syscall_post_accept(res, ...)
>>  #define __sanitizer_syscall_post_access(res, ...)
>> @@ -784,9 +787,7 @@ void __sanitizer_syscall_post_recvmsg(lo
>>  #define __sanitizer_syscall_post_vm86(res, ...)
>>  #define __sanitizer_syscall_post_vmsplice(res, ...)
>>  #define __sanitizer_syscall_post_vserver(res, ...)
>> -#define __sanitizer_syscall_post_wait4(res, ...)
>>  #define __sanitizer_syscall_post_waitid(res, ...)
>> -#define __sanitizer_syscall_post_waitpid(res, ...)
>>  #define __sanitizer_syscall_post_write(res, ...)
>>  #define __sanitizer_syscall_post_writev(res, ...)
>>
>>
>> Modified:
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc?rev=179592&r1=179591&r2=179592&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
>> (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_common_syscalls.inc
>> Tue Apr 16 08:06:20 2013
>> @@ -56,6 +56,16 @@ struct sanitizer_kernel_msghdr {
>>    unsigned msg_flags;
>>  };
>>
>> +struct sanitizer_kernel_timeval {
>> +  long tv_sec;
>> +  long tv_usec;
>> +};
>> +
>> +struct sanitizer_kernel_rusage {
>> +  struct sanitizer_kernel_timeval ru_timeval[2];
>> +  long ru_long[14];
>> +};
>> +
>>  PRE_SYSCALL(recvmsg)(int sockfd, struct sanitizer_kernel_msghdr *msg,
>>                       int flags) {
>>    PRE_READ(msg, sizeof(*msg));
>> @@ -92,6 +102,34 @@ POST_SYSCALL(getdents64)(long res, int f
>>      POST_WRITE(dirp, res);
>>  }
>>
>> +PRE_SYSCALL(wait4)(int pid, int *status, int options,
>> +                   struct sanitizer_kernel_rusage *r) {
>> +  if (status)
>> +    PRE_WRITE(status, sizeof(*status));
>> +  if (r)
>> +    PRE_WRITE(r, sizeof(*r));
>> +}
>> +
>> +POST_SYSCALL(wait4)(long res, int pid, int *status, int options,
>> +                    struct sanitizer_kernel_rusage *r) {
>> +  if (res > 0) {
>> +    if (status)
>> +      POST_WRITE(status, sizeof(*status));
>> +    if (r)
>> +      POST_WRITE(r, sizeof(*r));
>> +  }
>> +}
>> +
>> +PRE_SYSCALL(waitpid)(int pid, int *status, int options) {
>> +  if (status)
>> +    PRE_WRITE(status, sizeof(*status));
>> +}
>> +
>> +POST_SYSCALL(waitpid)(long res, int pid, int *status, int options) {
>> +  if (res > 0 && status)
>> +    POST_WRITE(status, sizeof(*status));
>> +}
>> +
>>  }  // extern "C"
>>
>>  #undef PRE_SYSCALL
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>



More information about the llvm-commits mailing list