diff --git a/repos/os/src/lib/genode_c_api/usb.cc b/repos/os/src/lib/genode_c_api/usb.cc index 62c4a452e8..d07d4226d4 100644 --- a/repos/os/src/lib/genode_c_api/usb.cc +++ b/repos/os/src/lib/genode_c_api/usb.cc @@ -453,20 +453,22 @@ genode_usb_session::genode_usb_session(::Root & root, bool ::Root::_matches(Device & d, genode_usb_session & s) { - Session_policy const policy(s._label, _config.xml()); + try { + Session_policy const policy(s._label, _config.xml()); - unsigned long vendor = policy.attribute_value("vendor_id", 0); - unsigned long product = policy.attribute_value("product_id", 0); - unsigned long bus = policy.attribute_value("bus", 0); - unsigned long dev = policy.attribute_value("dev", 0); - unsigned long cla = policy.attribute_value("class", 0); + unsigned long vendor = policy.attribute_value("vendor_id", 0); + unsigned long product = policy.attribute_value("product_id", 0); + unsigned long bus = policy.attribute_value("bus", 0); + unsigned long dev = policy.attribute_value("dev", 0); + unsigned long cla = policy.attribute_value("class", 0); - if (bus && dev) - return (bus == d.bus) && (dev == d.dev); - if (vendor && product) - return (vendor == d.vendor) && (product == d.product); - if (cla) - return (cla == d.cla) && (d.label() == s._label.last_element()); + if (bus && dev) + return (bus == d.bus) && (dev == d.dev); + if (vendor && product) + return (vendor == d.vendor) && (product == d.product); + if (cla) + return (cla == d.cla) && (d.label() == s._label.last_element()); + } catch(Session_policy::No_policy_defined) {} return false; }