|
From: <sv...@va...> - 2014-09-05 21:11:28
|
Author: sewardj
Date: Fri Sep 5 21:11:18 2014
New Revision: 14473
Log:
Improved argument checking for sys_kcmp. Derived from patch from
Christian Borntraeger. Followup to r14451. Pertains to #338106.
Modified:
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c Fri Sep 5 21:11:18 2014
@@ -10103,10 +10103,22 @@
PRE(sys_kcmp)
{
- PRINT("kcmp ( %ld, %ld, %ld, %lu, %lu )", ARG1, ARG1, ARG3, ARG4, ARG5);
- PRE_REG_READ5(long, "kcmp",
- vki_pid_t, pid1, vki_pid_t, pid2, int, type,
- unsigned long, idx1, unsigned long, idx2);
+ PRINT("kcmp ( %ld, %ld, %ld, %lu, %lu )", ARG1, ARG2, ARG3, ARG4, ARG5);
+ switch (ARG3) {
+ case VKI_KCMP_VM: case VKI_KCMP_FILES: case VKI_KCMP_FS:
+ case VKI_KCMP_SIGHAND: case VKI_KCMP_IO: case VKI_KCMP_SYSVSEM:
+ /* Most of the comparison types don't look at |idx1| or
+ |idx2|. */
+ PRE_REG_READ3(long, "kcmp",
+ vki_pid_t, pid1, vki_pid_t, pid2, int, type);
+ break;
+ case VKI_KCMP_FILE:
+ default:
+ PRE_REG_READ5(long, "kcmp",
+ vki_pid_t, pid1, vki_pid_t, pid2, int, type,
+ unsigned long, idx1, unsigned long, idx2);
+ break;
+ }
}
#undef PRE
Modified: trunk/include/vki/vki-linux.h
==============================================================================
--- trunk/include/vki/vki-linux.h (original)
+++ trunk/include/vki/vki-linux.h Fri Sep 5 21:11:18 2014
@@ -4502,6 +4502,19 @@
#define VKI_MEDIA_IOC_ENUM_LINKS _VKI_IOWR('|', 0x02, struct vki_media_links_enum)
#define VKI_MEDIA_IOC_SETUP_LINK _VKI_IOWR('|', 0x03, struct vki_media_link_desc)
+/* Comparison type */
+enum vki_kcmp_type {
+ VKI_KCMP_FILE,
+ VKI_KCMP_VM,
+ VKI_KCMP_FILES,
+ VKI_KCMP_FS,
+ VKI_KCMP_SIGHAND,
+ VKI_KCMP_IO,
+ VKI_KCMP_SYSVSEM,
+
+ VKI_KCMP_TYPES
+};
+
#endif // __VKI_LINUX_H
/*--------------------------------------------------------------------*/
|