diff options
author | Alan Jenkins <alan-jenkins@tuffmail.co.uk> | 2008-11-01 16:09:16 +0000 |
---|---|---|
committer | Kay Sievers <kay.sievers@vrfy.org> | 2008-11-01 17:29:26 +0100 |
commit | 11ae7578505caa8df5604c6c86c82e9558439b30 (patch) | |
tree | 8e5866263551a6d9b506b746085373db78a4297e /udev/udev-rules.c | |
parent | 27691aa3ae65b2162e12b5f1d657363908263e12 (diff) |
udevd: fix termination of rule execution
LAST_RULE was broken, and I broke TK_END by making it do the same.
It used a "break" which exited the switch statement, but not the loop!
==2953== Invalid read of size 4
==2953== at 0x4081EE: dump_token (udev-rules.c:859)
==2953== by 0x40BADB: udev_rules_apply_to_event (udev-rules.c:1849)
==2953== by 0x403F17: udev_event_execute_rules (udev-event.c:554)
==2953== by 0x418626: main (test-udev.c:100)
==2953== Address 0x55ab1f8 is 0 bytes after a block of size 80 alloc'd
==2953== at 0x4C23082: realloc (vg_replace_malloc.c:429)
==2953== by 0x40B13B: udev_rules_new (udev-rules.c:1670)
==2953== by 0x418536: main (test-udev.c:84)
...
Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
Diffstat (limited to 'udev/udev-rules.c')
-rw-r--r-- | udev/udev-rules.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/udev/udev-rules.c b/udev/udev-rules.c index f6cc45ba75..77029f7bec 100644 --- a/udev/udev-rules.c +++ b/udev/udev-rules.c @@ -2319,7 +2319,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event continue; case TK_A_LAST_RULE: case TK_END: - break; + return 0; case TK_M_PARENTS_MAX: case TK_M_MAX: @@ -2334,9 +2334,8 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event /* fast-forward to next rule */ idx = rule->rule.next_rule; if (idx == 0) - break; + return 0; dbg(rules->udev, "forward to rule: %u\n", idx); cur = &rules->tokens[idx]; } - return 0; } |