diff options
Diffstat (limited to 'src/udev')
-rw-r--r-- | src/udev/fuzz-udev-rules.c | 2 | ||||
-rw-r--r-- | src/udev/udev-rules.c | 11 | ||||
-rw-r--r-- | src/udev/udev-rules.h | 2 | ||||
-rw-r--r-- | src/udev/udevadm-verify.c | 2 |
4 files changed, 9 insertions, 8 deletions
diff --git a/src/udev/fuzz-udev-rules.c b/src/udev/fuzz-udev-rules.c index 1d487b94ee..aff176eb1b 100644 --- a/src/udev/fuzz-udev-rules.c +++ b/src/udev/fuzz-udev-rules.c @@ -27,7 +27,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { fflush(f); assert_se(rules = udev_rules_new(RESOLVE_NAME_EARLY)); - r = udev_rules_parse_file(rules, filename, NULL); + r = udev_rules_parse_file(rules, filename, /* extra_checks = */ false, NULL); log_info_errno(r, "Parsing %s: %m", filename); assert_se(r >= 0 || /* OK */ r == -ENOBUFS); /* line length exceeded */ diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index 1d1c27edd0..23dd31229d 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -1358,7 +1358,7 @@ static void udev_check_rule_line(UdevRuleLine *line) { udev_check_conflicts_duplicates(line); } -int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile **ret) { +int udev_rules_parse_file(UdevRules *rules, const char *filename, bool extra_checks, UdevRuleFile **ret) { _cleanup_(udev_rule_file_freep) UdevRuleFile *rule_file = NULL; _cleanup_free_ char *continuation = NULL, *name = NULL; _cleanup_fclose_ FILE *f = NULL; @@ -1469,6 +1469,10 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile * rule_resolve_goto(rule_file); + if (extra_checks) + LIST_FOREACH(rule_lines, line, rule_file->rule_lines) + udev_check_rule_line(line); + if (ret) *ret = rule_file; @@ -1479,9 +1483,6 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile * unsigned udev_rule_file_get_issues(UdevRuleFile *rule_file) { assert(rule_file); - LIST_FOREACH(rule_lines, line, rule_file->rule_lines) - udev_check_rule_line(line); - return rule_file->issues; } @@ -1513,7 +1514,7 @@ int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing return log_debug_errno(r, "Failed to enumerate rules files: %m"); STRV_FOREACH(f, files) { - r = udev_rules_parse_file(rules, *f, NULL); + r = udev_rules_parse_file(rules, *f, /* extra_checks = */ false, NULL); if (r < 0) log_debug_errno(r, "Failed to read rules file %s, ignoring: %m", *f); } diff --git a/src/udev/udev-rules.h b/src/udev/udev-rules.h index cecc285b2c..9b477fb235 100644 --- a/src/udev/udev-rules.h +++ b/src/udev/udev-rules.h @@ -18,7 +18,7 @@ typedef enum { _ESCAPE_TYPE_INVALID = -EINVAL, } UdevRuleEscapeType; -int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile **ret); +int udev_rules_parse_file(UdevRules *rules, const char *filename, bool extra_checks, UdevRuleFile **ret); unsigned udev_rule_file_get_issues(UdevRuleFile *rule_file); UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing); int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing); diff --git a/src/udev/udevadm-verify.c b/src/udev/udevadm-verify.c index 2e947ef830..48aeb8f7e7 100644 --- a/src/udev/udevadm-verify.c +++ b/src/udev/udevadm-verify.c @@ -104,7 +104,7 @@ static int verify_rules_file(UdevRules *rules, const char *fname) { UdevRuleFile *file; int r; - r = udev_rules_parse_file(rules, fname, &file); + r = udev_rules_parse_file(rules, fname, /* extra_checks = */ true, &file); if (r < 0) return log_error_errno(r, "Failed to parse rules file %s: %m", fname); if (r == 0) /* empty file. */ |