]> xenbits.xensource.com Git - libvirt.git/commitdiff
qemu: Refuse to use "ps2" on machines that do not have this bus
authorThomas Huth <thuth@redhat.com>
Wed, 15 Jan 2020 12:23:56 +0000 (13:23 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 23 Jan 2020 11:57:03 +0000 (12:57 +0100)
The "ps2" bus is only available on certain machines like x86. On
machines like s390x, we should refuse to add a device to this bus
instead of silently ignoring it.

Looking at the QEMU sources, PS/2 is only available if the QEMU binary
has the "i8042" device, so let's check for that and only allow "ps2"
devices if this QEMU device is available, or if we're on x86 anyway
(so we don't have to fake the QEMU_CAPS_DEVICE_I8042 capability in
all the tests that use <input ... bus='ps2'/> in their xml data).

Reported-by: Sebastian Mitterle <smitterl@redhat.com>
Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1763191
Signed-off-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
37 files changed:
src/qemu/qemu_capabilities.c
src/qemu/qemu_capabilities.h
src/qemu/qemu_domain.c
tests/qemucapabilitiesdata/caps_1.5.3.x86_64.xml
tests/qemucapabilitiesdata/caps_1.6.0.x86_64.xml
tests/qemucapabilitiesdata/caps_1.7.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.1.1.x86_64.xml
tests/qemucapabilitiesdata/caps_2.10.0.ppc64.xml
tests/qemucapabilitiesdata/caps_2.10.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.11.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.12.0.ppc64.xml
tests/qemucapabilitiesdata/caps_2.12.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.4.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.5.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.6.0.ppc64.xml
tests/qemucapabilitiesdata/caps_2.6.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.7.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.8.0.x86_64.xml
tests/qemucapabilitiesdata/caps_2.9.0.ppc64.xml
tests/qemucapabilitiesdata/caps_2.9.0.x86_64.xml
tests/qemucapabilitiesdata/caps_3.0.0.ppc64.xml
tests/qemucapabilitiesdata/caps_3.0.0.x86_64.xml
tests/qemucapabilitiesdata/caps_3.1.0.ppc64.xml
tests/qemucapabilitiesdata/caps_3.1.0.x86_64.xml
tests/qemucapabilitiesdata/caps_4.0.0.ppc64.xml
tests/qemucapabilitiesdata/caps_4.0.0.x86_64.xml
tests/qemucapabilitiesdata/caps_4.1.0.x86_64.xml
tests/qemucapabilitiesdata/caps_4.2.0.ppc64.xml
tests/qemucapabilitiesdata/caps_4.2.0.x86_64.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live+ccw-virtio.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-explicit.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml
tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live.xml

index 498348ad585f32162374667d47cb024099af54b6..b0854deadad018095cb93be701b3cf2b2956d666 100644 (file)
@@ -554,6 +554,9 @@ VIR_ENUM_IMPL(virQEMUCaps,
               "savevm-monitor-nodes",
               "drive-nvme",
               "smp-dies",
+
+              /* 350 */
+              "i8042",
     );
 
 
@@ -1245,6 +1248,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] = {
     { "vhost-user-vga", QEMU_CAPS_DEVICE_VHOST_USER_VGA },
     { "ramfb", QEMU_CAPS_DEVICE_RAMFB },
     { "max-arm-cpu", QEMU_CAPS_ARM_MAX_CPU },
+    { "i8042", QEMU_CAPS_DEVICE_I8042 },
 };
 
 static struct virQEMUCapsStringFlags virQEMUCapsDevicePropsVirtioBalloon[] = {
index ebcb0d13738b8ed0f86d78d31b17fc74394b4038..ebfdb4b9810ec3a838d52078549ff0d4415fe648 100644 (file)
@@ -536,6 +536,9 @@ typedef enum { /* virQEMUCapsFlags grouping marker for syntax-check */
     QEMU_CAPS_DRIVE_NVME, /* -drive file.driver=nvme */
     QEMU_CAPS_SMP_DIES, /*  -smp dies= */
 
+    /* 350 */
+    QEMU_CAPS_DEVICE_I8042, /* PS/2 controller */
+
     QEMU_CAPS_LAST /* this must always be the last item */
 } virQEMUCapsFlags;
 
index ce0c5b78cd43c4ce4f06e5b85a0e5e026e93622f..38addc7b61bc56f7b2a08dd33f92e2e77741bd3b 100644 (file)
@@ -8039,13 +8039,21 @@ qemuDomainDeviceDefValidateGraphics(const virDomainGraphicsDef *graphics,
 
 static int
 qemuDomainDeviceDefValidateInput(const virDomainInputDef *input,
-                                 const virDomainDef *def G_GNUC_UNUSED,
+                                 const virDomainDef *def,
                                  virQEMUCapsPtr qemuCaps)
 {
     const char *baseName;
     int cap;
     int ccwCap;
 
+    if (input->bus == VIR_DOMAIN_INPUT_BUS_PS2 && !ARCH_IS_X86(def->os.arch) &&
+        !virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_I8042)) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("%s is not supported by this QEMU binary"),
+                       virDomainInputBusTypeToString(input->bus));
+        return -1;
+    }
+
     if (input->bus != VIR_DOMAIN_INPUT_BUS_VIRTIO)
         return 0;
 
