mirror of
https://github.com/systemd/systemd.git
synced 2025-01-26 14:04:03 +03:00
switch some strlcpy's to memcpy
strlcpy counts the sourec string lengt and is therefore not suitable to copy a defined length of characters from one string to another. Signed-off-by: Kay Sievers <kay.sievers@suse.de>
This commit is contained in:
parent
738428b449
commit
13d11705bf
1
udev.c
1
udev.c
@ -131,6 +131,7 @@ int main(int argc, char *argv[], char *envp[])
|
||||
}
|
||||
}
|
||||
|
||||
udev_rules_close(&rules);
|
||||
udev_cleanup_device(&udev);
|
||||
|
||||
exit:
|
||||
|
@ -137,7 +137,8 @@ static int parse_config_file(void)
|
||||
if (bufline[0] == COMMENT_CHARACTER)
|
||||
continue;
|
||||
|
||||
strlcpy(line, bufline, count+1);
|
||||
memcpy(line, bufline, count);
|
||||
line[count] = '\0';
|
||||
|
||||
linepos = line;
|
||||
retval = get_key(&linepos, &variable, &value);
|
||||
|
36
udev_db.c
36
udev_db.c
@ -127,42 +127,49 @@ static int parse_db_file(struct udevice *udev, const char *filename)
|
||||
case 'P':
|
||||
if (count > sizeof(udev->devpath))
|
||||
count = sizeof(udev->devpath);
|
||||
strlcpy(udev->devpath, &bufline[2], count-1);
|
||||
memcpy(udev->devpath, &bufline[2], count-2);
|
||||
udev->devpath[count-2] = '\0';
|
||||
break;
|
||||
case 'N':
|
||||
if (count > sizeof(udev->name))
|
||||
count = sizeof(udev->name);
|
||||
strlcpy(udev->name, &bufline[2], count-1);
|
||||
memcpy(udev->name, &bufline[2], count-2);
|
||||
udev->name[count-2] = '\0';
|
||||
break;
|
||||
case 'M':
|
||||
if (count > sizeof(line))
|
||||
count = sizeof(line);
|
||||
strlcpy(line, &bufline[2], count-1);
|
||||
memcpy(line, &bufline[2], count-2);
|
||||
line[count-2] = '\0';
|
||||
sscanf(line, "%u:%u", &major, &minor);
|
||||
udev->devt = makedev(major, minor);
|
||||
break;
|
||||
case 'S':
|
||||
if (count > sizeof(line))
|
||||
count = sizeof(line);
|
||||
strlcpy(line, &bufline[2], count-1);
|
||||
memcpy(line, &bufline[2], count-2);
|
||||
line[count-2] = '\0';
|
||||
name_list_add(&udev->symlink_list, line, 0);
|
||||
break;
|
||||
case 'A':
|
||||
if (count > sizeof(line))
|
||||
count = sizeof(line);
|
||||
strlcpy(line, &bufline[2], count-1);
|
||||
memcpy(line, &bufline[2], count-2);
|
||||
line[count-2] = '\0';
|
||||
udev->partitions = atoi(line);
|
||||
break;
|
||||
case 'R':
|
||||
if (count > sizeof(line))
|
||||
count = sizeof(line);
|
||||
strlcpy(line, &bufline[2], count-1);
|
||||
memcpy(line, &bufline[2], count-2);
|
||||
line[count-2] = '\0';
|
||||
udev->ignore_remove = atoi(line);
|
||||
break;
|
||||
case 'E':
|
||||
if (count > sizeof(line))
|
||||
count = sizeof(line);
|
||||
strlcpy(line, &bufline[2], count-1);
|
||||
memcpy(line, &bufline[2], count-2);
|
||||
line[count-2] = '\0';
|
||||
name_list_add(&udev->env_list, line, 0);
|
||||
break;
|
||||
}
|
||||
@ -244,16 +251,19 @@ int udev_db_search_name(char *devpath, size_t len, const char *name)
|
||||
case 'P':
|
||||
if (count > sizeof(path))
|
||||
count = sizeof(path);
|
||||
strlcpy(path, &bufline[2], count-1);
|
||||
memcpy(path, &bufline[2], count-2);
|
||||
path[count-2] = '\0';
|
||||
break;
|
||||
case 'N':
|
||||
case 'S':
|
||||
if (count > sizeof(nodename))
|
||||
count = sizeof(nodename);
|
||||
strlcpy(nodename, &bufline[2], count-1);
|
||||
memcpy(nodename, &bufline[2], count-2);
|
||||
nodename[count-2] = '\0';
|
||||
dbg("compare '%s' '%s'", nodename, name);
|
||||
if (strcmp(nodename, name) == 0) {
|
||||
strlcpy(devpath, path, len);
|
||||
memcpy(devpath, &bufline[2], count-2);
|
||||
devpath[count-2] = '\0';
|
||||
file_unmap(buf, bufsize);
|
||||
closedir(dir);
|
||||
return 0;
|
||||
@ -319,12 +329,14 @@ int udev_db_dump_names(int (*handler_function)(const char *path, const char *nam
|
||||
case 'P':
|
||||
if (count > sizeof(path))
|
||||
count = sizeof(path);
|
||||
strlcpy(path, &bufline[2], count-1);
|
||||
memcpy(path, &bufline[2], count-2);
|
||||
path[count-2] = '\0';
|
||||
break;
|
||||
case 'N':
|
||||
if (count > sizeof(nodename))
|
||||
count = sizeof(nodename);
|
||||
strlcpy(nodename, &bufline[2], count-1);
|
||||
memcpy(nodename, &bufline[2], count-2);
|
||||
nodename[count-2] = '\0';
|
||||
break;
|
||||
default:
|
||||
continue;
|
||||
|
@ -159,7 +159,8 @@ static unsigned long get_id_by_name(const char *uname, const char *dbfile)
|
||||
if (count >= sizeof(line))
|
||||
continue;
|
||||
|
||||
strlcpy(line, bufline, count);
|
||||
memcpy(line, bufline, count-1);
|
||||
line[count-1] = '\0';
|
||||
pos = line;
|
||||
|
||||
/* get name */
|
||||
|
@ -187,7 +187,8 @@ static int import_keys_into_env(struct udevice *udev, const char *buf, size_t bu
|
||||
if (bufline[0] == COMMENT_CHARACTER)
|
||||
continue;
|
||||
|
||||
strlcpy(line, bufline, count+1);
|
||||
memcpy(line, bufline, count);
|
||||
line[count] = '\0';
|
||||
|
||||
linepos = line;
|
||||
if (get_key(&linepos, &variable, &value) == 0) {
|
||||
|
@ -89,7 +89,7 @@ static int get_key(char **line, char **key, enum key_operation *operation, char
|
||||
char *temp;
|
||||
|
||||
linepos = *line;
|
||||
if (!linepos)
|
||||
if (linepos == NULL && linepos[0] == '\0')
|
||||
return -1;
|
||||
|
||||
/* skip whitespace */
|
||||
@ -97,7 +97,10 @@ static int get_key(char **line, char **key, enum key_operation *operation, char
|
||||
linepos++;
|
||||
|
||||
/* get the key */
|
||||
if (linepos[0] == '\0')
|
||||
return -1;
|
||||
*key = linepos;
|
||||
|
||||
while (1) {
|
||||
linepos++;
|
||||
if (linepos[0] == '\0')
|
||||
@ -120,6 +123,8 @@ static int get_key(char **line, char **key, enum key_operation *operation, char
|
||||
/* skip whitespace after key */
|
||||
while (isspace(linepos[0]))
|
||||
linepos++;
|
||||
if (linepos[0] == '\0')
|
||||
return -1;
|
||||
|
||||
/* get operation type */
|
||||
if (linepos[0] == '=' && linepos[1] == '=') {
|
||||
@ -152,6 +157,8 @@ static int get_key(char **line, char **key, enum key_operation *operation, char
|
||||
/* skip whitespace after operator */
|
||||
while (isspace(linepos[0]))
|
||||
linepos++;
|
||||
if (linepos[0] == '\0')
|
||||
return -1;
|
||||
|
||||
/* get the value*/
|
||||
if (linepos[0] == '"')
|
||||
@ -634,6 +641,7 @@ int udev_rules_init(struct udev_rules *rules, int resolve_names)
|
||||
list_for_each_entry_safe(name_loop, name_tmp, &name_list, node) {
|
||||
parse_file(rules, name_loop->name);
|
||||
list_del(&name_loop->node);
|
||||
free(name_loop);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user