From: Alex Elder Date: Tue, 2 Dec 2014 14:30:31 +0000 (-0600) Subject: greybus: enforce non-zero operation type requirement X-Git-Tag: v4.9-rc1~119^2~378^2~21^2~1799 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=55f66a88dbd718c2133ac759eee4ff51f516bf45;p=karo-tx-linux.git greybus: enforce non-zero operation type requirement 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 Signed-off-by: Greg Kroah-Hartman --- diff --git a/drivers/staging/greybus/operation.c b/drivers/staging/greybus/operation.c index c4898f61b1f7..53fffb190dbf 100644 --- a/drivers/staging/greybus/operation.c +++ b/drivers/staging/greybus/operation.c @@ -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); }