diff options
author | Kay Sievers <kay@vrfy.org> | 2012-11-15 17:30:03 +0100 |
---|---|---|
committer | Kay Sievers <kay@vrfy.org> | 2012-11-15 17:30:03 +0100 |
commit | 33c770b174ec77d7da6e7e830e0bca9f74d54367 (patch) | |
tree | 317497de53316a245e442a7e9cd038154c3dd76b | |
parent | f72daa64dcfa73c8427663be53d49393e0cbb343 (diff) |
udev: hwdb - properly handle a missing database
On Thu, Nov 15, 2012 at 5:05 PM, Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> wrote:
> Something like this appeared with latest git:
>
> Nov 15 16:55:46 fedora-15 systemd-udevd[334]: worker [364] terminated by signal 11 (Segmentation fault)
> Nov 15 16:55:46 fedora-15 [387]: Process 364 (systemd-udevd) dumped core.
> Nov 15 16:55:46 fedora-15 systemd-udevd[334]: worker [364] failed while handling '/devices/virtual/net/lo'
> Nov 15 16:55:46 fedora-15 systemd-udevd[334]: worker [360] terminated by signal 11 (Segmentation fault)
> Nov 15 16:55:46 fedora-15 systemd-udevd[334]: worker [360] failed while handling '/devices/pci0000:00/0000:00:03.0/virtio0/net
> Nov 15 16:55:46 fedora-15 [389]: Process 360 (systemd-udevd) dumped core.
>
> Core was generated by usr/lib/systemd/systemd-udevd'.
> Program terminated with signal 11, Segmentation fault.
> #0 0x0000000000423c87 in udev_hwdb_get_properties_list_entry (hwdb=0x0, modalias=0x7fffbcd155f0
-rw-r--r-- | src/libudev/libudev-hwdb.c | 2 | ||||
-rw-r--r-- | src/udev/udev-builtin-hwdb.c | 3 |
2 files changed, 4 insertions, 1 deletions
diff --git a/src/libudev/libudev-hwdb.c b/src/libudev/libudev-hwdb.c index 751b34209e..6779e45b4e 100644 --- a/src/libudev/libudev-hwdb.c +++ b/src/libudev/libudev-hwdb.c @@ -377,7 +377,7 @@ bool udev_hwdb_validate(struct udev_hwdb *hwdb) { _public_ struct udev_list_entry *udev_hwdb_get_properties_list_entry(struct udev_hwdb *hwdb, const char *modalias, unsigned int flags) { int err; - if (!hwdb->f) { + if (!hwdb || !hwdb->f) { errno = EINVAL; return NULL; } diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c index 234448cdf1..0b35d799fe 100644 --- a/src/udev/udev-builtin-hwdb.c +++ b/src/udev/udev-builtin-hwdb.c @@ -33,6 +33,9 @@ int udev_builtin_hwdb_lookup(struct udev_device *dev, const char *modalias, bool struct udev_list_entry *entry; int n = 0; + if (!hwdb) + return -ENOENT; + udev_list_entry_foreach(entry, udev_hwdb_get_properties_list_entry(hwdb, modalias, 0)) { if (udev_builtin_add_property(dev, test, udev_list_entry_get_name(entry), |