|
Nikola Pajkovsky |
926a04 |
From 446bc2d3798d34a4b552deea2ada35589286b2da Mon Sep 17 00:00:00 2001
|
|
Nikola Pajkovsky |
926a04 |
Message-Id: <446bc2d3798d34a4b552deea2ada35589286b2da.1317997521.git.npajkovs@redhat.com>
|
|
Nikola Pajkovsky |
926a04 |
From: Nikola Pajkovsky <npajkovs@redhat.com>
|
|
Nikola Pajkovsky |
926a04 |
Date: Fri, 7 Oct 2011 16:25:10 +0200
|
|
Nikola Pajkovsky |
926a04 |
Subject: [PATCH] not send tainted kernel and broken bios
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
|
|
Nikola Pajkovsky |
926a04 |
---
|
|
Nikola Pajkovsky |
926a04 |
src/gui-gtk/main.c | 12 +++++++-
|
|
Nikola Pajkovsky |
926a04 |
src/plugins/abrt-dump-oops.c | 57 ++++++++++++++++++++---------------------
|
|
Nikola Pajkovsky |
926a04 |
2 files changed, 38 insertions(+), 31 deletions(-)
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
diff --git a/src/gui-gtk/main.c b/src/gui-gtk/main.c
|
|
Nikola Pajkovsky |
926a04 |
index 2e45090..02a9cfc 100644
|
|
Nikola Pajkovsky |
926a04 |
--- a/src/gui-gtk/main.c
|
|
Nikola Pajkovsky |
926a04 |
+++ b/src/gui-gtk/main.c
|
|
Nikola Pajkovsky |
926a04 |
@@ -73,13 +73,20 @@ static void add_directory_to_dirlist(const char *dirname)
|
|
Nikola Pajkovsky |
926a04 |
);
|
|
Nikola Pajkovsky |
926a04 |
const char *reported = (msg ? GTK_STOCK_YES : GTK_STOCK_NO);
|
|
Nikola Pajkovsky |
926a04 |
free(msg);
|
|
Nikola Pajkovsky |
926a04 |
- char *reason = dd_load_text(dd, FILENAME_REASON);
|
|
Nikola Pajkovsky |
926a04 |
+
|
|
Nikola Pajkovsky |
926a04 |
+ char *not_reportable_reason = dd_load_text_ext(dd, FILENAME_NOT_REPORTABLE, 0
|
|
Nikola Pajkovsky |
926a04 |
+ | DD_LOAD_TEXT_RETURN_NULL_ON_FAILURE
|
|
Nikola Pajkovsky |
926a04 |
+ | DD_FAIL_QUIETLY_ENOENT
|
|
Nikola Pajkovsky |
926a04 |
+ | DD_FAIL_QUIETLY_EACCES);
|
|
Nikola Pajkovsky |
926a04 |
+ char *reason = NULL;
|
|
Nikola Pajkovsky |
926a04 |
+ if (!not_reportable_reason)
|
|
Nikola Pajkovsky |
926a04 |
+ reason = dd_load_text(dd, FILENAME_REASON);
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
GtkTreeIter iter;
|
|
Nikola Pajkovsky |
926a04 |
gtk_list_store_append(s_dumps_list_store, &iter);
|
|
Nikola Pajkovsky |
926a04 |
gtk_list_store_set(s_dumps_list_store, &iter,
|
|
Nikola Pajkovsky |
926a04 |
COLUMN_REPORTED, reported,
|
|
Nikola Pajkovsky |
926a04 |
- COLUMN_REASON, reason,
|
|
Nikola Pajkovsky |
926a04 |
+ COLUMN_REASON, not_reportable_reason? :reason,
|
|
Nikola Pajkovsky |
926a04 |
COLUMN_DIRNAME, dd->dd_dirname,
|
|
Nikola Pajkovsky |
926a04 |
//OPTION: time format
|
|
Nikola Pajkovsky |
926a04 |
COLUMN_LATEST_CRASH_STR, time_buf,
|
|
Nikola Pajkovsky |
926a04 |
@@ -87,6 +94,7 @@ static void add_directory_to_dirlist(const char *dirname)
|
|
Nikola Pajkovsky |
926a04 |
COLUMN_DUMP_DIR, dirname,
|
|
Nikola Pajkovsky |
926a04 |
-1);
|
|
Nikola Pajkovsky |
926a04 |
free(reason);
|
|
Nikola Pajkovsky |
926a04 |
+ free(not_reportable_reason);
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
dd_close(dd);
|
|
Nikola Pajkovsky |
926a04 |
VERB1 log("added: %s", dirname);
|
|
Nikola Pajkovsky |
926a04 |
diff --git a/src/plugins/abrt-dump-oops.c b/src/plugins/abrt-dump-oops.c
|
|
Nikola Pajkovsky |
926a04 |
index b43d507..05c62b0 100644
|
|
Nikola Pajkovsky |
926a04 |
--- a/src/plugins/abrt-dump-oops.c
|
|
Nikola Pajkovsky |
926a04 |
+++ b/src/plugins/abrt-dump-oops.c
|
|
Nikola Pajkovsky |
926a04 |
@@ -480,16 +480,6 @@ static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt)
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
VERB1 log("Saving %u oopses as dump dirs", idx >= countdown ? countdown-1 : idx);
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
- char *tainted_str = NULL;
|
|
Nikola Pajkovsky |
926a04 |
- FILE *tainted_fp = fopen("/proc/sys/kernel/tainted", "r");
|
|
Nikola Pajkovsky |
926a04 |
- if (tainted_fp)
|
|
Nikola Pajkovsky |
926a04 |
- {
|
|
Nikola Pajkovsky |
926a04 |
- tainted_str = xmalloc_fgetline(tainted_fp);
|
|
Nikola Pajkovsky |
926a04 |
- fclose(tainted_fp);
|
|
Nikola Pajkovsky |
926a04 |
- }
|
|
Nikola Pajkovsky |
926a04 |
- else
|
|
Nikola Pajkovsky |
926a04 |
- perror_msg("Can't open '%s'", "/proc/sys/kernel/tainted");
|
|
Nikola Pajkovsky |
926a04 |
-
|
|
Nikola Pajkovsky |
926a04 |
char *cmdline_str = NULL;
|
|
Nikola Pajkovsky |
926a04 |
FILE *cmdline_fp = fopen("/proc/cmdline", "r");
|
|
Nikola Pajkovsky |
926a04 |
if (cmdline_fp)
|
|
Nikola Pajkovsky |
926a04 |
@@ -535,27 +525,29 @@ static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt)
|
|
Nikola Pajkovsky |
926a04 |
if (cmdline_str)
|
|
Nikola Pajkovsky |
926a04 |
dd_save_text(dd, FILENAME_CMDLINE, cmdline_str);
|
|
Nikola Pajkovsky |
926a04 |
dd_save_text(dd, FILENAME_BACKTRACE, second_line);
|
|
Nikola Pajkovsky |
926a04 |
-// TODO: add "Kernel oops: " prefix, so that all oopses have recognizable FILENAME_REASON?
|
|
Nikola Pajkovsky |
926a04 |
-// kernel oops 1st line may look quite puzzling otherwise...
|
|
Nikola Pajkovsky |
926a04 |
- strchrnul(second_line, '\n')[0] = '\0';
|
|
Nikola Pajkovsky |
926a04 |
- dd_save_text(dd, FILENAME_REASON, second_line);
|
|
Nikola Pajkovsky |
926a04 |
-
|
|
Nikola Pajkovsky |
926a04 |
- if (tainted_str && tainted_str[0] != '0')
|
|
Nikola Pajkovsky |
926a04 |
- {
|
|
Nikola Pajkovsky |
926a04 |
- unsigned long tainted = xatoi_positive(tainted_str);
|
|
Nikola Pajkovsky |
926a04 |
- char *tainted_short = kernel_tainted_short(tainted);
|
|
Nikola Pajkovsky |
926a04 |
- GList *tainted_long = kernel_tainted_long(tainted);
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
- struct strbuf *tnt_long = strbuf_new();
|
|
Nikola Pajkovsky |
926a04 |
- for (GList *li = tainted_long; li; li = li->next)
|
|
Nikola Pajkovsky |
926a04 |
- strbuf_append_strf(tnt_long, "%s\n", (char*) li->data);
|
|
Nikola Pajkovsky |
926a04 |
+ /* check if trace doesn't have line: 'Your BIOS is broken' */
|
|
Nikola Pajkovsky |
926a04 |
+ char *broken_bios = strstr(second_line, "Your BIOS is broken");
|
|
Nikola Pajkovsky |
926a04 |
+ if (broken_bios)
|
|
Nikola Pajkovsky |
926a04 |
+ dd_save_text(dd, FILENAME_NOT_REPORTABLE, "Your BIOS is broken");
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
- dd_save_text(dd, FILENAME_TAINTED, tainted_str);
|
|
Nikola Pajkovsky |
926a04 |
+ char *tainted_short = kernel_tainted_short(second_line);
|
|
Nikola Pajkovsky |
926a04 |
+ if (tainted_short)
|
|
Nikola Pajkovsky |
926a04 |
+ {
|
|
Nikola Pajkovsky |
926a04 |
+ VERB1 log("Kernel is tainted '%s'", tainted_short);
|
|
Nikola Pajkovsky |
926a04 |
dd_save_text(dd, FILENAME_TAINTED_SHORT, tainted_short);
|
|
Nikola Pajkovsky |
926a04 |
- dd_save_text(dd, FILENAME_TAINTED_LONG, tnt_long->buf);
|
|
Nikola Pajkovsky |
926a04 |
- strbuf_free(tnt_long);
|
|
Nikola Pajkovsky |
926a04 |
- list_free_with_free(tainted_long);
|
|
Nikola Pajkovsky |
926a04 |
+ char *reason = xasprintf("Your kernel is tainted by flags '%s'. "
|
|
Nikola Pajkovsky |
926a04 |
+ "Kernel maintainers are not interesting about "
|
|
Nikola Pajkovsky |
926a04 |
+ "tainted kernel, because the trace might not be showing "
|
|
Nikola Pajkovsky |
926a04 |
+ "the root problem."
|
|
Nikola Pajkovsky |
926a04 |
+ , tainted_short);
|
|
Nikola Pajkovsky |
926a04 |
+ dd_save_text(dd, FILENAME_NOT_REPORTABLE, reason);
|
|
Nikola Pajkovsky |
926a04 |
+ free(reason);
|
|
Nikola Pajkovsky |
926a04 |
}
|
|
Nikola Pajkovsky |
926a04 |
+// TODO: add "Kernel oops: " prefix, so that all oopses have recognizable FILENAME_REASON?
|
|
Nikola Pajkovsky |
926a04 |
+// kernel oops 1st line may look quite puzzling otherwise...
|
|
Nikola Pajkovsky |
926a04 |
+ strchrnul(second_line, '\n')[0] = '\0';
|
|
Nikola Pajkovsky |
926a04 |
+ dd_save_text(dd, FILENAME_REASON, second_line);
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
dd_close(dd);
|
|
Nikola Pajkovsky |
926a04 |
}
|
|
Nikola Pajkovsky |
926a04 |
@@ -563,7 +555,6 @@ static unsigned save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt)
|
|
Nikola Pajkovsky |
926a04 |
errors++;
|
|
Nikola Pajkovsky |
926a04 |
}
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
- free(tainted_str);
|
|
Nikola Pajkovsky |
926a04 |
free(cmdline_str);
|
|
Nikola Pajkovsky |
926a04 |
|
|
Nikola Pajkovsky |
926a04 |
return errors;
|
|
Nikola Pajkovsky |
926a04 |
@@ -711,7 +702,15 @@ int main(int argc, char **argv)
|
|
Nikola Pajkovsky |
926a04 |
{
|
|
Nikola Pajkovsky |
926a04 |
int i = 0;
|
|
Nikola Pajkovsky |
926a04 |
while (i < oops_cnt)
|
|
Nikola Pajkovsky |
926a04 |
- printf("\nVersion: %s", (char*)g_list_nth_data(oops_list, i++));
|
|
Nikola Pajkovsky |
926a04 |
+ {
|
|
Nikola Pajkovsky |
926a04 |
+ char *kernel_bt = (char*)g_list_nth_data(oops_list, i++);
|
|
Nikola Pajkovsky |
926a04 |
+ char *tainted_short = kernel_tainted_short(kernel_bt);
|
|
Nikola Pajkovsky |
926a04 |
+ if (tainted_short)
|
|
Nikola Pajkovsky |
926a04 |
+ log("Kernel is tainted '%s'", tainted_short);
|
|
Nikola Pajkovsky |
926a04 |
+
|
|
Nikola Pajkovsky |
926a04 |
+ free(tainted_short);
|
|
Nikola Pajkovsky |
926a04 |
+ printf("\nVersion: %s", kernel_bt);
|
|
Nikola Pajkovsky |
926a04 |
+ }
|
|
Nikola Pajkovsky |
926a04 |
}
|
|
Nikola Pajkovsky |
926a04 |
if (opts & OPT_d)
|
|
Nikola Pajkovsky |
926a04 |
{
|
|
Nikola Pajkovsky |
926a04 |
--
|
|
Nikola Pajkovsky |
926a04 |
1.7.7.rc0.70.g82660
|
|
Nikola Pajkovsky |
926a04 |
|