[libvirt] [PATCH] Remove last usageof PATH_MAX and ban its future use

Daniel P. Berrange berrange at redhat.com
Fri May 25 16:43:53 UTC 2012


From: "Daniel P. Berrange" <berrange at redhat.com>

Remove a number of pointless checks against PATH_MAX and
add a syntax-check rule to prevent its use in future
---
 cfg.mk                             |    5 +++++
 src/security/virt-aa-helper.c      |    4 ++--
 src/storage/storage_backend_scsi.c |    2 +-
 src/xenxs/xen_xm.c                 |    2 --
 tools/virsh.c                      |    7 ++++---
 5 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/cfg.mk b/cfg.mk
index 07fb7b2..534dc67 100644
--- a/cfg.mk
+++ b/cfg.mk
@@ -408,6 +408,11 @@ sc_prohibit_VIR_ERR_NO_MEMORY:
 	halt='use virReportOOMError, not V'IR_ERR_NO_MEMORY		\
 	  $(_sc_search_regexp)
 
+sc_prohibit_PATH_MAX:
+	@prohibit='\<P''ATH_MAX\>'				\
+	halt='dynamically allocate paths, do not use P'ATH_MAX	\
+	  $(_sc_search_regexp)
+
 # Use a subshell for each function, to give the optimal warning message.
 include $(srcdir)/Makefile.nonreentrant
 sc_prohibit_nonreentrant:
diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c
index a5cb85c..7b41d38 100644
--- a/src/security/virt-aa-helper.c
+++ b/src/security/virt-aa-helper.c
@@ -473,7 +473,7 @@ valid_name(const char *name)
      * used to subvert the profile */
     const char *bad = " /[]*";
 
-    if (strlen(name) == 0 || strlen(name) > PATH_MAX - 1)
+    if (strlen(name) == 0)
         return -1;
 
     if (strcspn(name, bad) != strlen(name))
@@ -544,7 +544,7 @@ valid_path(const char *path, const bool readonly)
         "/sys/devices/pci"	/* for hostdev pci devices */
     };
 
-    if (path == NULL || strlen(path) > PATH_MAX - 1) {
+    if (path == NULL) {
         vah_error(NULL, 0, _("bad pathname"));
         return -1;
     }
diff --git a/src/storage/storage_backend_scsi.c b/src/storage/storage_backend_scsi.c
index ae1e19f..465d557 100644
--- a/src/storage/storage_backend_scsi.c
+++ b/src/storage/storage_backend_scsi.c
@@ -251,7 +251,7 @@ virStorageBackendSCSINewLun(virStoragePoolObjPtr pool,
         goto free_vol;
     }
 
-    if (STREQLEN(devpath, vol->target.path, PATH_MAX) &&
+    if (STREQ(devpath, vol->target.path) &&
         !(STREQ(pool->def->target.path, "/dev") ||
           STREQ(pool->def->target.path, "/dev/"))) {
 
diff --git a/src/xenxs/xen_xm.c b/src/xenxs/xen_xm.c
index 93a26f9..bdf46bd 100644
--- a/src/xenxs/xen_xm.c
+++ b/src/xenxs/xen_xm.c
@@ -501,8 +501,6 @@ xenParseXM(virConfPtr conf, int xendConfigVersion,
             /* Extract the source file path*/
             if (!(offset = strchr(head, ',')))
                 goto skipdisk;
-            if ((offset - head) >= (PATH_MAX-1))
-                goto skipdisk;
 
             if (offset == head) {
                 disk->src = NULL; /* No source file given, eg CDROM with no media */
diff --git a/tools/virsh.c b/tools/virsh.c
index ffe6ed2..4492a2b 100644
--- a/tools/virsh.c
+++ b/tools/virsh.c
@@ -15542,11 +15542,12 @@ editWriteToTempFile (vshControl *ctl, const char *doc)
     const char *tmpdir;
     int fd;
 
-    ret = vshMalloc(ctl, PATH_MAX);
-
     tmpdir = getenv ("TMPDIR");
     if (!tmpdir) tmpdir = "/tmp";
-    snprintf (ret, PATH_MAX, "%s/virshXXXXXX.xml", tmpdir);
+    if (virAsprintf(&ret, "%s/virshXXXXXX.xml", tmpdir) < 0) {
+        vshError(ctl, "%s", _("out of memory"));
+        return NULL;
+    }
     fd = mkstemps(ret, 4);
     if (fd == -1) {
         vshError(ctl, _("mkstemps: failed to create temporary file: %s"),
-- 
1.7.10.1




More information about the libvir-list mailing list