From ebbcc0263969cc4472f4aafea8901154c790a196 Mon Sep 17 00:00:00 2001 From: "Daniel P. Berrange" Date: Fri, 25 May 2012 14:14:07 +0100 Subject: [PATCH] Remove last usage of PATH_MAX and ban its future use Remove a number of pointless checks against PATH_MAX and add a syntax-check rule to prevent its use in future Signed-off-by: Daniel P. Berrange --- 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 07fb7b2b25..534dc67216 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='\' \ + 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 a5cb85c830..7b41d38498 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 ae1e19f8ef..465d5570ae 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 93a26f90d1..bdf46bdf52 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 ffe6ed2b3c..4492a2b539 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"), -- GitLab