From e97f8c49d6e3978045a596037381cbb74aa12c0c Mon Sep 17 00:00:00 2001 From: Tom Hughes Date: Thu, 26 Jun 2014 11:44:46 +0000 Subject: [PATCH] Handle the HCIGETDEVLIST ioctl. Based on patch from Tomasz Nowak via BZ#335034. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14109 --- NEWS | 1 + coregrind/m_syswrap/syswrap-linux.c | 19 +++++++++++++++++++ docs/internals/3_9_BUGSTATUS.txt | 2 -- include/vki/vki-linux.h | 11 +++++++++++ 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index bdf4fb22d..a693111c5 100644 --- a/NEWS +++ b/NEWS @@ -160,6 +160,7 @@ where XXXXXX is the bug number as listed below. 334705 sendmsg and recvmsg should guard against bogus msghdr fields. 334727 Build fails with -Werror=format-security 334788 clarify doc about --log-file initial program directory +335034 Unhandled ioctl: HCIGETDEVLIST 335155 vgdb, fix error print statement. 335262 arm64: movi 8bit version is not supported 335263 arm64: dmb instruction is not implemented diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 8ea032e6b..e1157e95a 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -6903,6 +6903,17 @@ PRE(sys_ioctl) break; # endif /* defined(VGPV_*_linux_android) */ + case VKI_HCIGETDEVLIST: + if (ARG3) { + struct vki_hci_dev_list_req* dlr = (struct vki_hci_dev_list_req*)ARG3; + PRE_MEM_READ("ioctl(HCIGETDEVLIST)", + (Addr)ARG3, sizeof(struct vki_hci_dev_list_req)); + PRE_MEM_WRITE("ioctl(HCIGETDEVLIST)", + (Addr)ARG3 + sizeof(struct vki_hci_dev_list_req), + dlr->dev_num * sizeof(struct vki_hci_dev_req)); + } + break; + case VKI_HCIINQUIRY: if (ARG3) { struct vki_hci_inquiry_req* ir = (struct vki_hci_inquiry_req*)ARG3; @@ -8005,6 +8016,14 @@ POST(sys_ioctl) break; # endif /* defined(VGPV_*_linux_android) */ + case VKI_HCIGETDEVLIST: + if (ARG3) { + struct vki_hci_dev_list_req* dlr = (struct vki_hci_dev_list_req*)ARG3; + POST_MEM_WRITE((Addr)ARG3 + sizeof(struct vki_hci_dev_list_req), + dlr->dev_num * sizeof(struct vki_hci_dev_req)); + } + break; + case VKI_HCIINQUIRY: if (ARG3) { struct vki_hci_inquiry_req* ir = (struct vki_hci_inquiry_req*)ARG3; diff --git a/docs/internals/3_9_BUGSTATUS.txt b/docs/internals/3_9_BUGSTATUS.txt index a0a4878b4..9e779c382 100644 --- a/docs/internals/3_9_BUGSTATUS.txt +++ b/docs/internals/3_9_BUGSTATUS.txt @@ -168,7 +168,6 @@ For bugs reported before this time, see 3_8_BUGSTATUS.txt ======================================================================== ======================================================================== -335034 Unhandled ioctl: HCIGETDEVLIST 334936 patch to fix false positives on alsa SNDRV_CTL_* ioctls 333628 Out of tree build (is fixed, but needs to land) 335143 Capabilities not supported @@ -180,7 +179,6 @@ For bugs reported before this time, see 3_8_BUGSTATUS.txt 334802 valgrind does not always explain why a given option is bad 334834 PPC64 Little Endian support, patch 2 334836 PPC64 Little Endian support, patch 3 testcase fixes -335034 Unhandled ioctl: HCIGETDEVLIST 335353 expected output of exp-sgcheck/tests/hackedbz2 mismatch with gcc 4.8.1 335441 unhandled ioctl 0x8905 (SIOCATMARK) when running wine under valgrind (patch) 249435 Analyzing wine programs with callgrind triggers a crash (NEEDS CLOSE) diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index 225da00ae..9123e2472 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -2956,6 +2956,17 @@ typedef struct { #define VKI_HCIDEVRESTAT _VKI_IOW('H', 204, int) #define VKI_HCIGETDEVLIST _VKI_IOR('H', 210, int) + +struct vki_hci_dev_req { + __vki_u16 dev_id; + __vki_u32 dev_opt; +}; + +struct vki_hci_dev_list_req { + __vki_u16 dev_num; + struct vki_hci_dev_req dev_req[0]; /* hci_dev_req structures */ +}; + #define VKI_HCIGETDEVINFO _VKI_IOR('H', 211, int) #define VKI_HCIGETCONNLIST _VKI_IOR('H', 212, int) #define VKI_HCIGETCONNINFO _VKI_IOR('H', 213, int)