summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--kexec/firmware_memmap.c22
-rw-r--r--kexec/fs2dt.c16
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",