Change QEMU capabilities cache to check ctime instead of mtime

Debian's package manager will preserve mtime timestamp on binaries
from the time they are built, rather than installed. So if a
user downgrades their QEMU dpkg, the libvirt capabilities
cache will not refresh. The fix is to use ctime instead of mtime
since it cannot be faked.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange 2014-03-10 15:50:19 +00:00
parent 10ec072545
commit f5059a929e

View File

@ -259,7 +259,7 @@ struct _virQEMUCaps {
bool usedQMP;
char *binary;
time_t mtime;
time_t ctime;
virBitmapPtr flags;
@ -2796,7 +2796,7 @@ virQEMUCapsPtr virQEMUCapsNewForBinary(const char *binary,
binary);
goto error;
}
qemuCaps->mtime = sb.st_mtime;
qemuCaps->ctime = sb.st_ctime;
/* Make sure the binary we are about to try exec'ing exists.
* Technically we could catch the exec() failure, but that's
@ -2838,7 +2838,7 @@ bool virQEMUCapsIsValid(virQEMUCapsPtr qemuCaps)
if (stat(qemuCaps->binary, &sb) < 0)
return false;
return sb.st_mtime == qemuCaps->mtime;
return sb.st_ctime == qemuCaps->ctime;
}