Commit aa3a4d12 authored by Alex Elder's avatar Alex Elder Committed by Greg Kroah-Hartman

greybus: enforce receive buffer size

When an operation is created its receive buffer size is specified.
In all current cases, the size supplied for the receive buffer is
exactly the size that should be returned.  In other words, if
any fewer than that many bytes arrived in a response, it would be
an error.

So tighten the check on the number of bytes arriving for a response
message, ensuring that the number of bytes received is *exactly the
same* as the number of bytes available (rather than just less than).
We'll expand our interpretation of of -EMSGSIZE to mean "wrong
message size" rather than just "message too long."

If we someday encounter an actual case where we want to be able to
successfully receive something less than the full receive buffer we
can adjust the code to handle that (and give it a way to tell the
receiver how many bytes are present).
Signed-off-by: default avatarAlex Elder <elder@linaro.org>
Signed-off-by: default avatarGreg Kroah-Hartman <greg@kroah.com>
parent 1a365154
...@@ -599,12 +599,13 @@ static void gb_connection_recv_response(struct gb_connection *connection, ...@@ -599,12 +599,13 @@ static void gb_connection_recv_response(struct gb_connection *connection,
gb_pending_operation_remove(operation); gb_pending_operation_remove(operation);
message = operation->response; message = operation->response;
if (size <= message->size) { if (size == message->size) {
/* Transfer the operation result from the response header */ /* Transfer the operation result from the response header */
header = message->header; header = message->header;
result = gb_operation_status_map(header->result); result = gb_operation_status_map(header->result);
} else { } else {
gb_connection_err(connection, "recv buffer too small"); gb_connection_err(connection, "bad message size (%zu != %zu)",
size, message->size);
result = -EMSGSIZE; result = -EMSGSIZE;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment