[libvirt] [PATCH 1/8] virfile: Add extra check for direct delete in virFileRemove

John Ferlan jferlan at redhat.com
Fri Oct 2 13:41:31 UTC 2015


Unlike create options, if the file to be removed is already in the
pool, then the uid/gid will come from the pool. If it's the same as the
currently running process, then just do the unlink/rmdir directly
rather than going through the fork processing unnecessarily

Signed-off-by: John Ferlan <jferlan at redhat.com>
---
 src/util/virfile.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/util/virfile.c b/src/util/virfile.c
index 2332589..3d7efdc 100644
--- a/src/util/virfile.c
+++ b/src/util/virfile.c
@@ -2316,10 +2316,11 @@ virFileRemove(const char *path,
     int ngroups;
 
     /* If not running as root or if a non explicit uid/gid was being used for
-     * the file/volume, then use unlink directly
+     * the file/volume or the explicit uid/gid matches, then use unlink directly
      */
     if ((geteuid() != 0) ||
-        ((uid == (uid_t) -1) && (gid == (gid_t) -1))) {
+        ((uid == (uid_t) -1) && (gid == (gid_t) -1)) ||
+        (uid == geteuid() && gid == getegid())) {
         if (virFileIsDir(path))
             return rmdir(path);
         else
-- 
2.1.0




More information about the libvir-list mailing list