X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=src%2Fbin%2Flttng-crash%2Flttng-crash.c;h=262cd7cc0d7af67dd4b38b19cc3f6d7b7af79b11;hp=53de81bd46b640bb77862d6af48a472217844310;hb=6f4a662d3dededb1fbc0cc4516965ff3aa47062f;hpb=4fc83d948cea6b10484e65f004a6c167e71ac440 diff --git a/src/bin/lttng-crash/lttng-crash.c b/src/bin/lttng-crash/lttng-crash.c index 53de81bd4..262cd7cc0 100644 --- a/src/bin/lttng-crash/lttng-crash.c +++ b/src/bin/lttng-crash/lttng-crash.c @@ -2,18 +2,8 @@ * Copyright (C) 2011 David Goulet * Copyright (C) 2014 Mathieu Desnoyers * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License, version 2 only, - * as published by the Free Software Foundation. + * SPDX-License-Identifier: GPL-2.0-only * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include @@ -190,9 +180,9 @@ struct lttng_crash_layout { }; /* Variables */ -static char *progname, - *opt_viewer_path = NULL, - *opt_output_path = NULL; +static const char *progname; +static char *opt_viewer_path = NULL; +static char *opt_output_path = NULL; static char *input_path; @@ -227,9 +217,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); } /* @@ -305,7 +296,7 @@ static int parse_args(int argc, char **argv) } if (!opt_viewer_path) { - opt_viewer_path = DEFAULT_VIEWER; + opt_viewer_path = (char *) DEFAULT_VIEWER; } /* No leftovers, or more than one input path, print usage and quit */ @@ -498,7 +489,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; @@ -509,7 +501,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) { @@ -838,7 +844,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; } @@ -1087,7 +1093,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); @@ -1170,6 +1176,7 @@ end: if (closeret) { PERROR("closedir"); } +end_no_closedir: return ret; }