init: handle ueventd path truncation better
Log an error before discarding problematic events, and add a missing
truncation check to the usb subsystem's unique codepath
Change-Id: I0d05aa287ffc63b46d1752d2a7409d35dc8caca7
Signed-off-by: Greg Hackmann <ghackmann@google.com>
diff --git a/init/devices.c b/init/devices.c
index af88c5f..2551ca8 100644
--- a/init/devices.c
+++ b/init/devices.c
@@ -530,8 +530,11 @@
name++;
/* too-long names would overrun our buffer */
- if(strlen(name) > len)
+ if(strlen(name) > len) {
+ ERROR("DEVPATH=%s exceeds %u-character limit on filename; ignoring event\n",
+ name, len);
return NULL;
+ }
return name;
}
@@ -576,7 +579,18 @@
* see drivers/base/core.c
*/
char *p = devpath;
- snprintf(devpath, sizeof(devpath), "/dev/%s", uevent->device_name);
+ int s = snprintf(devpath, sizeof(devpath), "/dev/%s",
+ uevent->device_name);
+ if (s < 0) {
+ ERROR("failed to assemble device path (%s); ignoring event\n",
+ strerror(errno));
+ return;
+ } else if ((size_t)s >= sizeof(devpath)) {
+ ERROR("/dev/%s exceeds %u-character limit on path; ignoring event\n",
+ uevent->device_name, sizeof(devpath));
+ return;
+ }
+
/* skip leading /dev/ */
p += 5;
/* build directories */