diff options
author | Zdenek Kabelac <zkabelac@redhat.com> | 2019-11-14 17:59:17 +0100 |
---|---|---|
committer | Zdenek Kabelac <zkabelac@redhat.com> | 2019-11-14 18:06:42 +0100 |
commit | 219fe7235922cdcd559138def0a46a48ceaf528e (patch) | |
tree | e600b43f793344374baffe250c02b51259a80233 | |
parent | d4d82dbb706da711cad73f045be7932ce1b23407 (diff) | |
download | lvm2-219fe7235922cdcd559138def0a46a48ceaf528e.tar.gz |
hints: validate sscanf results
-rw-r--r-- | lib/label/hints.c | 13 |
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; } |