#20 apply upstream fixes for dual key press crashing bug (fc31 blocker) and no coredumps bug
Merged 4 years ago by catanzaro. Opened 4 years ago by toppk.
rpms/ toppk/mutter master  into  master

@@ -0,0 +1,109 @@ 

+ From 0706e021f5bd82cf4c9b2c0d2916d272f3cba406 Mon Sep 17 00:00:00 2001

+ From: Olivier Fourdan <ofourdan@redhat.com>

+ Date: Tue, 24 Sep 2019 16:55:25 +0200

+ Subject: [PATCH 1/2] keybindings: Check for a handler before using it

+ 

+ The `process_event()` would check for a existing keybinding handler and

+ abort if there is none, however the test is done after the handler had

+ been accessed, hence defeating the purpose of the check.

+ 

+ Move the check to verify there is an existing keybinding handler before

+ actually using it.

+ 

+ https://gitlab.gnome.org/GNOME/mutter/issues/823

+ ---

+  src/core/keybindings.c | 12 ++++++------

+  1 file changed, 6 insertions(+), 6 deletions(-)

+ 

+ diff --git a/src/core/keybindings.c b/src/core/keybindings.c

+ index a5a60e8cd..b9377bfff 100644

+ --- a/src/core/keybindings.c

+ +++ b/src/core/keybindings.c

+ @@ -1955,6 +1955,9 @@ process_event (MetaDisplay          *display,

+        (!window && binding->flags & META_KEY_BINDING_PER_WINDOW))

+      goto not_found;

+  

+ +  if (binding->handler == NULL)

+ +    meta_bug ("Binding %s has no handler\n", binding->name);

+ +

+    if (display->focus_window &&

+        !(binding->handler->flags & META_KEY_BINDING_NON_MASKABLE))

