From: John Ferlan Date: Tue, 9 Jun 2015 22:15:39 +0000 (-0400) Subject: storage: Disallow wiping an extended disk partition X-Git-Tag: v1.2.17-rc1~192 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=84020f9a398f739ee2cf7588a7cf3b4b0c077984;p=thirdparty%2Flibvirt.git storage: Disallow wiping an extended disk partition https://bugzilla.redhat.com/show_bug.cgi?id=1225694 Check if the disk partition to be wiped is the extended partition, if so then disallow it. Do this via changing the wipeVol backend to check the volume before passing to the common virStorageBackendVolWipeLocal --- diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c index c4bd6fe2c5..a283a86bb4 100644 --- a/src/storage/storage_backend_disk.c +++ b/src/storage/storage_backend_disk.c @@ -851,6 +851,24 @@ virStorageBackendDiskBuildVolFrom(virConnectPtr conn, } +static int +virStorageBackendDiskVolWipe(virConnectPtr conn, + virStoragePoolObjPtr pool, + virStorageVolDefPtr vol, + unsigned int algorithm, + unsigned int flags) +{ + if (vol->source.partType != VIR_STORAGE_VOL_DISK_TYPE_EXTENDED) + return virStorageBackendVolWipeLocal(conn, pool, vol, algorithm, flags); + + /* Wiping an extended partition is not support */ + virReportError(VIR_ERR_NO_SUPPORT, + _("cannot wipe extended partition '%s'"), + vol->target.path); + return -1; +} + + virStorageBackend virStorageBackendDisk = { .type = VIR_STORAGE_POOL_DISK, @@ -862,5 +880,5 @@ virStorageBackend virStorageBackendDisk = { .buildVolFrom = virStorageBackendDiskBuildVolFrom, .uploadVol = virStorageBackendVolUploadLocal, .downloadVol = virStorageBackendVolDownloadLocal, - .wipeVol = virStorageBackendVolWipeLocal, + .wipeVol = virStorageBackendDiskVolWipe, };