aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mm-filter.c11
-rw-r--r--src/mm-filter.h18
2 files changed, 21 insertions, 8 deletions
diff --git a/src/mm-filter.c b/src/mm-filter.c
index ee82c1dc..cdf60c5f 100644
--- a/src/mm-filter.c
+++ b/src/mm-filter.c
@@ -45,6 +45,16 @@ mm_filter_port (MMFilter *self,
subsystem = mm_kernel_device_get_subsystem (port);
name = mm_kernel_device_get_name (port);
+ /* If the device is explicitly whitelisted, we process every port. Also
+ * allow specifying this flag per-port instead of for the full device, e.g.
+ * for platform tty ports where there's only one port anyway. */
+ if ((self->priv->enabled_rules & MM_FILTER_RULE_EXPLICIT_WHITELIST) &&
+ (mm_kernel_device_get_global_property_as_boolean (port, "ID_MM_DEVICE_PROCESS") ||
+ mm_kernel_device_get_property_as_boolean (port, "ID_MM_DEVICE_PROCESS"))) {
+ mm_dbg ("[filter] (%s/%s) port allowed: device is whitelisted", subsystem, name);
+ return TRUE;
+ }
+
/* If this is a virtual device, don't allow it */
if ((self->priv->enabled_rules & MM_FILTER_RULE_VIRTUAL) &&
(!mm_kernel_device_get_physdev_sysfs_path (port))) {
@@ -156,6 +166,7 @@ mm_filter_new (MMFilterRule enabled_rules)
#define RULE_ENABLED_STR(flag) ((self->priv->enabled_rules & flag) ? "yes" : "no")
mm_dbg ("[filter] created");
+ mm_dbg ("[filter] explicit whitelist: %s", RULE_ENABLED_STR (MM_FILTER_RULE_EXPLICIT_WHITELIST));
mm_dbg ("[filter] virtual devices forbidden: %s", RULE_ENABLED_STR (MM_FILTER_RULE_VIRTUAL));
mm_dbg ("[filter] net devices allowed: %s", RULE_ENABLED_STR (MM_FILTER_RULE_NET));
mm_dbg ("[filter] cdc-wdm devices allowed: %s", RULE_ENABLED_STR (MM_FILTER_RULE_CDC_WDM));
diff --git a/src/mm-filter.h b/src/mm-filter.h
index bde394c6..0de3fa68 100644
--- a/src/mm-filter.h
+++ b/src/mm-filter.h
@@ -45,17 +45,19 @@ GType mm_filter_get_type (void);
typedef enum { /*< underscore_name=mm_filter_rule >*/
MM_FILTER_RULE_NONE = 0,
- MM_FILTER_RULE_VIRTUAL = 1 << 0,
- MM_FILTER_RULE_NET = 1 << 1,
- MM_FILTER_RULE_CDC_WDM = 1 << 2,
- MM_FILTER_RULE_TTY = 1 << 3,
- MM_FILTER_RULE_TTY_BLACKLIST = 1 << 4,
- MM_FILTER_RULE_TTY_MANUAL_SCAN_ONLY = 1 << 5,
- MM_FILTER_RULE_TTY_PLATFORM_DRIVER = 1 << 6,
+ MM_FILTER_RULE_EXPLICIT_WHITELIST = 1 << 0,
+ MM_FILTER_RULE_VIRTUAL = 1 << 1,
+ MM_FILTER_RULE_NET = 1 << 2,
+ MM_FILTER_RULE_CDC_WDM = 1 << 3,
+ MM_FILTER_RULE_TTY = 1 << 4,
+ MM_FILTER_RULE_TTY_BLACKLIST = 1 << 5,
+ MM_FILTER_RULE_TTY_MANUAL_SCAN_ONLY = 1 << 6,
+ MM_FILTER_RULE_TTY_PLATFORM_DRIVER = 1 << 7,
} MMFilterRule;
#define MM_FILTER_RULE_ALL \
- (MM_FILTER_RULE_VIRTUAL | \
+ (MM_FILTER_RULE_EXPLICIT_WHITELIST | \
+ MM_FILTER_RULE_VIRTUAL | \
MM_FILTER_RULE_NET | \
MM_FILTER_RULE_CDC_WDM | \
MM_FILTER_RULE_TTY | \