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 +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 +--- + 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/ 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 +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 +--- + 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 + +-#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 +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 +--- + 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 +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 +--- + 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 - 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 - 2.10.10-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild