X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fbin%2Flttng-crash%2Flttng-crash.c;h=de556a30bc9cd20c1a81c20513a0db4e88ae0174;hb=a2b988e2cc31f76365b600ca4e3a26604de00022;hp=ba28af9afa9003f2f92decb5ade2275634b38a02;hpb=83f4233dde73280d45fcfb799add96cce32098ce;p=lttng-tools.git diff --git a/src/bin/lttng-crash/lttng-crash.c b/src/bin/lttng-crash/lttng-crash.c index ba28af9af..de556a30b 100644 --- a/src/bin/lttng-crash/lttng-crash.c +++ b/src/bin/lttng-crash/lttng-crash.c @@ -61,6 +61,14 @@ 0xF1 ^ 0xFF, 0x77 ^ 0xFF, 0xBF ^ 0xFF, 0x17 ^ 0xFF, \ } +static const char *help_msg = +#ifdef LTTNG_EMBED_HELP +#include +#else +NULL +#endif +; + /* * Non-static to ensure the compiler does not optimize away the xor. */ @@ -207,10 +215,10 @@ static struct option long_options[] = { static void usage(void) { - int ret = utils_show_man_page(1, "lttng-crash"); + int ret = utils_show_help(1, "lttng-crash", help_msg); if (ret) { - ERR("Cannot view man page lttng-crash(1)"); + ERR("Cannot show --help for `lttng-crash`"); perror("exec"); exit(EXIT_FAILURE); } @@ -219,9 +227,10 @@ static void usage(void) static void version(FILE *ofp) { fprintf(ofp, "%s (LTTng Crash Trace Viewer) " VERSION " - " VERSION_NAME -"%s\n", +"%s%s\n", progname, - GIT_VERSION[0] == '\0' ? "" : " - " GIT_VERSION); + GIT_VERSION[0] == '\0' ? "" : " - " GIT_VERSION, + EXTRA_VERSION_NAME[0] == '\0' ? "" : " - " EXTRA_VERSION_NAME); } /* @@ -490,7 +499,8 @@ int check_magic(const uint8_t *magic) } static -int get_crash_layout(struct lttng_crash_layout *layout, int fd) +int get_crash_layout(struct lttng_crash_layout *layout, int fd, + const char *input_file) { char *map; int ret = 0, unmapret; @@ -501,7 +511,21 @@ int get_crash_layout(struct lttng_crash_layout *layout, int fd) const struct crash_abi_unknown *abi; uint16_t endian; enum lttng_crash_type layout_type; + struct stat stat; + ret = fstat(fd, &stat); + if (ret < 0) { + PERROR("Failed to fstat '%s'", input_file); + return -1; + } + if (stat.st_size < RB_CRASH_DUMP_ABI_LEN) { + ERR("File '%s' truncated: file length of %" PRIi64 + " bytes does not meet the minimal expected " + "length of %d bytes", + input_file, (int64_t) stat.st_size, + RB_CRASH_DUMP_ABI_LEN); + return -1; + } map = mmap(NULL, RB_CRASH_DUMP_ABI_LEN, PROT_READ, MAP_PRIVATE, fd, 0); if (map == MAP_FAILED) { @@ -830,7 +854,7 @@ int extract_file(int output_dir_fd, const char *output_file, } /* Query the crash ABI layout */ - ret = get_crash_layout(&layout, fd_src); + ret = get_crash_layout(&layout, fd_src, input_file); if (ret) { goto close_src; } @@ -1079,7 +1103,7 @@ int delete_dir_recursive(const char *path) if (!dir) { PERROR("Cannot open '%s' path", path); ret = -errno; - goto end; + goto end_no_closedir; } path_len = strlen(path); @@ -1162,6 +1186,7 @@ end: if (closeret) { PERROR("closedir"); } +end_no_closedir: return ret; }