|
From: <sv...@va...> - 2014-09-29 21:55:42
|
Author: florian
Date: Mon Sep 29 22:55:34 2014
New Revision: 14591
Log:
Change VG_(getgroups):
(a) it is an error to pass in a size < 0, independent of platform
(b) getgroups does not return a value > size; no need to check for that.
Modified:
branches/BUF_REMOVAL/coregrind/m_libcproc.c
Modified: branches/BUF_REMOVAL/coregrind/m_libcproc.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_libcproc.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_libcproc.c Mon Sep 29 22:55:34 2014
@@ -535,18 +535,16 @@
platform. */
Int VG_(getgroups)( Int size, UInt* list )
{
+ if (size < 0) return -1;
+
# if defined(VGP_x86_linux) || defined(VGP_ppc32_linux) \
|| defined(VGP_mips64_linux)
Int i;
SysRes sres;
- UShort list16[64];
- if (size < 0) return -1;
- if (size > 64) size = 64;
+ UShort list16[size];
sres = VG_(do_syscall2)(__NR_getgroups, size, (Addr)list16);
if (sr_isError(sres))
return -1;
- if (sr_Res(sres) > size)
- return -1;
for (i = 0; i < sr_Res(sres); i++)
list[i] = (UInt)list16[i];
return sr_Res(sres);
|