mirror of
https://github.com/AuxXxilium/eudev.git
synced 2024-12-28 06:35:34 +07:00
input_id: Avoid memory overflow with too long capability masks
Joey Lee <jlee@novell.com> reported a problem on an MSI laptop which reports a too long capabilities/key: E: EV==3 E: KEY==180000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 This is longer than KEY_MAX and thus caused a memory overflow. Guard against this now and just ignore the excess blocks.
This commit is contained in:
parent
941c40bdc4
commit
88149f668e
@ -61,12 +61,18 @@ static void get_cap_mask (struct udev_device *dev, const char* attr,
|
||||
i = 0;
|
||||
while ((word = strrchr(text, ' ')) != NULL) {
|
||||
val = strtoul (word+1, NULL, 16);
|
||||
bitmask[i] = val;
|
||||
if (i < bitmask_size/sizeof(unsigned long))
|
||||
bitmask[i] = val;
|
||||
else
|
||||
DBG("Ignoring %s block %lX which is larger than maximum size\n", attr, val);
|
||||
*word = '\0';
|
||||
++i;
|
||||
}
|
||||
val = strtoul (text, NULL, 16);
|
||||
bitmask[i] = val;
|
||||
if (i < bitmask_size/sizeof(unsigned long))
|
||||
bitmask[i] = val;
|
||||
else
|
||||
DBG("Ignoring %s block %lX which is larger than maximum size\n", attr, val);
|
||||
|
||||
if (debug) {
|
||||
/* printf pattern with the right unsigned long number of hex chars */
|
||||
|
Loading…
Reference in New Issue
Block a user