diff options
author | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-06-07 15:49:38 +0000 |
---|---|---|
committer | Evgeniy Stepanov <eugeni.stepanov@gmail.com> | 2013-06-07 15:49:38 +0000 |
commit | 4757c47ba7356aec3a7d49e5e929c19159d75a01 (patch) | |
tree | d2ba3525d2e527df355d8fe6b000452fd6e0179c /lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc | |
parent | ea1b27f1dad287b33784b7e8c032182b5b0ddd18 (diff) | |
download | compiler-rt-4757c47ba7356aec3a7d49e5e929c19159d75a01.tar.gz |
[sanitizer] Handle SIOCGIFCONF ioctl.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@183529 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc')
-rwxr-xr-x | lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc index 1de59e723..16b07380b 100755 --- a/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +++ b/lib/sanitizer_common/sanitizer_common_interceptors_ioctl.inc @@ -66,7 +66,7 @@ static void ioctl_table_fill() { _(0x00008903, WRITE, sizeof(int)); // FIOGETOWN _(0x00008904, WRITE, sizeof(int)); // SIOCGPGRP _(0x00008905, WRITE, sizeof(int)); // SIOCATMAR - _(0x00008912, WRITE, struct_ifconf_sz); // SIOCGIFCONF + _(0x00008912, CUSTOM, 0); // SIOCGIFCONF _(0x00008913, WRITE, struct_ifreq_sz); // SIOCGIFFLAGS _(0x00008914, READ, struct_ifreq_sz); // SIOCSIFFLAGS _(0x00008915, WRITE, struct_ifreq_sz); // SIOCGIFADDR @@ -502,7 +502,13 @@ static void ioctl_common_pre(void *ctx, const ioctl_desc *desc, int d, COMMON_INTERCEPTOR_READ_RANGE(ctx, arg, desc->size); if (desc->type != ioctl_desc::CUSTOM) return; - // FIXME: add some ioctls of "CUSTOM" type and handle them here. + switch (request) { + case 0x00008912: { // SIOCGIFCONF + struct __sanitizer_ifconf *ifc = (__sanitizer_ifconf *)arg; + COMMON_INTERCEPTOR_READ_RANGE(ctx, &ifc->ifc_len, sizeof(ifc->ifc_len)); + break; + } + } return; } @@ -514,5 +520,12 @@ static void ioctl_common_post(void *ctx, const ioctl_desc *desc, int res, int d, } if (desc->type != ioctl_desc::CUSTOM) return; - return; // FIXME + switch (request) { + case 0x00008912: { // SIOCGIFCONF + struct __sanitizer_ifconf *ifc = (__sanitizer_ifconf *)arg; + COMMON_INTERCEPTOR_WRITE_RANGE(ctx, ifc->ifc_ifcu.ifcu_req, ifc->ifc_len); + break; + } + } + return; } |