greybus: connection: prevent drivers from specifying core flags
authorJohan Hovold <johan@hovoldconsulting.com>
Wed, 22 Jun 2016 09:42:03 +0000 (11:42 +0200)
committerGreg Kroah-Hartman <gregkh@google.com>
Fri, 24 Jun 2016 23:22:30 +0000 (16:22 -0700)
Prevent drivers from specifying core flags (currently only
GB_CONNECTION_FLAG_CONTROL) when creating connections.

Reviewed-by: Alex Elder <elder@linaro.org>
Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/connection.c
drivers/staging/greybus/connection.h

index 232af8d..7b2d635 100644 (file)
@@ -260,6 +260,9 @@ gb_connection_create_flags(struct gb_bundle *bundle, u16 cport_id,
 {
        struct gb_interface *intf = bundle->intf;
 
+       if (WARN_ON_ONCE(flags & GB_CONNECTION_FLAG_CORE_MASK))
+               flags &= ~GB_CONNECTION_FLAG_CORE_MASK;
+
        return _gb_connection_create(intf->hd, -1, intf, bundle, cport_id,
                                        handler, flags);
 }
@@ -269,12 +272,9 @@ struct gb_connection *
 gb_connection_create_offloaded(struct gb_bundle *bundle, u16 cport_id,
                                        unsigned long flags)
 {
-       struct gb_interface *intf = bundle->intf;
-
        flags |= GB_CONNECTION_FLAG_OFFLOADED;
 
-       return _gb_connection_create(intf->hd, -1, intf, bundle, cport_id,
-                                       NULL, flags);
+       return gb_connection_create_flags(bundle, cport_id, NULL, flags);
 }
 EXPORT_SYMBOL_GPL(gb_connection_create_offloaded);
 
index 7d0988e..0ea8ac8 100644 (file)
@@ -19,6 +19,8 @@
 #define GB_CONNECTION_FLAG_CDSI1       BIT(3)
 #define GB_CONNECTION_FLAG_CONTROL     BIT(4)
 
+#define GB_CONNECTION_FLAG_CORE_MASK   GB_CONNECTION_FLAG_CONTROL
+
 enum gb_connection_state {
        GB_CONNECTION_STATE_DISABLED            = 0,
        GB_CONNECTION_STATE_ENABLED_TX          = 1,