[Libguestfs] [PATCH] virt-v2v: Catch invalid initrd path
Richard W.M. Jones
rjones at redhat.com
Fri Apr 25 19:58:24 UTC 2014
On Thu, Apr 24, 2014 at 04:43:59PM -0600, Mike Latimer wrote:
> In some cases (specifically, SUSE grub2 environments) it is possible to
> fail to update the block entries in device.map. In turn, this causes an
> invalid path to be returned in perl-Bootloader code, which causes the
> conversion to fail with the following message:
>
> is_file_opts: is_file: is_file_stub: path must start with a / character
>
> This patch prevents the problem by adding device.map (for /boot/grub and
> /boot/grub2) to the list of configurations to remap, then adds a check
> to ensure invalid paths are not passed to is_file_opts.
>
> Note - This is for the existing (perl version) of virt-v2v.
Sorry for the late reply, but I've been buried in the v2v rewrite for
the past few days. I will take this patch into account when I get
back to the Linux conversion part.
Thanks,
Rich.
> ---
> lib/Sys/VirtConvert/Converter/Linux.pm | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/lib/Sys/VirtConvert/Converter/Linux.pm b/lib/Sys/VirtConvert/Converter/Linux.pm
> index e8463bc..b673120 100644
> --- a/lib/Sys/VirtConvert/Converter/Linux.pm
> +++ b/lib/Sys/VirtConvert/Converter/Linux.pm
> @@ -56,7 +56,10 @@ sub get_initrd
> if (defined($initrd)) {
> # If the initrd starts with (hdX,X), remove it.
> $initrd =~ s/^\(hd.*\)//;
> - return $initrd if ($g->is_file_opts($initrd, followsymlinks=>1));
> + # Catch invalid paths by ensuring first character is '/'
> + if ($initrd =~ /^\//) {
> + return $initrd if $g->is_file_opts($initrd, followsymlinks=>1);
> + }
> }
> }
>
> @@ -2672,13 +2675,13 @@ sub _remap_block_devices
>
> # Add standard configuration files to the checklist
> push (@checklist, '/files/etc/fstab/*/spec');
> + push (@checklist, '/files/boot/*/device.map/*'.
> + '[label() != "#comment"]');
>
> # Add grub or grub2 files to the checklist
> if (defined($grub->{grub_conf})) {
> push (@checklist, "/files$grub->{grub_conf}/*/kernel/root");
> push (@checklist, "/files$grub->{grub_conf}/*/kernel/resume");
> - push (@checklist, '/files/boot/grub/device.map/*'.
> - '[label() != "#comment"]');
> }
> elsif (defined($grub->{cfg})) {
> push (@checklist, '/files/etc/sysconfig/grub/GRUB_CMDLINE_LINUX');
> --
> 1.8.4.5
>
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs
--
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-p2v converts physical machines to virtual machines. Boot with a
live CD or over the network (PXE) and turn machines into KVM guests.
http://libguestfs.org/virt-v2v
More information about the Libguestfs
mailing list