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@tuffmail.co.uk>
TK_M_WAITFOR, /* val */
TK_M_ATTR, /* val, attr */
TK_M_WAITFOR, /* val */
TK_M_ATTR, /* val, attr */
TK_M_KERNELS, /* val */
TK_M_SUBSYSTEMS, /* val */
TK_M_DRIVERS, /* val */
TK_M_KERNELS, /* val */
TK_M_SUBSYSTEMS, /* val */
TK_M_DRIVERS, /* val */
[TK_M_WAITFOR] = "M WAITFOR",
[TK_M_ATTR] = "M ATTR",
[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",
[TK_M_KERNELS] = "M KERNELS",
[TK_M_SUBSYSTEMS] = "M SUBSYSTEMS",
[TK_M_DRIVERS] = "M DRIVERS",
token->key.event_timeout = *(int *)data;
break;
case TK_RULE:
token->key.event_timeout = *(int *)data;
break;
case TK_RULE:
case TK_M_PARENTS_MAX:
case TK_M_MAX:
case TK_END:
case TK_M_PARENTS_MAX:
case TK_M_MAX:
case TK_END:
case TK_END:
dbg(rules->udev, "* %s\n", token_str[type]);
break;
case TK_END:
dbg(rules->udev, "* %s\n", token_str[type]);
break;
case TK_M_PARENTS_MAX:
case TK_M_MAX:
case TK_UNSET:
case TK_M_PARENTS_MAX:
case TK_M_MAX:
case TK_UNSET:
/* get whole sequence of parent matches */
next = cur;
/* 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 */
next++;
/* loop over parents */
case TK_M_PARENTS_MAX:
case TK_M_MAX:
case TK_UNSET:
case TK_M_PARENTS_MAX:
case TK_M_MAX:
case TK_UNSET: