summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZdenek Kabelac <zkabelac@redhat.com>2019-11-14 17:59:17 +0100
committerZdenek Kabelac <zkabelac@redhat.com>2019-11-14 18:06:42 +0100
commit219fe7235922cdcd559138def0a46a48ceaf528e (patch)
treee600b43f793344374baffe250c02b51259a80233
parentd4d82dbb706da711cad73f045be7932ce1b23407 (diff)
downloadlvm2-219fe7235922cdcd559138def0a46a48ceaf528e.tar.gz
hints: validate sscanf results
-rw-r--r--lib/label/hints.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/lib/label/hints.c b/lib/label/hints.c
index ec43dd35c..09f12deb6 100644
--- a/lib/label/hints.c
+++ b/lib/label/hints.c
@@ -716,10 +716,9 @@ static int _read_hint_file(struct cmd_context *cmd, struct dm_list *hints, int *
keylen = strlen("scan_lvs:");
if (!strncmp(_hint_line, "scan_lvs:", keylen)) {
int scan_lvs = 0;
- sscanf(_hint_line + keylen, "%u", &scan_lvs);
-
- if (scan_lvs != cmd->scan_lvs) {
- log_debug("ignore hints with different scan_lvs");
+ if ((sscanf(_hint_line + keylen, "%u", &scan_lvs) != 1) ||
+ scan_lvs != cmd->scan_lvs) {
+ log_debug("ignore hints with different or unreadable scan_lvs");
*needs_refresh = 1;
break;
}
@@ -728,7 +727,11 @@ static int _read_hint_file(struct cmd_context *cmd, struct dm_list *hints, int *
keylen = strlen("devs_hash:");
if (!strncmp(_hint_line, "devs_hash:", keylen)) {
- sscanf(_hint_line + keylen, "%u %u", &read_hash, &read_count);
+ if (sscanf(_hint_line + keylen, "%u %u", &read_hash, &read_count) != 2) {
+ log_debug("ignore hints with invalid devs_hash");
+ *needs_refresh = 1;
+ break;
+ }
continue;
}