index f2257d6bd27fd90adc2556ca96019b4bdead4706..b57cb2ab59d754720b5f425f261eabc120475f48 100644 (file)
@@ -84,6 +84,7 @@
   <flag name='isa-serial'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>1005003</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100245</microcodeVersion>
index 3a70ec8146a11ece64d9bb24c12a421165faec40..5d0a14a5dbcbcc3d8b28bc1e9bccf946bcf0ec8f 100644 (file)
@@ -89,6 +89,7 @@
   <flag name='isa-serial'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>1006000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100243</microcodeVersion>
index cbb29ef2de72d69a4c0f4e48283fb1b0172292f3..c196fe5e45dfbf77607781b3023efd020959a5f1 100644 (file)
@@ -91,6 +91,7 @@
   <flag name='isa-serial'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>1007000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100244</microcodeVersion>
index a6d0981224161881a10fafc961093424ec97cb24..1edcaa4657ca13f5d3f4cc502a638b7badbabd96 100644 (file)
   <flag name='isa-serial'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>2001001</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100240</microcodeVersion>
index 5a57cb7760719cb0939653687c947b9422b2fd90..b95a9d42adbcba215b36dc2fa2384088ba4bc184 100644 (file)
   <flag name='vhost-vsock'/>
   <flag name='egl-headless'/>
   <flag name='iothread.poll-max-ns'/>
+  <flag name='i8042'/>
   <version>2010000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900287</microcodeVersion>
index 53872abf2f16420d0972fc9eb1daeb6d5253f0a4..7ebe97b6ab28f261875ce452bd0af25009e362d4 100644 (file)
   <flag name='egl-headless'/>
   <flag name='iothread.poll-max-ns'/>
   <flag name='x86-max-cpu'/>
+  <flag name='i8042'/>
   <version>2010000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100287</microcodeVersion>
index f70335db8fdf08c57b88e9785db5896d7a27171b..b8eb3abd406022607a52b9f74a0ccd75b4e85150 100644 (file)
   <flag name='egl-headless'/>
   <flag name='iothread.poll-max-ns'/>
   <flag name='x86-max-cpu'/>
+  <flag name='i8042'/>
   <version>2011000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100288</microcodeVersion>
index 74c80d2fe956992f30c508614f3110e45806ada8..38a3103c4ae0b79a472ec033c86bf48389233bd2 100644 (file)
   <flag name='iothread.poll-max-ns'/>
   <flag name='memory-backend-file.align'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900289</microcodeVersion>
index b51cee9f28e0d76ede2de4688e8e3e59a3a8536f..0c30cc75da94a8d29b426ca10dbafd8250beef1c 100644 (file)
   <flag name='memory-backend-file.align'/>
   <flag name='x86-max-cpu'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>2011090</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100289</microcodeVersion>
index 86d85faa736b202ec788bda261b668e930cf3bfa..9b486effe1e952803cb43a0a9955708a20644a2a 100644 (file)
   <flag name='sdl-gl'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>2004000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100242</microcodeVersion>
index b21723830711480db0b58a938fdf7e8bbc827708..147b179fdbd03b4b1fe369a220d458ccfee754be 100644 (file)
   <flag name='sdl-gl'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>2005000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100243</microcodeVersion>
index 862464c2f0fbbd3c038c2147c1313f144822c757..deb5c287909fd7a1ef9c40a621f6693d03a65adb 100644 (file)
   <flag name='nbd-tls'/>
   <flag name='sdl-gl'/>
   <flag name='hda-output'/>
+  <flag name='i8042'/>
   <version>2006000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900244</microcodeVersion>
index 6b96e37a16ff9d0d3cdd6c61bf0006dfe7d0a277..fc508aba8ad1cbc78a51173bf87731578b493ad2 100644 (file)
   <flag name='sdl-gl'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>2006000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100244</microcodeVersion>
index bc1359b0dde9d74fb0ca0dd1f81467a280f60fb7..ed199057dcba7ede1cb9cb2468d4676cb4d41975 100644 (file)
   <flag name='sdl-gl'/>
   <flag name='hda-output'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>2007000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100245</microcodeVersion>
index c7f3be3a1b607ad3909ab17c989fff0d2a3277f1..489b67f99a258a8567f5293d236f663fe826349c 100644 (file)
   <flag name='hda-output'/>
   <flag name='vhost-vsock'/>
   <flag name='mch'/>
+  <flag name='i8042'/>
   <version>2008000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100246</microcodeVersion>
index a00d4b3d4c5886e873d7e7a91506d2297cdb4020..3bc6ec8dab68bb49e33023ca2c88db90f68a9cd9 100644 (file)
   <flag name='blockdev-del'/>
   <flag name='vhost-vsock'/>
   <flag name='iothread.poll-max-ns'/>
+  <flag name='i8042'/>
   <version>2009000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900247</microcodeVersion>
