On Wed, May 20, 2020 at 02:16:24PM +0200, Michal Privoznik wrote: > List, > > QEMU has capability to inject various blobs into firmware that configure how > firmware configures itself. However, it can be also used to passthrough a > specific file into the guest. For instance: > > -fw_cfg value=name=opt/com.example,file=/tmp/ign > > will make the /tmp/ign file accessible in the guest under: > > /sys/firmware/qemu_fw_cfg/by_name/opt/com.example/raw > > the @name is important here as it defines what knob is touched. For > instance, /opt/ovmf tweaks OVMF, /bootorder changes the boot order, and so > on. But, if the @name is in /opt/reverse.fully.qualified.domain form than > this is a blob that is exposed into the guest and does not affect ACPI, > SMBIOS, ... And IMO this is what makes the interface horrible. > > While I definitely would not expose the FW configuration knobs (we already > provide a way to configure things like bootroder), the file passthrough is > actually used. So far I have found out that RHCOS uses it to give the guest > so called ignition file (for the sake of argument we can assume it's like a > kickstart that the OS reads on the first boot and configures itself up), but > there are some other potential users (for users it looks intriguing, it's a > simple API that makes a file show up at well defined location inside the > guest). FYI, the QEMU maintainers do not want to see applications using fw-cfg for general purpose data passthrough. This interface is primarily there for QEMU to communicate with the BIOS. There are a limited number of data slots available, so they're reasonably precious, and QEMU is using more over time. This is the key reason why I implemented support for "OEM Strings" feature in the QEMU. From POV of an application, this provides the same functionality as fw_cfg, but via SMBIOS data tables instead, so doesn't have the same limits as fw_cfg. This data can be queried using the "dmidecode" tool in the guest eg "dmidecode --oem-string count", and "dmidecode --oem-string NNN". You could just parse the raw SMBOIS table from sysfs instead and ignore "dmidecode" tool, but that's a bit more gross. Linux exposes some, but not all, SMBIOS fields in sysfs, but lacks OEM strings currently. I made a half-hearted attempt to add linux support for OEM strings in sysfs, but never completed it. > Therefore I vouch for exposing the file passthorugh (and definitely do not > mention firmware in the element or docs in any way, to not encourage users > to use FW tweaking mode). However, before I design something, I'd like to > hear your opinion. I don't object to exposing fw_cfg in the XML, since there are existing users like Ignition that could benefit. I think we should be documenting that its usage is strongly discouraged though, in favour of OEM strings. Regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|