[libvirt] [PATCH] 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 Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/storage/storage_backend_disk.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c index c4bd6fe..a283a86 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, }; -- 2.1.0

On 10.06.2015 00:19, John Ferlan wrote:
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
Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/storage/storage_backend_disk.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c index c4bd6fe..a283a86 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, };
Correct, mangling partition table is not desired. BTW: couldn't something similar happen with LVM? ACK to this though. Michal

On 06/15/2015 06:12 AM, Michal Privoznik wrote:
On 10.06.2015 00:19, John Ferlan wrote:
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
Signed-off-by: John Ferlan <jferlan@redhat.com> --- src/storage/storage_backend_disk.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/storage/storage_backend_disk.c b/src/storage/storage_backend_disk.c index c4bd6fe..a283a86 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, };
Correct, mangling partition table is not desired. BTW: couldn't something similar happen with LVM?
To a degree this was taken from what for the logical backend handling of a sparse logical volume due to metadata overwrite where yes we were overwriting metadata... I think for the lv's we rely a bit more on lvm to manage the partition and don't have the same issue about knowing whether it's a primary, extended, or logical partition. John
participants (2)
-
John Ferlan
-
Michal Privoznik