]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
root_squash: virFileOperation may fail with EPERM too
authorDan Kenigsberg <danken@redhat.com>
Tue, 19 Oct 2010 13:26:32 +0000 (15:26 +0200)
committerDaniel Veillard <veillard@redhat.com>
Tue, 19 Oct 2010 13:26:32 +0000 (15:26 +0200)
Over root-squashing nfs, when virFileOperation() is called as uid==0,
it may fail with EACCES, but also with EPERM, due to
virFileOperationNoFork()'s failed attemp to chown a writable file.

qemudDomainSaveFlag() should expect this case, too.

src/qemu/qemu_driver.c

index 7204ac8efb937051695e509efe6c539ffa627285..abd8e9d23715052111143327cb66c93270ea4649 100644 (file)
@@ -5402,13 +5402,13 @@ static int qemudDomainSaveFlag(struct qemud_driver *driver, virDomainPtr dom,
                                   qemudDomainSaveFileOpHook, &hdata,
                                   0)) < 0) {
             /* If we failed as root, and the error was permission-denied
-               (EACCES), assume it's on a network-connected share where
-               root access is restricted (eg, root-squashed NFS). If the
+               (EACCES or EPERM), assume it's on a network-connected share
+               where root access is restricted (eg, root-squashed NFS). If the
                qemu user (driver->user) is non-root, just set a flag to
                bypass security driver shenanigans, and retry the operation
                after doing setuid to qemu user */
 
-            if ((rc != -EACCES) ||
+            if (((rc != -EACCES) && (rc != -EPERM)) ||
                 driver->user == getuid()) {
                 virReportSystemError(-rc, _("Failed to create domain save file '%s'"),
                                      path);