From: Michal Privoznik Date: Fri, 25 Nov 2011 12:25:19 +0000 (+0100) Subject: storage: Refetch file status after open X-Git-Tag: v0.9.8-rc1~71 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3ba949e8f4a77aa0d770bb9c7d71225181d88d9a;p=thirdparty%2Flibvirt.git storage: Refetch file status after open This partly reverts my previous patch f88de3eb. We need to get file status after open, as given path could have been symlink, so fstat() will operate on different file than lstat(). --- diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c index d30829db23..d7394e0e0e 100644 --- a/src/storage/storage_backend.c +++ b/src/storage/storage_backend.c @@ -1041,6 +1041,14 @@ virStorageBackendVolOpenCheckMode(const char *path, unsigned int flags) return -1; } + if (fstat(fd, &sb) < 0) { + virReportSystemError(errno, + _("cannot stat file '%s'"), + path); + VIR_FORCE_CLOSE(fd); + return -1; + } + if (S_ISREG(sb.st_mode)) mode = VIR_STORAGE_VOL_OPEN_REG; else if (S_ISCHR(sb.st_mode))