Don't leak mtdev data
This commit is contained in:
parent
61734f1224
commit
cdc48c2c0e
112
0001-Release-mtdev-data-whenever-we-close-the-fd.patch
Normal file
112
0001-Release-mtdev-data-whenever-we-close-the-fd.patch
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
From ac5173163d7d1e18d47630a397ece0f26b2568c8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Mon, 28 May 2012 09:08:43 +1000
|
||||||
|
Subject: [PATCH evdev] Release mtdev data whenever we close the fd
|
||||||
|
|
||||||
|
Add a new EvdevCloseDevice() function to unify this.
|
||||||
|
We used to leak data
|
||||||
|
- PreInit allocates mtdev, but nothing except one error path released it.
|
||||||
|
- each DEVICE_ON re-allocates mtdev but it is never released
|
||||||
|
|
||||||
|
Reported-by: Zdenek Kabelac <zdenek.kabelac@gmail.com>
|
||||||
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
|
||||||
|
---
|
||||||
|
src/evdev.c | 38 +++++++++++++++++++++++++-------------
|
||||||
|
1 file changed, 25 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/evdev.c b/src/evdev.c
|
||||||
|
index 055bc3f..fb44c37 100644
|
||||||
|
--- a/src/evdev.c
|
||||||
|
+++ b/src/evdev.c
|
||||||
|
@@ -119,6 +119,7 @@ static int EvdevSwitchMode(ClientPtr client, DeviceIntPtr device, int mode);
|
||||||
|
static BOOL EvdevGrabDevice(InputInfoPtr pInfo, int grab, int ungrab);
|
||||||
|
static void EvdevSetCalibration(InputInfoPtr pInfo, int num_calibration, int calibration[4]);
|
||||||
|
static int EvdevOpenDevice(InputInfoPtr pInfo);
|
||||||
|
+static void EvdevCloseDevice(InputInfoPtr pInfo);
|
||||||
|
|
||||||
|
static void EvdevInitAxesLabels(EvdevPtr pEvdev, int mode, int natoms, Atom *atoms);
|
||||||
|
static void EvdevInitButtonLabels(EvdevPtr pEvdev, int natoms, Atom *atoms);
|
||||||
|
@@ -1108,8 +1109,7 @@ EvdevReadInput(InputInfoPtr pInfo)
|
||||||
|
EvdevMBEmuFinalize(pInfo);
|
||||||
|
Evdev3BEmuFinalize(pInfo);
|
||||||
|
xf86RemoveEnabledDevice(pInfo);
|
||||||
|
- close(pInfo->fd);
|
||||||
|
- pInfo->fd = -1;
|
||||||
|
+ EvdevCloseDevice(pInfo);
|
||||||
|
} else if (errno != EAGAIN)
|
||||||
|
{
|
||||||
|
/* We use X_NONE here because it doesn't alloc */
|
||||||
|
@@ -1866,8 +1866,7 @@ EvdevProc(DeviceIntPtr device, int what)
|
||||||
|
{
|
||||||
|
EvdevGrabDevice(pInfo, 0, 1);
|
||||||
|
xf86RemoveEnabledDevice(pInfo);
|
||||||
|
- close(pInfo->fd);
|
||||||
|
- pInfo->fd = -1;
|
||||||
|
+ EvdevCloseDevice(pInfo);
|
||||||
|
}
|
||||||
|
pEvdev->min_maj = 0;
|
||||||
|
pEvdev->flags &= ~EVDEV_INITIALIZED;
|
||||||
|
@@ -1876,10 +1875,7 @@ EvdevProc(DeviceIntPtr device, int what)
|
||||||
|
|
||||||
|
case DEVICE_CLOSE:
|
||||||
|
xf86IDrvMsg(pInfo, X_INFO, "Close\n");
|
||||||
|
- if (pInfo->fd != -1) {
|
||||||
|
- close(pInfo->fd);
|
||||||
|
- pInfo->fd = -1;
|
||||||
|
- }
|
||||||
|
+ EvdevCloseDevice(pInfo);
|
||||||
|
EvdevFreeMasks(pEvdev);
|
||||||
|
EvdevRemoveDevice(pInfo);
|
||||||
|
pEvdev->min_maj = 0;
|
||||||
|
@@ -2368,17 +2364,34 @@ EvdevOpenDevice(InputInfoPtr pInfo)
|
||||||
|
if (EvdevIsDuplicate(pInfo))
|
||||||
|
{
|
||||||
|
xf86IDrvMsg(pInfo, X_WARNING, "device file is duplicate. Ignoring.\n");
|
||||||
|
+ EvdevCloseDevice(pInfo);
|
||||||
|
+ return BadMatch;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return Success;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+EvdevCloseDevice(InputInfoPtr pInfo)
|
||||||
|
+{
|
||||||
|
+ EvdevPtr pEvdev = pInfo->private;
|
||||||
|
+ if (pInfo->fd >= 0)
|
||||||
|
+ {
|
||||||
|
close(pInfo->fd);
|
||||||
|
+ pInfo->fd = -1;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
#ifdef MULTITOUCH
|
||||||
|
+ if (pEvdev->mtdev)
|
||||||
|
+ {
|
||||||
|
mtdev_close_delete(pEvdev->mtdev);
|
||||||
|
pEvdev->mtdev = NULL;
|
||||||
|
-#endif
|
||||||
|
- return BadMatch;
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
|
||||||
|
- return Success;
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
EvdevUnInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
|
||||||
|
{
|
||||||
|
@@ -2459,8 +2472,7 @@ EvdevPreInit(InputDriverPtr drv, InputInfoPtr pInfo, int flags)
|
||||||
|
return Success;
|
||||||
|
|
||||||
|
error:
|
||||||
|
- if (pInfo->fd >= 0)
|
||||||
|
- close(pInfo->fd);
|
||||||
|
+ EvdevCloseDevice(pInfo);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
1.7.10.4
|
||||||
|
|
@ -8,7 +8,7 @@
|
|||||||
Summary: Xorg X11 evdev input driver
|
Summary: Xorg X11 evdev input driver
|
||||||
Name: xorg-x11-drv-evdev
|
Name: xorg-x11-drv-evdev
|
||||||
Version: 2.7.0
|
Version: 2.7.0
|
||||||
Release: 3%{?gitdate:.%{gitdate}git%{gitversion}}%{dist}
|
Release: 4%{?gitdate:.%{gitdate}git%{gitversion}}%{dist}
|
||||||
URL: http://www.x.org
|
URL: http://www.x.org
|
||||||
License: MIT
|
License: MIT
|
||||||
Group: User Interface/X Hardware Support
|
Group: User Interface/X Hardware Support
|
||||||
@ -24,6 +24,8 @@ Source0: ftp://ftp.x.org/pub/individual/driver/%{tarball}-%{version}.tar.bz2
|
|||||||
Patch01: 0001-Fix-inverted-horizontal-scroll-46205.patch
|
Patch01: 0001-Fix-inverted-horizontal-scroll-46205.patch
|
||||||
# Bug 805902 - Scrollwheels on tablets are broken
|
# Bug 805902 - Scrollwheels on tablets are broken
|
||||||
Patch02: 0001-Allow-relative-scroll-valuators-on-absolute-devices.patch
|
Patch02: 0001-Allow-relative-scroll-valuators-on-absolute-devices.patch
|
||||||
|
# Don't leak mtdev data
|
||||||
|
Patch03: 0001-Release-mtdev-data-whenever-we-close-the-fd.patch
|
||||||
|
|
||||||
ExcludeArch: s390 s390x %{?rhel:ppc ppc64}
|
ExcludeArch: s390 s390x %{?rhel:ppc ppc64}
|
||||||
|
|
||||||
@ -85,6 +87,9 @@ X.Org X11 evdev input driver development files.
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jul 04 2012 Peter Hutterer <peter.hutterer@redhat.com> 2.7.0-4
|
||||||
|
- Don't leak mtdev data
|
||||||
|
|
||||||
* Thu Apr 05 2012 Adam Jackson <ajax@redhat.com> - 2.7.0-3
|
* Thu Apr 05 2012 Adam Jackson <ajax@redhat.com> - 2.7.0-3
|
||||||
- RHEL arch exclude updates
|
- RHEL arch exclude updates
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user