+      {

+ @@ -1980,12 +1983,9 @@ process_event (MetaDisplay          *display,

+        return TRUE;

+      }

+  

+ -  if (binding->handler == NULL)

+ -    meta_bug ("Binding %s has no handler\n", binding->name);

+ -  else

+ -    meta_topic (META_DEBUG_KEYBINDINGS,

+ -                "Running handler for %s\n",

+ -                binding->name);

+ +  meta_topic (META_DEBUG_KEYBINDINGS,

+ +              "Running handler for %s\n",

+ +              binding->name);

+  

+    /* Global keybindings count as a let-the-terminal-lose-focus

+     * due to new window mapping until the user starts

+ -- 

+ 2.22.0

+ 

+ 

+ From 76f2579e442d8ad0a3b8b644daab7c72a585506b Mon Sep 17 00:00:00 2001

+ From: Olivier Fourdan <ofourdan@redhat.com>

+ Date: Tue, 24 Sep 2019 16:58:32 +0200

+ Subject: [PATCH 2/2] keybinding: Check for handler functions as well

+ 

+ With the addition of the locate-pointer special keybinding (defaults to

+ the [Control] key), we have now two separate special modifier keys which

+ can be triggered separately, one for the locate-pointer action and

+ another one for overlay.

+ 

+ When processing those special modifier keys, mutter must ensure that the

+ key was pressed alone, being a modifier, the key could otherwise be part

+ of another key combo.

+ 

+ As result, if both special modifiers keys are pressed simultaneously,

+ mutter will try to trigger the function for the second key being

+ pressed, and since those special modifier keys have no default handler

+ function set, that will crash mutter.

+ 

+ Check if the handler has a function associated and treat the keybinding

+ as not found if no handler function is set, as with the special modifier

+ keys.

+ 

+ https://gitlab.gnome.org/GNOME/mutter/issues/823

+ ---

+  src/core/keybindings.c | 9 +++++++++

+  1 file changed, 9 insertions(+)

+ 

+ diff --git a/src/core/keybindings.c b/src/core/keybindings.c

+ index b9377bfff..b86272541 100644

+ --- a/src/core/keybindings.c

+ +++ b/src/core/keybindings.c

+ @@ -1933,6 +1933,12 @@ invoke_handler (MetaDisplay     *display,

+                                 NULL);

+  }

+  

+ +static gboolean

+ +meta_key_binding_has_handler_func (MetaKeyBinding *binding)

+ +{

+ +  return (!!binding->handler->func || !!binding->handler->default_func);

+ +}

+ +

+  static gboolean

+  process_event (MetaDisplay          *display,

+                 MetaWindow           *window,

+ @@ -1958,6 +1964,9 @@ process_event (MetaDisplay          *display,

+    if (binding->handler == NULL)

+      meta_bug ("Binding %s has no handler\n", binding->name);

+  

+ +  if (!meta_key_binding_has_handler_func (binding))

+ +    goto not_found;

+ +

+    if (display->focus_window &&

+        !(binding->handler->flags & META_KEY_BINDING_NON_MASKABLE))

+      {

+ -- 

+ 2.22.0

+ 

@@ -0,0 +1,73 @@ 

+ From dbe9daeb763bffdf2ba4a5fa7c2a3ac8587c0d37 Mon Sep 17 00:00:00 2001

+ From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>

+ Date: Fri, 27 Sep 2019 10:15:48 +0200

+ Subject: [PATCH] main: Make process PR_SET_DUMPABLE

+ 

+ Otherwise we won't get core dumps if the launching binary has

+ capabilities set.

+ 

+ https://gitlab.gnome.org/GNOME/mutter/merge_requests/811

+ ---

+  config.h.meson  | 3 +++

+  meson.build     | 4 ++++

+  src/core/main.c | 8 ++++++++

+  3 files changed, 15 insertions(+)

+ 

+ diff --git a/config.h.meson b/config.h.meson

+ index 77045319c..0bab71848 100644

+ --- a/config.h.meson

+ +++ b/config.h.meson

+ @@ -61,6 +61,9 @@

+  /* XKB base prefix */

+  #mesondefine XKB_BASE

+  

+ +/* Whether <sys/prctl.h> exists and it defines prctl() */

+ +#mesondefine HAVE_SYS_PRCTL

+ +

+  /* Either <sys/random.h> or <linux/random.h> */

+  #mesondefine HAVE_SYS_RANDOM

+  #mesondefine HAVE_LINUX_RANDOM

+ diff --git a/meson.build b/meson.build

+ index ae0bbfcc2..55ab3eb14 100644

+ --- a/meson.build

+ +++ b/meson.build

+ @@ -366,6 +366,10 @@ cdata.set('HAVE_PROFILER', have_profiler)

+  xkb_base = xkeyboard_config_dep.get_pkgconfig_variable('xkb_base')

+  cdata.set_quoted('XKB_BASE', xkb_base)

+  

+ +if cc.has_header_symbol('sys/prctl.h', 'prctl')

+ +  cdata.set('HAVE_SYS_PRCTL', 1)

+ +endif

+ +

+  if have_wayland

+    xwayland_path = get_option('xwayland_path')

+    if xwayland_path == ''

+ diff --git a/src/core/main.c b/src/core/main.c

+ index 2724cf076..7f4f666d2 100644

+ --- a/src/core/main.c

+ +++ b/src/core/main.c

+ @@ -70,6 +70,10 @@

+  #include <systemd/sd-login.h>

+  #endif /* HAVE_WAYLAND && HAVE_NATIVE_BACKEND */

+  

+ +#ifdef HAVE_SYS_PRCTL

+ +#include <sys/prctl.h>

+ +#endif

+ +

+  #include "backends/meta-backend-private.h"

+  #include "backends/x11/cm/meta-backend-x11-cm.h"

+  #include "backends/x11/meta-backend-x11.h"

+ @@ -532,6 +536,10 @@ meta_init (void)

+    MetaCompositorType compositor_type;

+    GType backend_gtype;

+  

+ +#ifdef HAVE_SYS_PRCTL

+ +  prctl (PR_SET_DUMPABLE, 1);

+ +#endif

+ +

+    sigemptyset (&empty_mask);

+    act.sa_handler = SIG_IGN;

+    act.sa_mask    = empty_mask;

+ -- 

+ 2.22.0

+ 

file modified
+7 -1
@@ -8,7 +8,7 @@ 

  

  Name:          mutter

  Version:       3.34.0

- Release:       4%{?dist}

+ Release:       5%{?dist}

  Summary:       Window and compositing manager based on Clutter

  

  License:       GPLv2+
@@ -24,6 +24,8 @@ 

  Patch2:        clutter-timeline-Use-a-function-to-cancel-the-delay-timeo.patch

  Patch3:        clutter-timeline-Don-t-emit-paused-signal-on-delayed-time.patch

  Patch4:        clutter-actor-Cancel-delayed-timelines-on-removal.patch

+ Patch5:        0005-keybinding-handle-no-handler-functions.patch

+ Patch6:        0006-add-PR_SET_DUMPABLE-to-allow-coredumps.patch

  

  

  BuildRequires: chrpath
@@ -169,6 +171,10 @@ 

  %{_datadir}/mutter-%{mutter_api_version}/tests

  

  %changelog

+ * Sat Sep 28 2019 Kenneth Topp <toppk@bllue.org> - 3.34.0-5

+ - Backport fix for dual special modifier keys bug (#1754867)

+ - Backport fix that enables core dumps (#1748145)

+ 

  * Fri Sep 27 2019 Kenneth Topp <toppk@bllue.org> - 3.34.0-4

  - Backport a patch to prevent crash during animations

  - See upstream issue https://gitlab.gnome.org/GNOME/mutter/issues/815

Thanks. If you could take the formatted patch file from https://gitlab.gnome.org/GNOME/mutter/merge_requests/806.patch to keep the commit message, and rename the patch file following the style of the other patches in this repo, that would be great.

1 new commit added

  • - rename patch to follow convention
4 years ago

sure. also, added this other related bug that was preventing diagnostics on fedora.

Pull-Request has been merged by catanzaro

4 years ago