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 <bjorn@mork.no>
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();