index 3d96f5f5b3dc115aba2195176d60fab2e5d80861..83fc6cde976e1be03bc08ea2c05b071774aba2df 100644 (file)
   <flag name='mch'/>
   <flag name='iothread.poll-max-ns'/>
   <flag name='x86-max-cpu'/>
+  <flag name='i8042'/>
   <version>2009000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100247</microcodeVersion>
index 3b5a021dcf8b248b50fd32b0985cadf0d9cefd69..9a0b9c05c2d7482b3685f999daaec6cd1845ef2c 100644 (file)
   <flag name='bochs-display'/>
   <flag name='ramfb'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>2012050</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900239</microcodeVersion>
index c955994ac0b57c7a76f08f03782ac5944dbfbf38..9d122156004aca845b74d0da2d9700ee8944fe00 100644 (file)
   <flag name='bochs-display'/>
   <flag name='ramfb'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>3000000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100239</microcodeVersion>
index cab38d442b5777a469bd2e77c93b0be5d09c1d1f..2cf2e4f655c791bd128e43d09e687ce8e170b386 100644 (file)
   <flag name='overcommit'/>
   <flag name='bochs-display'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>3000091</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900240</microcodeVersion>
index 3e89d7f93358648efa1aab67add6ac7686a1eef9..5df9b5ef1b3d02a1f9e6455e4d84170d8b21d2bc 100644 (file)
   <flag name='bochs-display'/>
   <flag name='ramfb'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>3000092</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100240</microcodeVersion>
index 4e13888042e00b55045373900da509a0d9bfb685..964f02b062e1f52af9221adfd891383c70dff36d 100644 (file)
   <flag name='migration-file-drop-cache'/>
   <flag name='machine.pseries.cap-ccf-assist'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>4000000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900240</microcodeVersion>
index ba32d4c59205062290469afc865adb31f3beb770..d545c3d9e8074a67ef7d5466a364f112fcd9ff5a 100644 (file)
   <flag name='migration-file-drop-cache'/>
   <flag name='ramfb'/>
   <flag name='drive-nvme'/>
+  <flag name='i8042'/>
   <version>4000000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100240</microcodeVersion>
index 54b797a86a113cef821e2852490c0ea080853cc1..6e6deca477b512c00d77a3ac2c4fb065eba8e4c9 100644 (file)
   <flag name='blockdev-file-dynamic-auto-read-only'/>
   <flag name='drive-nvme'/>
   <flag name='smp-dies'/>
+  <flag name='i8042'/>
   <version>4001000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100241</microcodeVersion>
index 7c62546d748454c03ae7b09f9ae31bbf7f21a1b1..cbd082b683c715b3779fd4260c139ac74a404e57 100644 (file)
   <flag name='blockdev-file-dynamic-auto-read-only'/>
   <flag name='drive-nvme'/>
   <flag name='smp-dies'/>
+  <flag name='i8042'/>
   <version>4001050</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>42900242</microcodeVersion>
index afd59a269dc652239bb21875808ccdd8d2df0633..c41df184be106bdb73e4bfad182d590e42f0d260 100644 (file)
   <flag name='savevm-monitor-nodes'/>
   <flag name='drive-nvme'/>
   <flag name='smp-dies'/>
+  <flag name='i8042'/>
   <version>4002000</version>
   <kvmVersion>0</kvmVersion>
   <microcodeVersion>43100242</microcodeVersion>
index f501cde333c92c26321008913551ab44b08cd81c..59c969e0f2bce04b612b8ad806c8a8022c75889b 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'/>
     <panic model='s390'/>
   </devices>
index 301658178f6f28a72bdc8acc7ce0fd6894336a5e..d10b29be7ee11103723144a547782c77ec69b7ea 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'>
       <alias name='balloon0'/>
     </memballoon>
index 223e929ad50d0f7ecce6e43ad73ab33964308b94..6eadbdcd188dd9a21b8cefc028d8010f5043aeed 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'/>
     <panic model='s390'/>
   </devices>
index c745d485583e096f63d5f494d6bd38e3719ae4f1..68561b50a379e2524011e2a08eefdfd76533b1ee 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'/>
     <panic model='s390'/>
   </devices>
index 3189294b65af8eae23736e4c73d8cee2d77ef75f..0900f3c8e358f38e03cc2c556859bef5c62f6f9b 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'/>
     <panic model='s390'/>
   </devices>
index 3189294b65af8eae23736e4c73d8cee2d77ef75f..0900f3c8e358f38e03cc2c556859bef5c62f6f9b 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'/>
     <panic model='s390'/>
   </devices>
index edf57fcd3f4b826c9d2e43a257a62dae76cc1d50..31979c40f04a926a0a09cdb892871077a54e6ebb 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'/>
     <panic model='s390'/>
   </devices>
index b97bba78c60b0f51a974b6da24bc588589e83f55..844b95194017ee4d5aa96d53cb695a575f9c87f4 100644 (file)
       <alias name='virtio-serial0'/>
       <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
     </controller>
-    <input type='mouse' bus='ps2'>
-      <alias name='input0'/>
-    </input>
-    <input type='keyboard' bus='ps2'>
-      <alias name='input1'/>
-    </input>
     <memballoon model='none'/>
     <panic model='s390'/>
   </devices>