This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH][BZ #1349] Return requested size for malloc_usable_sizewhen MALLOC_CHECK_ > 0


On 08/31/2012 08:02 AM, Siddhesh Poyarekar wrote:
Hi,

malloc_usable_size returns the usable size in an allocated chunk, which
may be >= the requested size. In the case of MALLOC_CHECK_ being
exported to > 0 however, only the requested size is usable, since a
magic value is written at the end of the request size to trap writes
beyond request bounds. Hence, when MALLOC_CHECK_ is exported to > 0,
malloc_usable_size() should return the request size. The attached patch
does exactly that.

There is also a test case included in the patch to verify that the
problem is fixed. I have verified on Fedora-16 x86_64 that this does
not cause any regressions.

Regards,
Siddhesh

ChangeLog:

	* malloc/Makefile (tests): Add tst-malloc-usable test case.
	(tst-malloc-usable-ENV): Set environment for test case.
	* malloc/hooks.c (malloc_check_get_size): New function to get
	requested size.
	* malloc/malloc.c (musable): Use malloc_check_get_size.
	* malloc/tst-malloc-usable.c: New test case.


> [...]
+static int
+do_test (void)
+{
+  void *p = malloc (7);
+  if (!p)
+    {
+      printf ("memory allocation failed\n");
+      return 1;
+    }
+  memset (p, 0, malloc_usable_size (p));
+  free (p);
+  return 0;

In this case malloc_usable_size () should return >= 7, so I suggest to check for that value as well. The memset/free is a good idea!


Overall the patch looks fine to me but I'd like others to review this as well.

Please resend with the suggested change if you agree with it,

Thanks a lot for tackling this issue!
Andreas
--
 Andreas Jaeger aj@{suse.com,opensuse.org} Twitter/Identica: jaegerandi
  SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg, Germany
   GF: Jeff Hawn,Jennifer Guild,Felix Imendörffer,HRB16746 (AG Nürnberg)
    GPG fingerprint = 93A3 365E CE47 B889 DF7F  FED1 389A 563C C272 A126


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]