greybus: enforce non-zero operation type requirement
authorAlex Elder <elder@linaro.org>
Tue, 2 Dec 2014 14:30:31 +0000 (08:30 -0600)
committerGreg Kroah-Hartman <greg@kroah.com>
Tue, 2 Dec 2014 22:35:33 +0000 (14:35 -0800)
The operation type 0x00 is reserved as an explicitly invalid
operation type in all protocols.  Enforce this.

Add a check for callers who erroneously have the RESPONSE message
type flag set in the operation type passed in gb_operation_create().

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: Greg Kroah-Hartman <greg@kroah.com>
drivers/staging/greybus/operation.c

index c4898f6..53fffb1 100644 (file)
@@ -455,10 +455,23 @@ err_cache:
        return NULL;
 }
 
+/*
+ * Create a new operation associated with the given connection.  The
+ * request and response sizes provided are the number of bytes
+ * required to hold the request/response payload only.  Both of
+ * these are allowed to be 0.  Note that 0x00 is reserved as an
+ * invalid operation type for all protocols, and this is enforced
+ * here.
+ */
 struct gb_operation *gb_operation_create(struct gb_connection *connection,
                                        u8 type, size_t request_size,
                                        size_t response_size)
 {
+       if (WARN_ON_ONCE(!type))
+               return NULL;
+       if (WARN_ON_ONCE(type & GB_OPERATION_TYPE_RESPONSE))
+               type &= ~GB_OPERATION_TYPE_RESPONSE;
+
        return gb_operation_create_common(connection, true, type,
                                        request_size, response_size);
 }