Richard W.M. Jones
2018-Jun-17 13:09 UTC
[Libguestfs] v2v: docs: Removed vsyscall support in Debian kernels requiring workaround (RHBZ#1592061).
Debian kernels have disabled legacy vsyscall page support meaning they cannot runs binaries that predate c.2013. To enable it again you must add vsyscall=emulate to the kernel command line when booting. It's unclear why Debian disabled this as according to the documentation: Disabling this option saves about 7K of kernel size and possibly 4K of additional runtime pagetable memory. (presumably the "runtime pagetable memory" is per-process?) It seems to me like a rather poor trade-off for not being able to run binaries which are just 5 years old. While I was writing this patch I imagined a much more complex automatic workaround where we would try to detect if the host kernel had this problem and add the extra vsyscall=emulate parameter automatically. ‘./configure’ might carry a binary (for x86_64 only?) built to use the vsyscall page and try to run it under the host kernel. If it failed it would suggest using the workaround. This solution seems a bit complex, and so this patch simply updates the documentation which hopefully will make the problem discoverable. I don't know how widespread this problem is. We've not seen it in Fedora/RHEL kernels AFAIK. Rich.
Richard W.M. Jones
2018-Jun-17 13:09 UTC
[Libguestfs] [PATCH] v2v: docs: Removed vsyscall support in Debian kernels requiring workaround (RHBZ#1592061).
Thanks: Haigang Li --- v2v/virt-v2v.pod | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/v2v/virt-v2v.pod b/v2v/virt-v2v.pod index 251b4919f..09f505f91 100644 --- a/v2v/virt-v2v.pod +++ b/v2v/virt-v2v.pod @@ -977,6 +977,25 @@ A recommended procedure is, before using virt-v2v, to check that the boot kernel is the best kernel available in the guest (for example by making sure the guest is up-to-date). +=head2 "vsyscall attempted with vsyscall=none" + +When run on a recent Debian host virt-v2v may fail to convert guests +which were created before 2013. In the debugging output you will see +a crash message similar to: + + vsyscall attempted with vsyscall=none ip:... + segfault at ... + +This is caused because Debian removed support for running old binaries +which used the legacy vsyscall page to call into the kernel. + +You can work around this problem by running this command before +running virt-v2v: + + export LIBGUESTFS_APPEND="vsyscall=emulate" + +For more information, see L<https://bugzilla.redhat.com/1592061> + =head1 WINDOWS =head2 Windows E<ge> 8 Fast Startup is incompatible with virt-v2v -- 2.16.2
Pino Toscano
2018-Jun-21 11:19 UTC
Re: [Libguestfs] [PATCH] v2v: docs: Removed vsyscall support in Debian kernels requiring workaround (RHBZ#1592061).
On Sunday, 17 June 2018 15:09:51 CEST Richard W.M. Jones wrote:> Thanks: Haigang Li > --- > v2v/virt-v2v.pod | 19 +++++++++++++++++++ > 1 file changed, 19 insertions(+)LGTM. I guess there is no way to detect that somehow, so libguestfs can start the appliance with the proper parameter already ... -- Pino Toscano
Reasonably Related Threads
- v2v: docs: Removed vsyscall support in Debian kernels requiring workaround (RHBZ#1592061).
- [RFC/PATCH PV_OPS X86_64 14/17] paravirt_ops - vsyscall
- [RFC/PATCH PV_OPS X86_64 14/17] paravirt_ops - vsyscall
- [PATCH] Gerd Hoffman's move-vsyscall-into-user-address-range patch
- [PATCH] Gerd Hoffman's move-vsyscall-into-user-address-range patch