[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-input-synaptics: Changes to 'debian-unstable'



 ChangeLog        |   30 ++++++++++++++++++++++++++++++
 debian/changelog |    8 ++++++++
 src/synaptics.c  |    2 ++
 3 files changed, 40 insertions(+)

New commits:
commit b050c11c2ff7e9e46e790cd4748aeb9a9e5aa865
Author: Julien Cristau <jcristau@debian.org>
Date:   Mon Oct 1 21:55:11 2012 +0200

    Upload to unstable

diff --git a/ChangeLog b/ChangeLog
index 1c01053..eaef7c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,33 @@
+commit eae444eb1a85d2401501d29f9a6c654c046f806b
+Author: Peter Hutterer <peter.hutterer@who-t.net>
+Date:   Thu Aug 30 16:38:38 2012 +1000
+
+    Reset num_active_touches on DeviceOff (#52496)
+    
+    When disabling the device, reset num_active_touches to zero. Otherwise,
+    num_active_touches stays at the value it was on DeviceOff(). Future touches
+    add to that value until the index may go past priv->open_slots[].
+    That causes spurious memory corruption on touch ends.
+    
+    And as of 55fc42e7c9b4948cadd4f98ef7b6a3b12e268e3e we ignore pre-existing
+    touches anyway.
+    
+    Test-case:
+    - place num_touches fingers on the touchpad
+    - xinput disable <device>
+    - lift fingers
+    - xinput enable <device>
+    - place finger on device, num_active_touches is now (num_touches + 1)
+    
+    X.Org Bug 52496 <http://bugs.freedesktop.org/show_bug.cgi?id=52496>
+    
+    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
+    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
+    (cherry picked from commit a245d42f53096b1ae81e6702729f97ca508e5b5b)
+    
+    Conflicts:
+    	src/synaptics.c
+
 commit d5ff9d8b0b186cf39695df84a10984eac559b746
 Author: Peter Hutterer <peter.hutterer@who-t.net>
 Date:   Tue Jun 12 13:46:34 2012 +1000
diff --git a/debian/changelog b/debian/changelog
index 9801715..614c3e4 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,11 @@
+xserver-xorg-input-synaptics (1.6.2-2) unstable; urgency=low
+
+  * Pull latest synaptics-1.6-branch:
+    - Reset num_active_touches on DeviceOff (closes: #681796).  Fixes memory
+      corruption leading to crashes.
+
+ -- Julien Cristau <jcristau@debian.org>  Mon, 01 Oct 2012 21:55:06 +0200
+
 xserver-xorg-input-synaptics (1.6.2-1) unstable; urgency=low
 
   * New upstream release, from the 1.6 branch.

commit eae444eb1a85d2401501d29f9a6c654c046f806b
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date:   Thu Aug 30 16:38:38 2012 +1000

    Reset num_active_touches on DeviceOff (#52496)
    
    When disabling the device, reset num_active_touches to zero. Otherwise,
    num_active_touches stays at the value it was on DeviceOff(). Future touches
    add to that value until the index may go past priv->open_slots[].
    That causes spurious memory corruption on touch ends.
    
    And as of 55fc42e7c9b4948cadd4f98ef7b6a3b12e268e3e we ignore pre-existing
    touches anyway.
    
    Test-case:
    - place num_touches fingers on the touchpad
    - xinput disable <device>
    - lift fingers
    - xinput enable <device>
    - place finger on device, num_active_touches is now (num_touches + 1)
    
    X.Org Bug 52496 <http://bugs.freedesktop.org/show_bug.cgi?id=52496>
    
    Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
    Reviewed-by: Chase Douglas <chase.douglas@canonical.com>
    (cherry picked from commit a245d42f53096b1ae81e6702729f97ca508e5b5b)
    
    Conflicts:
    	src/synaptics.c

diff --git a/src/synaptics.c b/src/synaptics.c
index cd9f936..a28e984 100644
--- a/src/synaptics.c
+++ b/src/synaptics.c
@@ -1154,6 +1154,7 @@ SynapticsReset(SynapticsPrivate * priv)
     priv->prev_z = 0;
     priv->prevFingers = 0;
 #ifdef HAVE_MULTITOUCH
+    priv->num_active_touches = 0;
     memset(priv->open_slots, 0, priv->num_slots * sizeof(int));
 #endif
 }
@@ -3118,6 +3119,7 @@ UpdateTouchState(InputInfoPtr pInfo, struct SynapticsHwState *hw)
         if (hw->slot_state[i] == SLOTSTATE_OPEN) {
             priv->open_slots[priv->num_active_touches] = i;
             priv->num_active_touches++;
+            BUG_WARN(priv->num_active_touches > priv->num_slots);
         }
         else if (hw->slot_state[i] == SLOTSTATE_CLOSE) {
             Bool found = FALSE;


Reply to: