You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
3.3 KiB
68 lines
3.3 KiB
diff -up usbguard-0.7.0/src/Library/SysFSDevice.cpp.kernel-fix usbguard-0.7.0/src/Library/SysFSDevice.cpp |
|
--- usbguard-0.7.0/src/Library/SysFSDevice.cpp.kernel-fix 2017-11-27 15:26:34.895791778 +0100 |
|
+++ usbguard-0.7.0/src/Library/SysFSDevice.cpp 2017-11-27 15:29:20.723171663 +0100 |
|
@@ -130,6 +130,20 @@ namespace usbguard |
|
return fd; |
|
} |
|
|
|
+ bool SysFSDevice::hasAttribute(const std::string& name) const |
|
+ { |
|
+ struct ::stat st; |
|
+ |
|
+ if (::fstatat(_sysfs_dirfd, name.c_str(), &st, AT_SYMLINK_NOFOLLOW) != 0) { |
|
+ if (errno == ENOENT) { |
|
+ return false; |
|
+ } |
|
+ throw ErrnoException("SysFSDevice::hasAttribute", name, errno); |
|
+ } |
|
+ |
|
+ return S_ISREG(st.st_mode); |
|
+ } |
|
+ |
|
std::string SysFSDevice::readAttribute(const std::string& name, bool strip_last_null, bool optional) const |
|
{ |
|
USBGUARD_LOG(Trace) << "name=" << name; |
|
diff -up usbguard-0.7.0/src/Library/SysFSDevice.hpp.kernel-fix usbguard-0.7.0/src/Library/SysFSDevice.hpp |
|
--- usbguard-0.7.0/src/Library/SysFSDevice.hpp.kernel-fix 2017-11-27 15:26:34.896791775 +0100 |
|
+++ usbguard-0.7.0/src/Library/SysFSDevice.hpp 2017-11-27 15:28:10.778433223 +0100 |
|
@@ -42,6 +42,7 @@ namespace usbguard |
|
const std::string& getName() const; |
|
const UEvent& getUEvent() const; |
|
const std::string& getParentPath() const; |
|
+ bool hasAttribute(const std::string& name) const; |
|
std::string readAttribute(const std::string& name, bool strip_last_null = false, bool optional = false) const; |
|
void setAttribute(const std::string& name, const std::string& value); |
|
int openAttribute(const std::string& name) const; |
|
diff -up usbguard-0.7.0/src/Library/UEventDeviceManager.cpp.kernel-fix usbguard-0.7.0/src/Library/UEventDeviceManager.cpp |
|
--- usbguard-0.7.0/src/Library/UEventDeviceManager.cpp.kernel-fix 2017-11-27 15:24:29.034262440 +0100 |
|
+++ usbguard-0.7.0/src/Library/UEventDeviceManager.cpp 2017-11-27 15:26:34.897791771 +0100 |
|
@@ -580,7 +580,12 @@ namespace usbguard { |
|
const std::string devtype = uevent.getAttribute("DEVTYPE"); |
|
const std::string action = uevent.getAttribute("ACTION"); |
|
|
|
- if (subsystem != "usb" || devtype != "usb_device") { |
|
+ /* |
|
+ * We don't care about the event if it's not from the "usb" subsystem. |
|
+ * The device type attribute value is checked later based on the data |
|
+ * read from the sysfs uevent file in the device directory. |
|
+ */ |
|
+ if (subsystem != "usb") { |
|
USBGUARD_LOG(Debug) << "Ignoring non-USB device:" |
|
<< " subsystem=" << subsystem |
|
<< " devtype=" << devtype |
|
@@ -610,8 +615,13 @@ namespace usbguard { |
|
if (sysfs_device.getUEvent().hasAttribute("DEVTYPE")) { |
|
const std::string devtype = sysfs_device.getUEvent().getAttribute("DEVTYPE"); |
|
if (devtype != "usb_device") { |
|
- USBGUARD_LOG(Warning) << sysfs_devpath << ": UEvent DEVTYPE mismatch." |
|
- << " Expected \"usb_device\", got \"" << devtype << "\""; |
|
+ USBGUARD_LOG(Debug) << sysfs_devpath << ": UEvent DEVTYPE != usb_device. Ignoring event."; |
|
+ return; |
|
+ } |
|
+ } |
|
+ else { |
|
+ if (!sysfs_device.hasAttribute("descriptors")) { |
|
+ USBGUARD_LOG(Debug) << sysfs_devpath << ": UEvent doesn't refer to a device with a descriptors file. Ignoring event."; |
|
return; |
|
} |
|
}
|
|
|