diff options
-rw-r--r-- | kexec/firmware_memmap.c | 22 | ||||
-rw-r--r-- | kexec/fs2dt.c | 16 |
2 files changed, 32 insertions, 6 deletions
diff --git a/kexec/firmware_memmap.c b/kexec/firmware_memmap.c index 1ee214aa..457c3dc9 100644 --- a/kexec/firmware_memmap.c +++ b/kexec/firmware_memmap.c @@ -125,11 +125,17 @@ static int parse_memmap_entry(const char *entry, struct memory_range *range) { char filename[PATH_MAX]; char *type; + int ret; /* * entry/start */ - snprintf(filename, PATH_MAX, "%s/%s", entry, "start"); + ret = snprintf(filename, PATH_MAX, "%s/%s", entry, "start"); + if (ret < 0 || ret >= PATH_MAX) { + fprintf(stderr, "snprintf failed: %s\n", strerror(errno)); + return -1; + } + filename[PATH_MAX-1] = 0; range->start = parse_numeric_sysfs(filename); @@ -139,7 +145,12 @@ static int parse_memmap_entry(const char *entry, struct memory_range *range) /* * entry/end */ - snprintf(filename, PATH_MAX, "%s/%s", entry, "end"); + ret = snprintf(filename, PATH_MAX, "%s/%s", entry, "end"); + if (ret < 0 || ret >= PATH_MAX) { + fprintf(stderr, "snprintf failed: %s\n", strerror(errno)); + return -1; + } + filename[PATH_MAX-1] = 0; range->end = parse_numeric_sysfs(filename); @@ -149,7 +160,12 @@ static int parse_memmap_entry(const char *entry, struct memory_range *range) /* * entry/type */ - snprintf(filename, PATH_MAX, "%s/%s", entry, "type"); + ret = snprintf(filename, PATH_MAX, "%s/%s", entry, "type"); + if (ret < 0 || ret >= PATH_MAX) { + fprintf(stderr, "snprintf failed: %s\n", strerror(errno)); + return -1; + } + filename[PATH_MAX-1] = 0; type = parse_string_sysfs(filename); diff --git a/kexec/fs2dt.c b/kexec/fs2dt.c index 07a5e2f9..1a43058b 100644 --- a/kexec/fs2dt.c +++ b/kexec/fs2dt.c @@ -568,7 +568,7 @@ static void putnode(void) struct dirent **namelist; int numlist, i; struct stat statbuf; - int plen; + int plen, ret; numlist = scandir(pathname, &namelist, 0, comparefunc); if (numlist < 0) @@ -670,10 +670,20 @@ static void putnode(void) * code can print 'I'm in purgatory' message. Currently only * pseries/hvcterminal is supported. */ - snprintf(filename, MAXPATH, "%sstdout-path", pathname); + ret = snprintf(filename, MAXPATH, "%sstdout-path", pathname); + if (ret < 0 || ret >= MAXPATH) { + fprintf(stderr, "snprintf failed: %s\n", strerror(errno)); + goto no_debug; + } + fd = open(filename, O_RDONLY); if (fd == -1) { - snprintf(filename, MAXPATH, "%slinux,stdout-path", pathname); + ret = snprintf(filename, MAXPATH, "%slinux,stdout-path", pathname); + if (ret < 0 || ret >= MAXPATH) { + fprintf(stderr, "snprintf failed: %s\n", strerror(errno)); + goto no_debug; + } + fd = open(filename, O_RDONLY); if (fd == -1) { printf("Unable to find %s[linux,]stdout-path, printing from purgatory is disabled\n", |