get_and_save_so_info(maps_path, so_info_path);
}
-static void execute_minicoredump(int argc, char *argv[])
+static int execute_minicoredump(int argc, char *argv[])
{
char *coredump_name = NULL;
char *prstatus_fd_str = NULL;
+ int ret = 0;
- if (asprintf(&coredump_name, "%s.coredump", crash_info.name) == -1)
- coredump_name = strdup("core");
-
- if (asprintf(&prstatus_fd_str, "%d", crash_info.prstatus_fd) == -1)
- prstatus_fd_str = strdup("-1");
+ if (asprintf(&coredump_name, "%s.coredump", crash_info.name) == -1
+ || asprintf(&prstatus_fd_str, "%d", crash_info.prstatus_fd) == -1) {
+ _E("Unable to allocate memory");
+ ret = -1;
+ goto out;
+ }
/* Execute minicoredumper */
char *args[] = {
ret == 0 ? "success" : strerror(errno_unlink));
}
+out:
free(coredump_name);
free(prstatus_fd_str);
+
+ return ret;
}
static void execute_crash_stack(int argc, char *argv[])
system_command(command);
}
-static void execute_crash_modules(int argc, char *argv[])
+static int execute_crash_modules(int argc, char *argv[])
{
_D("Execute crash module: ");
- execute_minicoredump(argc, argv);
+ if (execute_minicoredump(argc, argv) < 0) {
+ _E("Failed to run minicoredumper - can not continue");
+ return -1;
+ }
#ifdef SYS_ASSERT
/* Use process_vm_readv() version as fallback if sys-assert
* failed to generate report */
if (crash_info.have_sysassert_report)
- return;
+ return -1;
#endif
execute_crash_stack(argc, argv);
+
+ return 0;
}
static int lock_dumpdir(void)
copy_maps();
}
/* Exec crash modules */
- execute_crash_modules(argc, argv);
+ if (execute_crash_modules(argc, argv) < 0) {
+ res = EXIT_FAILURE;
+ goto exit;
+ }
if (report_type >= REP_TYPE_FULL) {
/* Save shared objects info (file names, bulid IDs, rpm package names) */