render / rpms / libvirt

Forked from rpms/libvirt a year ago
Clone
9c6c51
From c2afbedc310ac1a65a5ee96c8fa4103e926483c4 Mon Sep 17 00:00:00 2001
9c6c51
Message-Id: <c2afbedc310ac1a65a5ee96c8fa4103e926483c4@dist-git>
9c6c51
From: Han Han <hhan@redhat.com>
9c6c51
Date: Tue, 28 Aug 2018 10:30:51 +0200
9c6c51
Subject: [PATCH] conf: Add validation of input devices
9c6c51
MIME-Version: 1.0
9c6c51
Content-Type: text/plain; charset=UTF-8
9c6c51
Content-Transfer-Encoding: 8bit
9c6c51
9c6c51
https://bugzilla.redhat.com/show_bug.cgi?id=1591151
9c6c51
9c6c51
Add function virDomainInputDefValidate to validate input devices.
9c6c51
Make sure evdev attribute of source element is not used by mouse,
9c6c51
keyboard, and tablet input device.
9c6c51
9c6c51
Signed-off-by: Han Han <hhan@redhat.com>
9c6c51
Reviewed-by: John Ferlan <jferlan@redhat.com>
9c6c51
(cherry picked from commit deb057fd364cb57614c6dea7b05c247231f9ae4f)
9c6c51
Signed-off-by: Ján Tomko <jtomko@redhat.com>
9c6c51
9c6c51
https: //bugzilla.redhat.com/show_bug.cgi?id=1591240
9c6c51
Reviewed-by: Andrea Bolognani <abologna@redhat.com>
9c6c51
---
9c6c51
 src/conf/domain_conf.c | 27 ++++++++++++++++++++++++++-
9c6c51
 1 file changed, 26 insertions(+), 1 deletion(-)
9c6c51
9c6c51
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
9c6c51
index 51a79ad8b1..16e52d149d 100644
9c6c51
--- a/src/conf/domain_conf.c
9c6c51
+++ b/src/conf/domain_conf.c
9c6c51
@@ -5760,6 +5760,29 @@ virDomainVsockDefValidate(const virDomainVsockDef *vsock)
9c6c51
     return 0;
9c6c51
 }
9c6c51
 
9c6c51
+static int
9c6c51
+virDomainInputDefValidate(const virDomainInputDef *input)
9c6c51
+{
9c6c51
+    switch ((virDomainInputType) input->type) {
9c6c51
+        case VIR_DOMAIN_INPUT_TYPE_MOUSE:
9c6c51
+        case VIR_DOMAIN_INPUT_TYPE_TABLET:
9c6c51
+        case VIR_DOMAIN_INPUT_TYPE_KBD:
9c6c51
+        case VIR_DOMAIN_INPUT_TYPE_LAST:
9c6c51
+            if (input->source.evdev) {
9c6c51
+                 virReportError(VIR_ERR_XML_ERROR, "%s",
9c6c51
+                                _("setting source evdev path only supported for "
9c6c51
+                                  "passthrough input devices"));
9c6c51
+                 return -1;
9c6c51
+            }
9c6c51
+            break;
9c6c51
+
9c6c51
+        case VIR_DOMAIN_INPUT_TYPE_PASSTHROUGH:
9c6c51
+            break;
9c6c51
+    }
9c6c51
+
9c6c51
+    return 0;
9c6c51
+}
9c6c51
+
9c6c51
 
9c6c51
 static int
9c6c51
 virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
9c6c51
@@ -5799,9 +5822,11 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
9c6c51
     case VIR_DOMAIN_DEVICE_VSOCK:
9c6c51
         return virDomainVsockDefValidate(dev->data.vsock);
9c6c51
 
9c6c51
+    case VIR_DOMAIN_DEVICE_INPUT:
9c6c51
+        return virDomainInputDefValidate(dev->data.input);
9c6c51
+
9c6c51
     case VIR_DOMAIN_DEVICE_LEASE:
9c6c51
     case VIR_DOMAIN_DEVICE_FS:
9c6c51
-    case VIR_DOMAIN_DEVICE_INPUT:
9c6c51
     case VIR_DOMAIN_DEVICE_SOUND:
9c6c51
     case VIR_DOMAIN_DEVICE_WATCHDOG:
9c6c51
     case VIR_DOMAIN_DEVICE_GRAPHICS:
9c6c51
-- 
9c6c51
2.18.0
9c6c51