[libvirt] [TCK PATCH] block devices: allow specification of size for safety
Dave Allan
dallan at redhat.com
Wed May 5 19:09:55 UTC 2010
On Wed, May 05, 2010 at 08:54:35PM +0200, Jim Meyering wrote:
> Eric Blake wrote:
> > I was getting failures of domain/103-blockdev-save-restore.t when
> > connecting as qemu:///session, since my uid could stat /dev/sdb
> > but not open it. That test now skips for unprivileged users, as well
> > as adds a layer of sanity checking against expected size to avoid
> > trashing the wrong device.
Can we provide the option to specify the device serial number so that
it's really impossible to trash the wrong device?
> > * conf/default.cfg (host_block_devices): Document optional size.
> > * lib/Sys/Virt/TCK.pm (get_host_block_device): If optional size is
> > supplied, skip a device that does not match. Also, avoid devices
> > that can't be opened.
> > ---
> >
> > Go easy on me - I'm not that fluent in perl (yet); if there's
> > a better way to do the sanity check, I'm all ears.
>
> The overall approach sounds fine, from my limited perspective.
>
> > diff --git a/lib/Sys/Virt/TCK.pm b/lib/Sys/Virt/TCK.pm
> ...
> > - return $self->config("host_block_devices/[$devindex]", undef);
> > + my $device = $self->config("host_block_devices/[$devindex]/path", undef);
> > + my $size = $self->config("host_block_devices/[$devindex]/size", 0);
> > +
> > + if (!defined $device) {
> > + $device = $self->config("host_block_devices/[$devindex]", undef);
> > + }
>
> This can be equivalently (idiomatically) written as:
>
> $device ||= $self->config("host_block_devices/[$devindex]", undef);
>
> I prefer that, since it eliminates one use of "$device".
>
> > + if ($size) {
> > + sysopen(BLK, "$device", O_RDONLY) or return undef;
> > + return undef unless sysseek(BLK, 0, SEEK_END) == $size * 1024;
> > + close(BLK);
> > + }
>
> (Note no need for double quotes around $device;
> Leaving parens off of some built-ins like "close" is a personal
> preference (less syntax is better), but obviously keeping in sync
> with the prevailing style is more important)
>
> This is similar, but doesn't leave BLK open upon failure or size mismatch:
>
> if ($size) {
> my $match = (sysopen (BLK, $device, O_RDONLY)
> && sysseek (BLK, 0, SEEK_END) == $size * 1024);
> close BLK;
> $match or return undef;
> }
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
More information about the libvir-list
mailing list