From 6cf812a3f769544cbc295239110f22f602abec28 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Bj=C3=B8rn=20Mork?= Date: Wed, 8 Apr 2015 15:31:20 +0200 Subject: [PATCH] avoid parsing InformationBuffer unless status is "success" MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The MBIM specification requires that the InformationBuffer is empty unless the status field is MBIM_STATUS_SUCCESS, except for 4 explicit combinations of status code and command id. Avoid calling the reply handler if the status code is non-zero and the information buffer is empty. Signed-off-by: Bjørn Mork --- mbim-dev.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/mbim-dev.c b/mbim-dev.c index af76683..4474b2d 100644 --- a/mbim-dev.c +++ b/mbim-dev.c @@ -107,7 +107,10 @@ mbim_recv(struct uloop_fd *u, unsigned int events) case MBIM_MESSAGE_TYPE_COMMAND_DONE: if (verbose) printf(" status_code: %04X\n", le32toh(msg->status_code)); - return_code = current_handler->response(msg->buffer, le32toh(msg->buffer_length)); + if (msg->status_code && !msg->buffer_length) + return_code = -le32toh(msg->status_code); + else + return_code = current_handler->response(msg->buffer, le32toh(msg->buffer_length)); if (return_code < 0) no_close = 0; mbim_send_close_msg(); -- 2.11.0