udevd: be more careful when matching against parents

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I'm worried about what will happen with things like

KERNELS=="*" # pointless rule
KERNELS=="doesnt-match" # another pointless rule

Since TK_RULE < TK_M_PARENTS_MAX, we will try to match all three tokens
against parents of the current device.  I can't think of a bad case,
but it's not exactly good either.

Signed-off-by: Alan Jenkins <alan-jenkins@xxxxxxxxxxxxxx>

diff --git a/udev/udev-rules.c b/udev/udev-rules.c
index f6cc45b..a0c9926 100644
--- a/udev/udev-rules.c
+++ b/udev/udev-rules.c
@@ -93,6 +93,7 @@ enum token_type {
 	TK_M_WAITFOR,			/* val */
 	TK_M_ATTR,			/* val, attr */
 
+	TK_M_PARENTS_MIN,
 	TK_M_KERNELS,			/* val */
 	TK_M_SUBSYSTEMS,		/* val */
 	TK_M_DRIVERS,			/* val */
@@ -146,6 +147,7 @@ static const char *token_str[] = {
 	[TK_M_WAITFOR] =		"M WAITFOR",
 	[TK_M_ATTR] =			"M ATTR",
 
+	[TK_M_PARENTS_MIN] =        "M PARENTS_MIN",
 	[TK_M_KERNELS] =		"M KERNELS",
 	[TK_M_SUBSYSTEMS] =		"M SUBSYSTEMS",
 	[TK_M_DRIVERS] =		"M DRIVERS",
@@ -806,6 +808,7 @@ static int rule_add_token(struct rule_tmp *rule_tmp, enum token_type type,
 		token->key.event_timeout = *(int *)data;
 		break;
 	case TK_RULE:
+	case TK_M_PARENTS_MIN:
 	case TK_M_PARENTS_MAX:
 	case TK_M_MAX:
 	case TK_END:
@@ -943,6 +946,7 @@ static void dump_token(struct udev_rules *rules, struct token *token)
 	case TK_END:
 		dbg(rules->udev, "* %s\n", token_str[type]);
 		break;
+	case TK_M_PARENTS_MIN:
 	case TK_M_PARENTS_MAX:
 	case TK_M_MAX:
 	case TK_UNSET:
@@ -1937,7 +1941,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 
 				/* get whole sequence of parent matches */
 				next = cur;
-				while (next->type < TK_M_PARENTS_MAX)
+				while (next->type > TK_M_PARENTS_MIN && next->type < TK_M_PARENTS_MAX)
 					next++;
 
 				/* loop over parents */
@@ -2321,6 +2325,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event
 		case TK_END:
 			break;
 
+		case TK_M_PARENTS_MIN:
 		case TK_M_PARENTS_MAX:
 		case TK_M_MAX:
 		case TK_UNSET:


--
To unsubscribe from this list: send the line "unsubscribe linux-hotplug" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel]     [Linux DVB]     [Asterisk Internet PBX]     [DCCP]     [Netdev]     [X.org]     [Util Linux NG]     [Fedora Women]     [ALSA Devel]     [Linux USB]

  Powered by Linux