bug-grub
[Top][All Lists]
Advanced

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

[bug #28422] [util/misc.c] realpath(path, NULL) leads to segfault


From: Grégoire Sutre
Subject: [bug #28422] [util/misc.c] realpath(path, NULL) leads to segfault
Date: Mon, 28 Dec 2009 00:56:48 +0000
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.5) Gecko/20091123 Iceweasel/3.5.5 (like Firefox/3.5.5; Debian-3.5.5-1)

URL:
  <http://savannah.gnu.org/bugs/?28422>

                 Summary: [util/misc.c] realpath(path, NULL) leads to
segfault
                 Project: GNU GRUB
            Submitted by: gsutre
            Submitted on: Mon 28 Dec 2009 12:56:47 AM GMT
                Category: Compilation
                Severity: Major
                Priority: 5 - Normal
              Item Group: Software Error
                  Status: None
                 Privacy: Public
             Assigned to: None
         Originator Name: 
        Originator Email: 
             Open/Closed: Open
         Discussion Lock: Any
                 Release: 
                 Release: Bazaar - trunk
         Reproducibility: Every Time
         Planned Release: None

    _______________________________________________________

Details:

Hi,

On NetBSD 5.0, grub-mkrelpath segfaults due to a call to realpath of the form
realpath (path, NULL) in make_system_path_relative_to_its_root (file
util/misc.c).

The following patch solves the problem, but a better option might be to use
some autoconf macros?

Thanks for your work,

Gregoire

--- util/misc.c.orig    2009-12-28 01:09:18.000000000 +0100
+++ util/misc.c
@@ -52,6 +52,19 @@
 #include <winioctl.h>
 #endif
 
+/* Determine compile-time limit for realpath().  */
+#include <limits.h>
+#include <sys/param.h>
+#if defined(PATH_MAX)
+# define REALPATH_MAX PATH_MAX
+#elif defined(MAXPATHLEN)
+# define REALPATH_MAX MAXPATHLEN
+#else
+# warning "No compile-time limit found for realpath().  Using 1024."
+# define REALPATH_MAX 1024
+#endif
+
+
 int verbosity = 0;
 
 void
@@ -490,14 +503,10 @@ make_system_path_relative_to_its_root (c
   size_t len;
 
   /* canonicalize.  */
-  p = realpath (path, NULL);
-
-  if (p == NULL)
+  p = (char *) xmalloc (REALPATH_MAX);
+  if (realpath (path, p) == NULL)
     {
-      if (errno != EINVAL)
-       grub_util_error ("failed to get realpath of %s", path);
-      else
-       grub_util_error ("realpath not supporting (path, NULL)");
+      grub_util_error ("failed to get realpath of %s", path);
     }
   len = strlen (p) + 1;
   buf = strdup (p);





    _______________________________________________________

Reply to this item at:

  <http://savannah.gnu.org/bugs/?28422>

_______________________________________________
  Message sent via/by Savannah
  http://savannah.gnu.org/





reply via email to

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