diff --git a/SOURCES/0001-Back-off-if-we-detect-a-vmmouse-kernel-driver-v3.patch b/SOURCES/0001-Back-off-if-we-detect-a-vmmouse-kernel-driver-v3.patch new file mode 100644 index 0000000..838e26f --- /dev/null +++ b/SOURCES/0001-Back-off-if-we-detect-a-vmmouse-kernel-driver-v3.patch @@ -0,0 +1,204 @@ +From 3648411c356d6ee35d82759b7b1c01e75c8a3e6b Mon Sep 17 00:00:00 2001 +From: Thomas Hellstrom +Date: Wed, 1 Oct 2014 21:04:30 +0200 +Subject: [PATCH vmmouse] Back off if we detect a vmmouse kernel driver v3 + +If a vmmouse kernel driver is active, vmmouse input is handled by the Xorg +evdev driver and not by the vmmouse driver, so make sure the vmmouse_detect +utility doesn't detect a vmmouse if a kernel driver is active. + +v2: Change the vmmouse kernel device name, fix comment. +v3: Fix up libudev error handling. + +Signed-off-by: Thomas Hellstrom +Reviewed-by: Sinclair Yeh +(cherry picked from commit 576e8123d9f9f01ef6041cdfb96ca811197d05d2) +--- + configure.ac | 14 +++++++ + tools/Makefile.am | 7 +++- + tools/vmmouse_detect.c | 7 ++-- + tools/vmmouse_udev.c | 104 +++++++++++++++++++++++++++++++++++++++++++++++++ + 4 files changed, 127 insertions(+), 5 deletions(-) + create mode 100644 tools/vmmouse_udev.c + +diff --git a/configure.ac b/configure.ac +index 1ffc219..fd5d3f1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -111,6 +111,20 @@ XORG_DRIVER_CHECK_EXT(RANDR, randrproto) + XORG_DRIVER_CHECK_EXT(XINPUT, inputproto) + + # Checks for pkg-config packages ++libudev_check=yes ++AC_ARG_WITH([libudev], ++ [AS_HELP_STRING([--without-libudev], ++ [Use to build without libudev on linux])], ++ [if test x$withval = xno; then libudev_check=no; fi] ++ []) ++ ++if test x`uname` = xLinux -a $libudev_check = yes; then ++ PKG_CHECK_MODULES(LIBUDEV, [libudev], ++ [AC_DEFINE([HAVE_LIBUDEV], 1, ++ [Has libudev installed])], ++ []); ++fi ++ + PKG_CHECK_MODULES(XORG, [xorg-server >= 1.0.1] xproto $REQUIRED_MODULES) + + PKG_CHECK_EXISTS([xorg-server >= 1.1.0], +diff --git a/tools/Makefile.am b/tools/Makefile.am +index ea7ba66..ecc73f7 100644 +--- a/tools/Makefile.am ++++ b/tools/Makefile.am +@@ -22,8 +22,11 @@ bin_PROGRAMS = @DRIVER_NAME@_detect + + AM_CPPFLAGS = -I$(top_srcdir)/shared $(XORG_CFLAGS) + +-@DRIVER_NAME@_detect_SOURCES = vmmouse_detect.c +-@DRIVER_NAME@_detect_LDADD = $(top_builddir)/shared/lib@DRIVER_NAME@.la ++@DRIVER_NAME@_detect_SOURCES = vmmouse_detect.c vmmouse_udev.c ++@DRIVER_NAME@_detect_LDADD = $(top_builddir)/shared/lib@DRIVER_NAME@.la \ ++ @LIBUDEV_LIBS@ ++@DRIVER_NAME@_detect_CFLAGS = @LIBUDEV_CFLAGS@ ++ + + calloutsdir=$(HAL_CALLOUTS_DIR) + callouts_SCRIPTS = hal-probe-vmmouse +diff --git a/tools/vmmouse_detect.c b/tools/vmmouse_detect.c +index cfb92e1..6402b16 100644 +--- a/tools/vmmouse_detect.c ++++ b/tools/vmmouse_detect.c +@@ -30,9 +30,7 @@ + #include + #include "vmmouse_client.h" + +-#ifdef HAVE_CONFIG_H +-#include "config.h" +-#endif ++extern int vmmouse_uses_kernel_driver(void); + + void + segvCB(int sig) +@@ -46,6 +44,9 @@ segvCB(int sig) + int + main(void) + { ++ if (vmmouse_uses_kernel_driver()) ++ return 1; ++ + /* + * If the vmmouse test is not run in a VMware virtual machine, it + * will segfault instead of successfully accessing the port. +diff --git a/tools/vmmouse_udev.c b/tools/vmmouse_udev.c +new file mode 100644 +index 0000000..dc100ae +--- /dev/null ++++ b/tools/vmmouse_udev.c +@@ -0,0 +1,104 @@ ++/* ++ * Copyright 2014 by VMware, Inc. ++ * ++ * Permission is hereby granted, free of charge, to any person obtaining a ++ * copy of this software and associated documentation files (the "Software"), ++ * to deal in the Software without restriction, including without limitation ++ * the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ * and/or sell copies of the Software, and to permit persons to whom the ++ * Software is furnished to do so, subject to the following conditions: ++ * ++ * The above copyright notice and this permission notice shall be included in ++ * all copies or substantial portions of the Software. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR ++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR ++ * OTHER DEALINGS IN THE SOFTWARE. ++ * ++ * Except as contained in this notice, the name of the copyright holder(s) ++ * and author(s) shall not be used in advertising or otherwise to promote ++ * the sale, use or other dealings in this Software without prior written ++ * authorization from the copyright holder(s) and author(s). ++ */ ++ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#ifdef HAVE_LIBUDEV ++#include ++#include ++#include ++ ++#define KERNEL_DEVNAME "VirtualPS/2 VMware VMMouse" ++ ++/** ++ * vmmouse_uses_kernel_driver - Check whether there's an active ++ * vmmouse driver in the kernel. ++ * ++ * Returns 0 if there was no kernel driver found. ++ * Returns non-zero on error or if there was an active driver found. ++ * ++ * Scans the input subsystem for devices matching KERNEL_DEVNAME. These ++ * devices are assumed to be active vmmouse drivers. ++ */ ++int vmmouse_uses_kernel_driver(void) ++{ ++ struct udev *udev; ++ struct udev_enumerate *enumerate; ++ struct udev_list_entry *devices, *dev_list_entry; ++ struct udev_device *dev; ++ ++ udev = udev_new(); ++ if (!udev) ++ return 1; ++ ++ /* ++ * Udev error return codes that are not caught immediately are ++ * typically caught in the input argument check in the udev ++ * function calls following the failing call! ++ */ ++ enumerate = udev_enumerate_new(udev); ++ if (udev_enumerate_add_match_subsystem(enumerate, "input")) ++ goto out_err; ++ if (udev_enumerate_scan_devices(enumerate)) ++ goto out_err; ++ ++ devices = udev_enumerate_get_list_entry(enumerate); ++ udev_list_entry_foreach(dev_list_entry, devices) { ++ const char *path, *name; ++ ++ path = udev_list_entry_get_name(dev_list_entry); ++ dev = udev_device_new_from_syspath(udev, path); ++ if (!dev) ++ goto out_err; ++ name = udev_device_get_sysattr_value(dev, "name"); ++ if (name && !strcasecmp(name, KERNEL_DEVNAME)) ++ goto out_found; ++ ++ udev_device_unref(dev); ++ } ++ ++ udev_enumerate_unref(enumerate); ++ udev_unref(udev); ++ ++ return 0; ++ ++ out_found: ++ udev_device_unref(dev); ++ out_err: ++ udev_enumerate_unref(enumerate); ++ udev_unref(udev); ++ ++ return 1; ++} ++#else ++int vmmouse_uses_kernel_driver(void) ++{ ++ return 0; ++} ++#endif +-- +2.7.4 + diff --git a/SPECS/xorg-x11-drv-vmmouse.spec b/SPECS/xorg-x11-drv-vmmouse.spec index 2eae235..2711bd8 100644 --- a/SPECS/xorg-x11-drv-vmmouse.spec +++ b/SPECS/xorg-x11-drv-vmmouse.spec @@ -8,7 +8,7 @@ Summary: Xorg X11 vmmouse input driver Name: xorg-x11-drv-vmmouse Version: 13.0.0 -Release: 11%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} +Release: 12%{?gitdate:.%{gitdate}git%{gitversion}}%{?dist} URL: http://www.x.org License: MIT Group: User Interface/X Hardware Support @@ -24,11 +24,15 @@ Source0: ftp://ftp.x.org/pub/individual/driver/%{tarball}-%{version}.tar.bz2 # 604660 - vmmouse_detect unexpected exit with status 0x000b Patch2: vmmouse-12.6.9-iopl-revert.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1354636 +Patch3: 0001-Back-off-if-we-detect-a-vmmouse-kernel-driver-v3.patch + # Yes, this is not the same as vmware. Yes, this is intentional. ExclusiveArch: %{ix86} x86_64 BuildRequires: xorg-x11-server-devel >= 1.10.99.902 BuildRequires: automake autoconf libtool +BuildRequires: libudev-devel Requires: Xorg %(xserver-sdk-abi-requires ansic) Requires: Xorg %(xserver-sdk-abi-requires xinput) @@ -39,6 +43,7 @@ X.Org X11 vmmouse input driver. %prep %setup -q -n %{tarball}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}} %patch2 -p1 +%patch3 -p1 %build autoreconf -v --install --force || exit 1 @@ -70,6 +75,9 @@ rm -rf $RPM_BUILD_ROOT %{_prefix}/lib/udev/rules.d/*.rules %changelog +* Wed Sep 07 2016 Peter Hutterer 13.0.0-12 +- Don't use vmmouse if the vmmouse kernel driver is detected (#1354636) + * Fri May 01 2015 Peter Hutterer 13.0.0-11 - 1.17 ABI rebuild (#1194886)