Yes, it's been broken for ten years. No, it's not a CVE. The problem is that QEMU doesn't have a configuration option for the type of floppy drive you want. It determines that based on the type of diskette inserted at boot time.
If you don't insert one, it always chooses a 1.44MB type. If you want to insert a 2.88MB floppy after boot, you simply cannot. "Wow, who cares?" Good question -- Unfortunately, the virtio-win floppy disk images that Red Hat/fedora ship require a 2.88MB drive, so if you forgot to insert them at boot, you'd have to change your VM configuration and try again. For a one-shot operation, that's kind of obnoxious -- it'd be nice to allow one to just insert the diskette on-demand. "OK, What are you changing in this decades-old device?" (1) Add a new property to allow users to specify what kind of drive they want without relying on magical guessing behavior. Choices are: 120, 144, 288, auto, and none. 120, 144 and 288 refer to 1.20MB, 1.44MB, and 2.88MB drives. auto refers to the auto-detect behavior QEMU currently has. none ... hides the drive. You probably don't want to use this. (2) Add the concept of physical diskette size to QEMU, classifying 120-style diskettes as fundamentally different from 144 and 288 ones. (3) Revamp the automatic guessing heuristic to understand that 2.88MB style drives can accept 1.44MB diskettes. (4) Change the automatic fallback type for the automatic guessing heuristic from 1.44MB to 2.88MB as it is a more diverse drive. (5) A lot of code cleanup in general. "Won't this break everything, you madman?" No: I tested this in MS-DOS 6.22, Fedora 23 and Windows 8.1. All seemed perfectly happy with 2.88MB drives as the default for 1.44 or 2.88MB floppy diskette images. If any guests are discovered to be unable to cope with this default, they are free to choose a 1.44MB drive type at boot, or insert an appropriate diskette. By and large, this appears to improve the diskette compatibility for most guests. ________________________________________________________________________________ For convenience, this branch is available at: https://github.com/jnsnow/qemu.git branch fdc-default https://github.com/jnsnow/qemu/tree/fdc-default This version is tagged fdc-default-v2: https://github.com/jnsnow/qemu/releases/tag/fdc-default-v2 John Snow (10): fdc: move pick_geometry fdc: refactor pick_geometry fdc: add disk field fdc: add default drive type option fdc: do not call revalidate on eject fdc: implement new drive type property fdc: add physical disk sizes fdc: rework pick_geometry qtest/fdc: Support for 2.88MB drives fdc: change auto fallback drive to 288 hw/block/fdc.c | 317 +++++++++++++++++++++++++++++-------------- hw/core/qdev-properties.c | 11 ++ hw/i386/pc.c | 17 +-- include/hw/block/fdc.h | 9 +- include/hw/qdev-properties.h | 1 + qapi/block.json | 16 +++ tests/fdc-test.c | 2 +- 7 files changed, 255 insertions(+), 118 deletions(-) -- 2.4.3