set buffer size if strlcpy/strlcat indicate truncation

This commit is contained in:
Michael Morony 2007-08-24 08:14:21 +02:00 committed by Kay Sievers
parent 7e59986391
commit 1f7a36f2c0
5 changed files with 9 additions and 5 deletions

View file

@ -475,10 +475,12 @@ static int pass_env_to_socket(const char *sockname, const char *devpath, const c
bufpos = snprintf(buf, sizeof(buf)-1, "%s@%s", action, devpath);
bufpos++;
for (i = 0; environ[i] != NULL && bufpos < sizeof(buf); i++) {
for (i = 0; environ[i] != NULL && bufpos < (sizeof(buf)-1); i++) {
bufpos += strlcpy(&buf[bufpos], environ[i], sizeof(buf) - bufpos-1);
bufpos++;
}
if (bufpos > sizeof(buf))
bufpos = sizeof(buf);
count = sendto(sock, &buf, bufpos, 0, (struct sockaddr *)&saddr, addrlen);
if (count < 0)

View file

@ -355,6 +355,8 @@ char *sysfs_attr_get_value(const char *devpath, const char *attr_name)
dbg("open '%s'/'%s'", devpath, attr_name);
sysfs_len = strlcpy(path_full, sysfs_path, sizeof(path_full));
if(sysfs_len >= sizeof(path_full))
sysfs_len = sizeof(path_full) - 1;
path = &path_full[sysfs_len];
strlcat(path_full, devpath, sizeof(path_full));
strlcat(path_full, "/", sizeof(path_full));

View file

@ -79,6 +79,8 @@ static void print_all_attributes(const char *devpath, const char *key)
if (attr_value == NULL)
continue;
len = strlcpy(value, attr_value, sizeof(value));
if(len >= sizeof(value))
len = sizeof(value) - 1;
dbg("attr '%s'='%s'(%zi)", dent->d_name, value, len);
/* remove trailing newlines */

View file

@ -43,7 +43,6 @@ static int init_udev_monitor_socket(void)
{
struct sockaddr_un saddr;
socklen_t addrlen;
const int feature_on = 1;
int retval;
memset(&saddr, 0x00, sizeof(saddr));
@ -67,9 +66,6 @@ static int init_udev_monitor_socket(void)
return -1;
}
/* enable receiving of the sender credentials */
setsockopt(udev_monitor_sock, SOL_SOCKET, SO_PASSCRED, &feature_on, sizeof(feature_on));
return 0;
}

View file

@ -435,6 +435,8 @@ static void scan_failed(void)
continue;
start = strlcpy(device, sysfs_path, sizeof(device));
if(start >= sizeof(device))
start = sizeof(device) - 1;
strlcat(device, dent->d_name, sizeof(device));
path_decode(&device[start]);
device_list_insert(device);