chiark / gitweb /
set buffer size if strlcpy/strlcat indicate truncation
authorMichael Morony <michael.morony@gmail.com>
Fri, 24 Aug 2007 06:14:21 +0000 (08:14 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Fri, 24 Aug 2007 06:14:21 +0000 (08:14 +0200)
udev_rules.c
udev_sysfs.c
udevinfo.c
udevmonitor.c
udevtrigger.c

index 0dcbf15..35db958 100644 (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)
index 34ae9ac..d5b04c3 100644 (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));
index d0b1c44..be9aa76 100644 (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 */
index a9cc061..644a955 100644 (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;
 }
 
index cf8f209..309c54a 100644 (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);