lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20220331015955.1066872-1-zhouzongmin@kylinos.cn>
Date:   Thu, 31 Mar 2022 09:59:55 +0800
From:   Zongmin Zhou <zhouzongmin@...inos.cn>
To:     linux-graphics-maintainer@...are.com, pv-drivers@...are.com,
        dmitry.torokhov@...il.com
Cc:     linux-input@...r.kernel.org, linux-kernel@...r.kernel.org,
        zhouzongmin@...inos.cn
Subject: [RESEND PATCH] input/vmmouse: Add vmmouse_reset() function to disable vmmouse before entering suspend mode

Details:
When I use VirtualPS/2 VMMouse on virtual machine,
There will be an error message after resume from suspend mode.
like below:
vmmouse: Unable to re-enable mouse when reconnecting, err: -6

And vmmouse will be unusable,so have to do full rescan
to find a another driver to use for the port.

This error is due to QEMU still generate PS2 events
to notify kernel driver to read from queue,
but kernel can't process the data in suspend mode,
resulting a surge of s->nb_queue value,
which ultimately led to an error getting VMMOUSE_VERSION_ID after resume.

Test scenario:
1)virtual machine started with qemu command "vmport=on",
  it will use VirtualPS/2 VMMouse.
2)click suspend botton to enter suspend mode.
3)resume and will get the error message from dmesg.

Fixed by:
Disabling the vmmouse in its reset handler,
It will notify qemu to stop vmmouse and remove handler.

Signed-off-by: Zongmin Zhou<zhouzongmin@...inos.cn>
---
 drivers/input/mouse/vmmouse.c | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c
index 42443ffba7c4..ea9eff7c8099 100644
--- a/drivers/input/mouse/vmmouse.c
+++ b/drivers/input/mouse/vmmouse.c
@@ -365,6 +365,19 @@ int vmmouse_detect(struct psmouse *psmouse, bool set_properties)
 	return 0;
 }
 
+/**
+ * vmmouse_reset - Disable vmmouse and reset
+ *
+ * @psmouse: Pointer to the psmouse struct
+ *
+ * Tries to disable vmmouse mode before enter suspend.
+ */
+static void vmmouse_reset(struct psmouse *psmouse)
+{
+	vmmouse_disable(psmouse);
+	psmouse_reset(psmouse);
+}
+
 /**
  * vmmouse_disconnect - Take down vmmouse driver
  *
@@ -472,6 +485,7 @@ int vmmouse_init(struct psmouse *psmouse)
 	psmouse->protocol_handler = vmmouse_process_byte;
 	psmouse->disconnect = vmmouse_disconnect;
 	psmouse->reconnect = vmmouse_reconnect;
+	psmouse->cleanup = vmmouse_reset;
 
 	return 0;
 
-- 
2.25.1

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