APPLIED[H/I]/Cmnt: [SRU][I][H][F][PATCH 0/1] kernel: unable to read partitions on virtio-block dasd (kvm) (LP: 1950144)
Stefan Bader
stefan.bader at canonical.com
Mon Nov 22 16:33:45 UTC 2021
On 09.11.21 13:47, frank.heimes at canonical.com wrote:
> BugLink: https://bugs.launchpad.net/bugs/1950144
>
> SRU Justification:
>
> [Impact]
>
> * The kernel is unable to read partitions on virtio-block DASD (on KVM).
> That's a severe situation, since it prevents Ubuntu from starting, if installed on a DASD.
> This issue can either occur after a fresh installation or after an upgrade.
>
> * The virtio specification virtio-v1.1-cs01 states: "Transitional devices
> MUST detect Legacy drivers by detecting that VIRTIO_F_VERSION_1 has not
> been acknowledged by the driver."
> And this is what QEMU as of 6.1 has done relying solely on
> VIRTIO_F_VERSION_1 for detecting that.
>
> * But the specification also says: "... the driver MAY read (but MUST
> NOT write) the device-specific configuration fields to check that it can
> support the device ..." before setting FEATURES_OK.
>
> * In this case, any transitional device relying solely on VIRTIO_F_VERSION_1
> for detecting legacy drivers will return data in legacy format.
> In particular, this implies that it's in big endian format for
> big endian guests. This naturally confuses the driver that expects
> little endian in the modern mode.
>
> * VIRTIO_F_VERSION_1 can only be relied on after the feature negotiation is done.
>
> * 'verify' is called before virtio_finalize_features(), so a transitional
> s390 virtio device still serves native endian (i.e. big endian) config space,
> while the driver knows that it is going to accept VERSION_1,
> so when reading the config space, it assumes it got little endian, and byteswaps.
>
> * For QEMU, we can work around the issue by writing out the feature bits with
> VIRTIO_F_VERSION_1 bit set. We (ab)use the finalize_features config op for
> this. This isn't enough to address all vhost devices since these do not get
> the features until FEATURES_OK, however it looks like the affected devices
> actually never handled the endianness for legacy mode correctly, so at least
> that's not a regression.
>
> [Fix]
>
> * 2f9a174f918e29608564c7a4e8329893ab604fb4 2f9a174f918e "virtio: write back F_VERSION_1 before validate"
>
> [Test Case]
>
> * Setup an IBM Z or LinuxONE LPAR with Ubuntu Server 20.04 as KVM host.
>
> * This Ubuntu KVM host can either be installed on FCP or DASD storage,
> but at least one DASD disk need to be reserved for a KVM guest.
>
> * Now hand over the reserved DASD disk (low-level formatted using dasdfmt
> and partitioned using fdasd) using 'virtio-block' to a KVM virtual machine
> (e.g. using a virsh VM config).
>
> * Try to install an Ubuntu KVM virtual machine using this DASD disk,
> that includes the check and read of the partition table.
>
> [Where problems could occur]
>
> * First of all requested commit contains one additional if statement;
> and is due tothat relatively traceable.
>
> * But the change is in /drivers/virtio/virtio.c, means in common code!
>
> * This issue obviously affects big endian systems only.
>
> * But if done wrong, it may effect in worst-case little endian systems, too!
>
> * But the if statement explicitly checks for '!virtio_legacy_is_little_endian()'.
>
> * Only virtio net and virtio blk devices seem to be affected.
>
> * And the commit/solutions was in-depth discussed upstream here:
> https://lore.kernel.org/all/20211011053921.1198936-1-pasic@linux.ibm.com/t/#u
>
> [Other]
>
> * Patches are upstream accepted with since 5.15-rc6
> and tagged for upstream stable #v4.11.
> Hence jammy is not affected.
>
> * Request was to add the patches to focal / 20.04,
> but to avoid potential regressions on upgrades,
> the patches need to be added to impish and hirsute, too.
>
> * Fortunately cherry-picking the commit works cleanly
> from all the affected Ubuntu releases.
>
> Halil Pasic (1):
> virtio: write back F_VERSION_1 before validate
>
> drivers/virtio/virtio.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
Applied to hirsute,impish:linux/master-next. For focal this patch was just
applied for v5.4.155 upstream stable. I have added the bug reference for this
SRU to it. Thanks.
-Stefan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature
Type: application/pgp-signature
Size: 833 bytes
Desc: OpenPGP digital signature
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20211122/2beda377/attachment-0001.sig>
More information about the kernel-team
mailing list