From 4b19893e61e4baff89f9b57f851e9cbdcaf7cbf2 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Thu, 24 Mar 2011 23:00:33 +0100 Subject: oops: don't save bogus "executable", and save real "cmdline" instead of bogus one Signed-off-by: Denys Vlasenko --- src/daemon/abrt-action-save-package-data.c | 35 ++++++++++++++++++------------ src/plugins/abrt-dump-oops.c | 16 ++++++++++---- 2 files changed, 33 insertions(+), 18 deletions(-) (limited to 'src') diff --git a/src/daemon/abrt-action-save-package-data.c b/src/daemon/abrt-action-save-package-data.c index 0416cdef..8f54b96c 100644 --- a/src/daemon/abrt-action-save-package-data.c +++ b/src/daemon/abrt-action-save-package-data.c @@ -80,28 +80,33 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name) if (!dd) return 1; - char *remote_str = dd_load_text_ext(dd, FILENAME_REMOTE, DD_FAIL_QUIETLY_ENOENT); - bool remote = (remote_str[0] == '1'); - free(remote_str); - - int error = 1; - char *executable = dd_load_text(dd, FILENAME_EXECUTABLE); - char *cmdline = dd_load_text(dd, FILENAME_CMDLINE); - char *package_full_name = NULL; + char *cmdline = NULL; + char *executable = NULL; + char *script_name = NULL; /* only if "interpreter /path/to/script" */ char *package_short_name = NULL; + char *package_full_name = NULL; char *component = NULL; - char *script_name = NULL; /* only if "interpreter /path/to/script" */ + int error = 1; /* note: "goto ret" statements below free all the above variables, * but they don't dd_close(dd) */ - if (strcmp(executable, "kernel") == 0) + char *analyzer = dd_load_text(dd, FILENAME_ANALYZER); + bool kernel = (strcmp(analyzer, "Kerneloops") == 0); + free(analyzer); + if (kernel) { - component = xstrdup("kernel"); package_full_name = xstrdup("kernel"); - package_short_name = xstrdup("kernel"); + component = xstrdup("kernel"); } else { + char *remote_str = dd_load_text_ext(dd, FILENAME_REMOTE, DD_FAIL_QUIETLY_ENOENT); + bool remote = string_to_bool(remote_str); + free(remote_str); + + cmdline = dd_load_text(dd, FILENAME_CMDLINE); + executable = dd_load_text(dd, FILENAME_EXECUTABLE); + /* Close dd while we query package database. It can take some time, * don't want to keep dd locked longer than necessary */ dd_close(dd); @@ -224,10 +229,12 @@ static int SavePackageDescriptionToDebugDump(const char *dump_dir_name) ret0: error = 0; ret: - free(package_full_name); + free(cmdline); + free(executable); + free(script_name); free(package_short_name); + free(package_full_name); free(component); - free(script_name); return error; } diff --git a/src/plugins/abrt-dump-oops.c b/src/plugins/abrt-dump-oops.c index 06f44520..41432043 100644 --- a/src/plugins/abrt-dump-oops.c +++ b/src/plugins/abrt-dump-oops.c @@ -492,6 +492,14 @@ static int save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt) else perror_msg("Can't open '%s'", "/proc/sys/kernel/tainted"); + char *cmdline_str = NULL; + FILE *cmdline_fp = fopen("/proc/cmdline", "r"); + if (cmdline_fp) + { + cmdline_str = xmalloc_fgetline(cmdline_fp); + fclose(cmdline_fp); + } + time_t t = time(NULL); const char *iso_date = iso_date_string(&t); /* dump should be readable by all if we're run with -x */ @@ -520,11 +528,9 @@ static int save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt) { dd_create_basic_files(dd, /*uid:*/ my_euid); dd_save_text(dd, FILENAME_ANALYZER, "Kerneloops"); -// TODO: drop FILENAME_EXECUTABLE? - dd_save_text(dd, FILENAME_EXECUTABLE, "kernel"); dd_save_text(dd, FILENAME_KERNEL, first_line); -// TODO: drop FILENAME_CMDLINE? - dd_save_text(dd, FILENAME_CMDLINE, "not_applicable"); + if (cmdline_str) + dd_save_text(dd, FILENAME_CMDLINE, cmdline_str); dd_save_text(dd, FILENAME_BACKTRACE, second_line); // TODO: add "Kernel oops: " prefix, so that all oopses have recognizable FILENAME_REASON? // kernel oops 1st line may look quite puzzling otherwise... @@ -539,7 +545,9 @@ static int save_oops_to_dump_dir(GList *oops_list, unsigned oops_cnt) else errors++; } + free(tainted_str); + free(cmdline_str); return errors; } -- cgit