[PATCH] fix udev segfaults with bad permissions file

On Tue, Sep 14, 2004 at 02:53:12PM +0200, Loleslaw wrote:
> Hi,
> Since I started using udev-031 on my gentoo udevstart would just segfault
> (udev-030 worked). As it turned out I had a file in /etc/udev/permissions.d
> with a single space in one line. I've cleaned the file and it works all
> right, but I thought you could be interested.
> I've traced it to function namedev_init_permissions in namedev_parse.c
> I don't know C well enough to suggest a patch.

Yeah, thanks for pointing that out. It only happens if the file ends with
whitespace-only lines. Here is a fix and a test for udev-test.pl to
cover that case.
This commit is contained in:
kay.sievers@vrfy.org 2004-09-14 17:45:48 -07:00 committed by Greg KH
parent cb5203fb48
commit 3db7fa2702
3 changed files with 25 additions and 15 deletions

View file

@ -182,15 +182,13 @@ static int namedev_parse_rules(char *filename)
continue;
}
/* empty line? */
if (bufline[0] == '\0' || bufline[0] == '\n')
continue;
/* eat the whitespace */
while (isspace(bufline[0])) {
while ((count > 0) && isspace(bufline[0])) {
bufline++;
count--;
}
if (count == 0)
continue;
/* see if this is a comment */
if (bufline[0] == COMMENT_CHARACTER)
@ -381,15 +379,13 @@ static int namedev_parse_permissions(char *filename)
continue;
}
/* empty line? */
if (bufline[0] == '\0' || bufline[0] == '\n')
continue;
/* eat the whitespace */
while (isspace(bufline[0])) {
while ((count > 0) && isspace(bufline[0])) {
bufline++;
count--;
}
if (count == 0)
continue;
/* see if this is a comment */
if (bufline[0] == COMMENT_CHARACTER)

View file

@ -158,6 +158,22 @@ EOF
# this is a comment with whitespace before the comment
KERNEL="ttyUSB0", NAME="visor"
EOF
},
{
desc => "Handle whitespace only lines (and replace kernel name)",
subsys => "tty",
devpath => "/class/tty/ttyUSB0",
exp_name => "whitespace" ,
conf => <<EOF
# this is a comment with whitespace before the comment
KERNEL="ttyUSB0", NAME="whitespace"
EOF
},
{

View file

@ -161,15 +161,13 @@ static int parse_config_file(void)
continue;
}
/* empty line? */
if (bufline[0] == '\0' || bufline[0] == '\n')
continue;
/* eat the whitespace */
while (isspace(bufline[0])) {
while ((count > 0) && isspace(bufline[0])) {
bufline++;
count--;
}
if (count == 0)
continue;
/* see if this is a comment */
if (bufline[0] == COMMENT_CHARACTER)