[PATCH v2] avoid malloc(0) in getdents
Mike Frysinger
vapier at gentoo.org
Thu Oct 8 00:41:56 UTC 2009
When getdents finishes processing, it returns 0. Strace uses this to then
try and do malloc(0), but on some systems this will always return NULL.
Since the code won't read the pointer in question if len is 0, then don't
bother calling malloc() and set the pointer to NULL our self.
* file.c (sys_getdents, sys_getdents64): Ignore malloc(0) == NULL.
Signed-off-by: Mike Frysinger <vapier at gentoo.org>
---
v2
- revised code based on feedback from Dmitry
file.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/file.c b/file.c
index c6e3b52..4a2512f 100644
--- a/file.c
+++ b/file.c
@@ -2337,7 +2337,8 @@ sys_getdents(struct tcb *tcp)
return 0;
}
len = tcp->u_rval;
- if ((buf = malloc(len)) == NULL) {
+ buf = len ? malloc(len) : NULL;
+ if (len && !buf) {
tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
fprintf(stderr, "out of memory\n");
return 0;
@@ -2420,7 +2421,8 @@ sys_getdents64(struct tcb *tcp)
return 0;
}
len = tcp->u_rval;
- if ((buf = malloc(len)) == NULL) {
+ buf = len ? malloc(len) : NULL;
+ if (len && !buf) {
tprintf("%#lx, %lu", tcp->u_arg[1], tcp->u_arg[2]);
fprintf(stderr, "out of memory\n");
return 0;
--
1.6.5.rc2
More information about the Strace-devel
mailing list