summaryrefslogtreecommitdiffstats
path: root/kexec/firmware_memmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'kexec/firmware_memmap.c')
-rw-r--r--kexec/firmware_memmap.c22
1 files changed, 19 insertions, 3 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);