summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaymond Chen <Raymond.Chen@Sun.COM>2009-11-06 11:19:08 +0800
committerRaymond Chen <Raymond.Chen@Sun.COM>2009-11-06 11:19:08 +0800
commit3fb52c733c5435ce279a4641b57941b1befa5c9f (patch)
treec918111e3488c530b9761bf96b98d7fb7660ff42
parenta15215608b8bd90f714f6db21ee623b584607cb6 (diff)
downloadillumos-joyent-3fb52c733c5435ce279a4641b57941b1befa5c9f.tar.gz
6850995 hald dumped core
6898374 incorrect USB webcam video* devlink remove rules cause dangling links
-rw-r--r--usr/src/cmd/devfsadm/usb_link.c4
-rw-r--r--usr/src/cmd/hal/hald/solaris/devinfo_usb.c9
2 files changed, 7 insertions, 6 deletions
diff --git a/usr/src/cmd/devfsadm/usb_link.c b/usr/src/cmd/devfsadm/usb_link.c
index a93c1b9eb3..d47c4931eb 100644
--- a/usr/src/cmd/devfsadm/usb_link.c
+++ b/usr/src/cmd/devfsadm/usb_link.c
@@ -116,10 +116,10 @@ static devfsadm_remove_t usb_remove_cbt[] = {
ILEVEL_0, devfsadm_rm_all },
{ "usb", USB_LINK_RE_DDIVS_USBC, RM_POST | RM_HOT | RM_ALWAYS,
ILEVEL_0, devfsadm_rm_all },
- { "usb", USB_LINK_RE_VIDEO, RM_POST | RM_HOT | RM_ALWAYS, ILEVEL_0,
- devfsadm_rm_all },
{ "usb", USB_LINK_RE_VIDEO2, RM_POST | RM_HOT | RM_ALWAYS, ILEVEL_0,
devfsadm_rm_all },
+ { "usb", USB_LINK_RE_VIDEO, RM_POST | RM_HOT | RM_ALWAYS, ILEVEL_0,
+ devfsadm_rm_all },
{ "usb", USB_LINK_RE_DEVICE, RM_POST | RM_HOT, ILEVEL_0,
devfsadm_rm_all },
{ "usb", USB_LINK_RE_HID, RM_POST | RM_HOT | RM_ALWAYS, ILEVEL_0,
diff --git a/usr/src/cmd/hal/hald/solaris/devinfo_usb.c b/usr/src/cmd/hal/hald/solaris/devinfo_usb.c
index 8098ec78b9..a3fce2cad0 100644
--- a/usr/src/cmd/hal/hald/solaris/devinfo_usb.c
+++ b/usr/src/cmd/hal/hald/solaris/devinfo_usb.c
@@ -462,7 +462,7 @@ get_dev_link_path(di_node_t node, char *nodetype, char *re, char **devlink, char
* situation, we will read the devlink name from
* /dev/usb directory.
*/
- if ((*devlink == NULL) &&
+ if ((*devlink == NULL) && (re != NULL) &&
((strstr(re, "hid") != NULL) || (strstr(re, "video") != NULL))) {
*devlink = get_usb_devlink(*minor_path, "/dev/usb/");
}
@@ -494,7 +494,7 @@ devinfo_usb_video4linux_add(HalDevice *usbd, di_node_t node)
char *s;
get_dev_link_path(node, "usb_video",
- "^usb/video+", &devlink, &minor_path, &minor_name);
+ "^usb/video[0-9]+", &devlink, &minor_path, &minor_name);
if ((minor_path == NULL) || (devlink == NULL)) {
@@ -555,7 +555,7 @@ devinfo_usb_input_add(HalDevice *usbd, di_node_t node)
char udi[HAL_PATH_MAX];
get_dev_link_path(node, "ddi_pseudo",
- "^usb/hid+", &devlink, &minor_path, &minor_name);
+ "^usb/hid[0-9]+", &devlink, &minor_path, &minor_name);
if ((minor_path == NULL) || (devlink == NULL)) {
@@ -629,7 +629,8 @@ devinfo_usb_scsa2usb_add(HalDevice *usbd, di_node_t node)
char *devlink = NULL;
char udi[HAL_PATH_MAX];
- get_dev_link_path(node, "ddi_ctl:devctl:scsi", NULL, &devlink, &minor_path, &minor_name);
+ get_dev_link_path(node, "ddi_ctl:devctl:scsi",
+ "^usb/mass-storage[0-9]+", &devlink, &minor_path, &minor_name);
if ((devlink == NULL) || (minor_path == NULL)) {
goto out;