From: Michael Morony Date: Fri, 24 Aug 2007 06:14:21 +0000 (+0200) Subject: set buffer size if strlcpy/strlcat indicate truncation X-Git-Tag: 174~1844 X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=1f7a36f2c0953c60a8d7acadc281285a0b84fb46;p=systemd set buffer size if strlcpy/strlcat indicate truncation --- diff --git a/udev_rules.c b/udev_rules.c index 0dcbf156..35db958c 100644 --- a/udev_rules.c +++ b/udev_rules.c @@ -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) diff --git a/udev_sysfs.c b/udev_sysfs.c index 34ae9ac1..d5b04c31 100644 --- a/udev_sysfs.c +++ b/udev_sysfs.c @@ -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)); diff --git a/udevinfo.c b/udevinfo.c index d0b1c447..be9aa769 100644 --- a/udevinfo.c +++ b/udevinfo.c @@ -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 */ diff --git a/udevmonitor.c b/udevmonitor.c index a9cc0614..644a9550 100644 --- a/udevmonitor.c +++ b/udevmonitor.c @@ -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; } diff --git a/udevtrigger.c b/udevtrigger.c index cf8f209b..309c54ab 100644 --- a/udevtrigger.c +++ b/udevtrigger.c @@ -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);