public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/abrt] update-2.17.8: Backport several bugfix commits, inc. gdb bt generation fail
@ 2026-08-03 10:23 Adam Williamson
  0 siblings, 0 replies; only message in thread
From: Adam Williamson @ 2026-08-03 10:23 UTC (permalink / raw)
  To: git-commits

            A new commit has been pushed.

            Repo   : rpms/abrt
            Branch : update-2.17.8
            Commit : bcfb1b554dfc12fa5f760a91edf3ae1559bf4083
            Author : Adam Williamson <awilliam@redhat.com>
            Date   : 2018-09-15T15:14:00-07:00
            Stats  : +297/-1 in 5 file(s)
            URL    : https://src.fedoraproject.org/rpms/abrt/c/bcfb1b554dfc12fa5f760a91edf3ae1559bf4083?branch=update-2.17.8

            Log:
            Backport several bugfix commits, inc. gdb bt generation fail

Generation of gdb backtraces in 2.10.10 is entirely broken. As
I was backporting that fix, I saw three other bug fix commits
that looked significant, so backported those too. One is needed
for the package to build at all (the g_type_class_add_private
replacement).

---
diff --git a/0001-ccpp-add-h-and-e-parameter-into-abrt-hook-ccpp.patch b/0001-ccpp-add-h-and-e-parameter-into-abrt-hook-ccpp.patch
new file mode 100644
index 0000000..6edf224
--- /dev/null
+++ b/0001-ccpp-add-h-and-e-parameter-into-abrt-hook-ccpp.patch
@@ -0,0 +1,133 @@
+From 94dc5d2783133cea27b1ae804d5b8a2da06808c5 Mon Sep 17 00:00:00 2001
+From: Matej Habrnal <mhabrnal@redhat.com>
+Date: Wed, 6 Jun 2018 14:04:09 +0200
+Subject: [PATCH] ccpp: add %h and %e parameter into abrt-hook-ccpp
+
+Without this commit core_pattern's parameter %h and %e was not
+translated at all.
+
+If there is a white space in executable filename, %e replaced only by
+the first part of executable name (till the space). Hence we decided
+to get executable name from /proc/PID/exe symlink exist.
+
+Example:
+If 'core_pattern = core.%h.%p.%t.%e' the result was
+core.%h.26284.1469805542.sleep not
+core.myshostmane.26284.1469805542.sleep with spaces
+
+Related to #1587891
+
+Signed-off-by: Matej Habrnal <mhabrnal@redhat.com>
+---
+ src/hooks/abrt-hook-ccpp.c          | 36 +++++++++++++++++++----------
+ src/hooks/abrt-install-ccpp-hook.in |  2 +-
+ 2 files changed, 25 insertions(+), 13 deletions(-)
+
+diff --git a/src/hooks/abrt-hook-ccpp.c b/src/hooks/abrt-hook-ccpp.c
+index 1c4e45e5..40117fc8 100644
+--- a/src/hooks/abrt-hook-ccpp.c
++++ b/src/hooks/abrt-hook-ccpp.c
+@@ -65,13 +65,13 @@ static struct dump_dir *dd;
+  * %t - UNIX time of dump
+  * %P - global pid
+  * %I - crash thread tid
+- * %e - executable filename (can contain white spaces)
++ * %h - hostname
++ * %e - executable filename (can contain white spaces, must be placed at the end)
+  * %% - output one "%"
+  */
+ /* Hook must be installed with exactly the same sequence of %c specifiers.
+- * Last one, %h, may be omitted (we can find it out).
+  */
+-static const char percent_specifiers[] = "%scpugtePi";
++static const char percent_specifiers[] = "%scpugtPIhe";
+ static char *core_basename = (char*) "core";
+ 
+ static DIR *open_cwd(pid_t pid)
+@@ -146,7 +146,8 @@ static int setfscreatecon_raw(security_context_t context)
+ }
+ #endif
+ 
+-static int open_user_core(uid_t uid, uid_t fsuid, gid_t fsgid, pid_t pid, char **percent_values)
++static int open_user_core(uid_t uid, uid_t fsuid, gid_t fsgid, pid_t pid,
++                          char **percent_values, const char *executable_filename)
+ {
+     proc_cwd = open_cwd(pid);
+     if (proc_cwd == NULL)
+@@ -196,7 +197,13 @@ static int open_user_core(uid_t uid, uid_t fsuid, gid_t fsgid, pid_t pid, char *
+             {
+                 const char *val = "%";
+                 if (specifier_num > 0) /* not %% */
++                {
+                     val = percent_values[specifier_num - 1];
++                    /* if %e (executable filename), use executable from
++                     * /proc/PID/exe symlink if exists */
++                    if (percent_specifiers[specifier_num] == 'e' && executable_filename)
++                        val = executable_filename;
++                }
+                 //log_warning("c:'%c'", c);
+                 //log_warning("val:'%s'", val);
+ 
+@@ -917,9 +924,9 @@ int main(int argc, char** argv)
+ 
+     if (argc < 8)
+     {
+-        /* percent specifier:         %s   %c              %p  %u  %g  %t   %P         %T        */
+-        /* argv:                  [0] [1]  [2]             [3] [4] [5] [6]  [7]        [8]       */
+-        error_msg_and_die("Usage: %s SIGNO CORE_SIZE_LIMIT PID UID GID TIME GLOBAL_PID GLOBAL_TID", argv[0]);
++        /* percent specifier:         %s   %c              %p  %u  %g  %t   %P         %I         %h       %e   */
++        /* argv:                  [0] [1]  [2]             [3] [4] [5] [6]  [7]        [8]        [9]      [10] */
++        error_msg_and_die("Usage: %s SIGNO CORE_SIZE_LIMIT PID UID GID TIME GLOBAL_PID GLOBAL_TID HOSTNAME BINARY_NAME", argv[0]);
+     }
+ 
+     /* Not needed on 2.6.30.
+@@ -1016,13 +1023,21 @@ int main(int argc, char** argv)
+ 
+     snprintf(path, sizeof(path), "%s/last-ccpp", g_settings_dump_location);
+ 
++    char *executable = get_executable_at(pid_proc_fd);
++    const char *last_slash = NULL;
++    if (executable)
++    {
++        last_slash = strrchr(executable, '/');
++        /* if the last_slash was found, skip it */
++        if (last_slash) ++last_slash;
++    }
++
+     /* Open a fd to compat coredump, if requested and is possible */
+     int user_core_fd = -1;
+     if (setting_MakeCompatCore && ulimit_c != 0)
+         /* note: checks "user_pwd == NULL" inside; updates core_basename */
+-        user_core_fd = open_user_core(uid, fsuid, fsgid, pid, &argv[1]);
++        user_core_fd = open_user_core(uid, fsuid, fsgid, pid, &argv[1], (const char *)last_slash);
+ 
+-    char *executable = get_executable_at(pid_proc_fd);
+     if (executable == NULL)
+     {
+         /* readlink on /proc/$PID/exe failed, don't create abrt dump dir */
+@@ -1031,9 +1046,6 @@ int main(int argc, char** argv)
+         return create_user_core(user_core_fd, pid, ulimit_c);
+     }
+ 
+-    const char *last_slash = strrchr(executable, '/');
+-    /* if the last_slash was found, skip it */
+-    if (last_slash) ++last_slash;
+ 
+     /* ignoring crashes */
+     if (executable && is_path_ignored(setting_ignored_paths, executable))
+diff --git a/src/hooks/abrt-install-ccpp-hook.in b/src/hooks/abrt-install-ccpp-hook.in
+index 660c2091..f8c0c610 100755
+--- a/src/hooks/abrt-install-ccpp-hook.in
++++ b/src/hooks/abrt-install-ccpp-hook.in
+@@ -11,7 +11,7 @@ SAVED_PATTERN_DIR="@VAR_RUN@/abrt"
+ SAVED_PATTERN_FILE="@VAR_RUN@/abrt/saved_core_pattern"
+ HOOK_BIN="@libexecdir@/abrt-hook-ccpp"
+ # Must match percent_specifiers[] order in abrt-hook-ccpp.c:
+-PATTERN="|$HOOK_BIN %s %c %p %u %g %t %P %I"
++PATTERN="|$HOOK_BIN %s %c %p %u %g %t %P %I %h %e"
+ 
+ # core_pipe_limit specifies how many dump_helpers can run at the same time
+ # 0 - means unlimited, but it's not guaranteed that /proc/<pid> of crashing
+-- 
+2.19.0
+

diff --git a/0001-gui-Replace-deprecated-g_type_class_add_private.patch b/0001-gui-Replace-deprecated-g_type_class_add_private.patch
new file mode 100644
index 0000000..c2aa22c
--- /dev/null
+++ b/0001-gui-Replace-deprecated-g_type_class_add_private.patch
@@ -0,0 +1,62 @@
+From af51c51636eb0ca318e62d4c712f2ba3e60ed9b0 Mon Sep 17 00:00:00 2001
+From: Martin Kutlak <mkutlak@redhat.com>
+Date: Tue, 28 Aug 2018 10:26:47 +0200
+Subject: [PATCH] gui: Replace deprecated g_type_class_add_private
+
+g_type_class_add_private will be deprecated in Glib 2.58 [1].
+
+There is a G_DEFINE_TYPE_WITH_PRIVATE macro that can replace
+the deprecated function and it is backwards compatible [2].
+
+[1] blog.gtk.org/2018/07/11/news-from-glib-2-58
+[2] bassi.io/articles/2013/06/21/the-king-is-dead
+
+Signed-off-by: Martin Kutlak <mkutlak@redhat.com>
+---
+ src/configuration-gui/abrt-config-widget.c | 9 ++-------
+ 1 file changed, 2 insertions(+), 7 deletions(-)
+
+diff --git a/src/configuration-gui/abrt-config-widget.c b/src/configuration-gui/abrt-config-widget.c
+index 62910db6..aa3b5c01 100644
+--- a/src/configuration-gui/abrt-config-widget.c
++++ b/src/configuration-gui/abrt-config-widget.c
+@@ -27,9 +27,6 @@
+ #include "libabrt.h"
+ #include <assert.h>
+ 
+-#define ABRT_CONFIG_WIDGET_GET_PRIVATE(o) \
+-    (G_TYPE_INSTANCE_GET_PRIVATE((o), TYPE_ABRT_CONFIG_WIDGET, AbrtConfigWidgetPrivate))
+-
+ #define WID(s) GTK_WIDGET(gtk_builder_get_object(self->priv->builder, s))
+ 
+ #define UI_FILE_NAME "abrt-config-widget.glade"
+@@ -107,7 +104,7 @@ struct AbrtConfigWidgetPrivate {
+     AbrtConfigWidgetOption options[_ABRT_OPT_END_];
+ };
+ 
+-G_DEFINE_TYPE(AbrtConfigWidget, abrt_config_widget, GTK_TYPE_BOX)
++G_DEFINE_TYPE_WITH_PRIVATE(AbrtConfigWidget, abrt_config_widget, GTK_TYPE_BOX)
+ 
+ enum {
+     SN_CHANGED,
+@@ -214,8 +211,6 @@ abrt_config_widget_class_init(AbrtConfigWidgetClass *klass)
+ 
+     object_class->finalize = abrt_config_widget_finalize;
+ 
+-    g_type_class_add_private(klass, sizeof(AbrtConfigWidgetPrivate));
+-
+     s_signals[SN_CHANGED] = g_signal_new ("changed",
+                              G_TYPE_FROM_CLASS (klass),
+                              G_SIGNAL_RUN_LAST,
+@@ -413,7 +408,7 @@ abrt_config_widget_init(AbrtConfigWidget *self)
+ {
+     GError *error = NULL;
+ 
+-    self->priv = ABRT_CONFIG_WIDGET_GET_PRIVATE(self);
++    self->priv = abrt_config_widget_get_instance_private(self);
+ 
+     self->priv->builder = gtk_builder_new();
+     gtk_builder_set_translation_domain(self->priv->builder, GETTEXT_PACKAGE);
+-- 
+2.19.0
+

diff --git a/0001-harvest_vmcore-Fix-missing-argument-error-during-del.patch b/0001-harvest_vmcore-Fix-missing-argument-error-during-del.patch
new file mode 100644
index 0000000..80ceab8
--- /dev/null
+++ b/0001-harvest_vmcore-Fix-missing-argument-error-during-del.patch
@@ -0,0 +1,42 @@
+From 179843d3800f4dd66b143968792a81668a7b172a Mon Sep 17 00:00:00 2001
+From: Jake Daryll Obina <jake.obina@gmail.com>
+Date: Mon, 25 Jun 2018 11:52:11 +0800
+Subject: [PATCH] harvest_vmcore: Fix missing argument error during
+ delete_and_close()
+
+delete_and_close() requires a directory name argument and it is being called
+without one. This argument is really not necessary though since the directory
+name is already saved in the directory object (can be queried via the directory
+object's name attribute), and it is the saved directory that is always deleted
+regardless of the argument passed in.
+
+Signed-off-by: Jake Daryll Obina <jake.obina@gmail.com>
+---
+ src/hooks/abrt_harvest_vmcore.py.in | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/src/hooks/abrt_harvest_vmcore.py.in b/src/hooks/abrt_harvest_vmcore.py.in
+index 7d4bba52..66c3ad37 100644
+--- a/src/hooks/abrt_harvest_vmcore.py.in
++++ b/src/hooks/abrt_harvest_vmcore.py.in
+@@ -128,13 +128,15 @@ def create_abrtd_info(dest, uuid):
+     return dd
+ 
+ 
+-def delete_and_close(dd, dd_dirname):
++def delete_and_close(dd):
+     """
+     Deletes the given dump directory and closes it.
+ 
+     dd - dump directory object
+-    dd_dirname - full path to dump directory
+     """
++    # Save the directory name as the directory object could be destroyed during
++    # delete().
++    dd_dirname = dd.name
+     if not dd.delete() == 0:
+         sys.stderr.write("Unable to delete '%s'\n" % (dd_dirname))
+         return
+-- 
+2.19.0
+

diff --git a/0001-lib-Correct-the-syntax-for-gdb-backtrace-command.patch b/0001-lib-Correct-the-syntax-for-gdb-backtrace-command.patch
new file mode 100644
index 0000000..4b72a1a
--- /dev/null
+++ b/0001-lib-Correct-the-syntax-for-gdb-backtrace-command.patch
@@ -0,0 +1,41 @@
+From 057f8b0395a37765b856737cb25186c52b300389 Mon Sep 17 00:00:00 2001
+From: Martin Kutlak <mkutlak@redhat.com>
+Date: Tue, 24 Jul 2018 10:17:05 +0200
+Subject: [PATCH] lib: Correct the syntax for gdb backtrace command
+
+abrt-action-generate-backtrace generates backtraces with error message:
+A syntax error in expression, near `full'.
+
+According to the GDB documentation the correct syntax for backtrace
+command is:
+backtrace [n]
+backtrace full [n]
+
+- sourceware.org/gdb/onlinedocs/gdb/Backtrace.html
+
+Signed-off-by: Martin Kutlak <mkutlak@redhat.com>
+---
+ src/lib/hooklib.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/lib/hooklib.c b/src/lib/hooklib.c
+index 135c7cde..b66fc119 100644
+--- a/src/lib/hooklib.c
++++ b/src/lib/hooklib.c
+@@ -353,11 +353,11 @@ char *get_backtrace(const char *dump_dir_name, unsigned timeout_sec, const char
+     /* Limit bt depth. With no limit, gdb sometimes OOMs the machine */
+     unsigned bt_depth = 1024;
+     const char *thread_apply_all = "thread apply all -ascending";
+-    const char *full = " full";
++    const char *full = "full ";
+     char *bt = NULL;
+     while (1)
+     {
+-        args[bt_cmd_index] = xasprintf("%s backtrace %u%s", thread_apply_all, bt_depth, full);
++        args[bt_cmd_index] = xasprintf("%s backtrace %s%u", thread_apply_all, full, bt_depth);
+         bt = exec_vp(args, /*redirect_stderr:*/ 1, timeout_sec, NULL);
+         free(args[bt_cmd_index]);
+         if ((bt && strnlen(bt, 256*1024) < 256*1024) || bt_depth <= 32)
+-- 
+2.19.0
+

diff --git a/abrt.spec b/abrt.spec
index 11c4f6b..e68abcf 100644
--- a/abrt.spec
+++ b/abrt.spec
@@ -61,10 +61,18 @@
 Summary: Automatic bug detection and reporting tool
 Name: abrt
 Version: 2.10.10
-Release: 4%{?dist}
+Release: 5%{?dist}
 License: GPLv2+
 URL: https://abrt.readthedocs.org/
 Source: https://github.com/abrt/%{name}/archive/%{version}/%{name}-%{version}.tar.gz
+# Backported fix for https://bugzilla.redhat.com/show_bug.cgi?id=1629408
+Patch0: 0001-lib-Correct-the-syntax-for-gdb-backtrace-command.patch
+# Backport: fix use of deprecated function (breaks build, as -Werror is used)
+Patch1: 0001-gui-Replace-deprecated-g_type_class_add_private.patch
+# Backport: fix missing argument error in harvest_vmcore
+Patch2: 0001-harvest_vmcore-Fix-missing-argument-error-during-del.patch
+# Backport: ccpp: add %h and %e parameter into abrt-hook-ccpp
+Patch3: 0001-ccpp-add-h-and-e-parameter-into-abrt-hook-ccpp.patch
 BuildRequires: %{dbus_devel}
 BuildRequires: gtk3-devel
 BuildRequires: glib2-devel >= 2.43
@@ -604,6 +612,10 @@ to the shell
 
 %prep
 %setup -q
+%patch0 -p1
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
 
 %build
 autoconf
@@ -1255,6 +1267,12 @@ killall abrt-dbus >/dev/null 2>&1 || :
 %config(noreplace) %{_sysconfdir}/profile.d/abrt-console-notification.sh
 
 %changelog
+* Sat Sep 15 2018 Adam Williamson <awilliam@redhat.com> - 2.10.10-5
+- Backport fix for RHBZ #1629408 (failed gdb backtrace generation)
+- Backport fix for deprecated function use (broke build)
+- Backport fix for argument error in harvest_vmcore
+- Backport fix for missing parameter translations in abrt-hook-ccpp
+
 * Thu Jul 12 2018 Fedora Release Engineering <releng@fedoraproject.org> - 2.10.10-4
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
 

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-08-03 10:23 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-08-03 10:23 [rpms/abrt] update-2.17.8: Backport several bugfix commits, inc. gdb bt generation fail Adam Williamson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox