toppk f48abd2
From dbe9daeb763bffdf2ba4a5fa7c2a3ac8587c0d37 Mon Sep 17 00:00:00 2001
toppk f48abd2
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
toppk f48abd2
Date: Fri, 27 Sep 2019 10:15:48 +0200
toppk f48abd2
Subject: [PATCH] main: Make process PR_SET_DUMPABLE
toppk f48abd2
toppk f48abd2
Otherwise we won't get core dumps if the launching binary has
toppk f48abd2
capabilities set.
toppk f48abd2
toppk f48abd2
https://gitlab.gnome.org/GNOME/mutter/merge_requests/811
toppk f48abd2
---
toppk f48abd2
 config.h.meson  | 3 +++
toppk f48abd2
 meson.build     | 4 ++++
toppk f48abd2
 src/core/main.c | 8 ++++++++
toppk f48abd2
 3 files changed, 15 insertions(+)
toppk f48abd2
toppk f48abd2
diff --git a/config.h.meson b/config.h.meson
toppk f48abd2
index 77045319c..0bab71848 100644
toppk f48abd2
--- a/config.h.meson
toppk f48abd2
+++ b/config.h.meson
toppk f48abd2
@@ -61,6 +61,9 @@
toppk f48abd2
 /* XKB base prefix */
toppk f48abd2
 #mesondefine XKB_BASE
toppk f48abd2
 
toppk f48abd2
+/* Whether <sys/prctl.h> exists and it defines prctl() */
toppk f48abd2
+#mesondefine HAVE_SYS_PRCTL
toppk f48abd2
+
toppk f48abd2
 /* Either <sys/random.h> or <linux/random.h> */
toppk f48abd2
 #mesondefine HAVE_SYS_RANDOM
toppk f48abd2
 #mesondefine HAVE_LINUX_RANDOM
toppk f48abd2
diff --git a/meson.build b/meson.build
toppk f48abd2
index ae0bbfcc2..55ab3eb14 100644
toppk f48abd2
--- a/meson.build
toppk f48abd2
+++ b/meson.build
toppk f48abd2
@@ -366,6 +366,10 @@ cdata.set('HAVE_PROFILER', have_profiler)
toppk f48abd2
 xkb_base = xkeyboard_config_dep.get_pkgconfig_variable('xkb_base')
toppk f48abd2
 cdata.set_quoted('XKB_BASE', xkb_base)
toppk f48abd2
 
toppk f48abd2
+if cc.has_header_symbol('sys/prctl.h', 'prctl')
toppk f48abd2
+  cdata.set('HAVE_SYS_PRCTL', 1)
toppk f48abd2
+endif
toppk f48abd2
+
toppk f48abd2
 if have_wayland
toppk f48abd2
   xwayland_path = get_option('xwayland_path')
toppk f48abd2
   if xwayland_path == ''
toppk f48abd2
diff --git a/src/core/main.c b/src/core/main.c
toppk f48abd2
index 2724cf076..7f4f666d2 100644
toppk f48abd2
--- a/src/core/main.c
toppk f48abd2
+++ b/src/core/main.c
toppk f48abd2
@@ -70,6 +70,10 @@
toppk f48abd2
 #include <systemd/sd-login.h>
toppk f48abd2
 #endif /* HAVE_WAYLAND && HAVE_NATIVE_BACKEND */
toppk f48abd2
 
toppk f48abd2
+#ifdef HAVE_SYS_PRCTL
toppk f48abd2
+#include <sys/prctl.h>
toppk f48abd2
+#endif
toppk f48abd2
+
toppk f48abd2
 #include "backends/meta-backend-private.h"
toppk f48abd2
 #include "backends/x11/cm/meta-backend-x11-cm.h"
toppk f48abd2
 #include "backends/x11/meta-backend-x11.h"
toppk f48abd2
@@ -532,6 +536,10 @@ meta_init (void)
toppk f48abd2
   MetaCompositorType compositor_type;
toppk f48abd2
   GType backend_gtype;
toppk f48abd2
 
toppk f48abd2
+#ifdef HAVE_SYS_PRCTL
toppk f48abd2
+  prctl (PR_SET_DUMPABLE, 1);
toppk f48abd2
+#endif
toppk f48abd2
+
toppk f48abd2
   sigemptyset (&empty_mask);
toppk f48abd2
   act.sa_handler = SIG_IGN;
toppk f48abd2
   act.sa_mask    = empty_mask;
toppk f48abd2
-- 
toppk f48abd2
2.22.0
toppk f48abd2