bug-coreutils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: mgetgroups realloc issues


From: Pádraig Brady
Subject: Re: mgetgroups realloc issues
Date: Fri, 17 Apr 2009 10:17:38 +0100
User-agent: Thunderbird 2.0.0.6 (X11/20071008)

Jim Meyering wrote:
> 
> Your change looks safe, so you might as well do that.
> But if you do make the change, please add an explanatory comment.

updated patch attached.

cheers,
Pádraig.
>From 93a4f892ffe2ce005a32a1b92640f061f36c0d0c Mon Sep 17 00:00:00 2001
From: =?utf-8?q?P=C3=A1draig=20Brady?= <address@hidden>
Date: Fri, 17 Apr 2009 08:25:48 +0100
Subject: [PATCH] mgetgroups: make the use of realloc more robust

* gl/lib/mgetgroups.c (mgetgroups): Handle the unlikely
case of max_n_groups==0 which would have resulted in a
double free and an erroneous error message.
* gl/modules/mgetgroups: Depend on the realloc module
which enforces some requirements of the system realloc().
---
 gl/lib/mgetgroups.c   |    7 ++++++-
 gl/modules/mgetgroups |    1 +
 2 files changed, 7 insertions(+), 1 deletions(-)

diff --git a/gl/lib/mgetgroups.c b/gl/lib/mgetgroups.c
index 736dd87..97ff466 100644
--- a/gl/lib/mgetgroups.c
+++ b/gl/lib/mgetgroups.c
@@ -91,7 +91,12 @@ mgetgroups (char const *username, gid_t gid, GETGROUPS_T 
**groups)
          if (ng < 0 && last_n_groups == max_n_groups)
            max_n_groups *= 2;
 
-         if ((h = realloc_groupbuf (g, max_n_groups)) == NULL)
+         /* Note max_n_groups may always be > 0 since the current GID
+            is included.  However we'll check max_n_groups!=0 in the
+            error check below both to remove this dependence and
+            to show the correct way to handle realloc errors.  */
+         h = realloc_groupbuf (g, max_n_groups);
+         if (h == NULL && max_n_groups)
            {
              int saved_errno = errno;
              free (g);
diff --git a/gl/modules/mgetgroups b/gl/modules/mgetgroups
index 8bce53a..53c8a8d 100644
--- a/gl/modules/mgetgroups
+++ b/gl/modules/mgetgroups
@@ -9,6 +9,7 @@ m4/mgetgroups.m4
 Depends-on:
 getugroups
 xalloc
+realloc
 
 configure.ac:
 gl_MGETGROUPS
-- 
1.5.3.6


reply via email to

[Prev in Thread] Current Thread [Next in Thread]