lib: qmi_encdec: Ignore unknown optional TLV

Currently, Kernel QMI encode/decode library returns an error upon
receiving an unknown optional TLV. Any optional TLV in a received
QMI message can be ignored and the rest of the message can be decoded.

Add support to ignore the unknown optional TLV and decode rest of
the message.

Change-Id: I8bb509879422c9193c00ed4ef847b0da1d642e33
Signed-off-by: Atish Kumar Patra <apatra@codeaurora.org>
This commit is contained in:
Atish Kumar Patra 2015-06-08 11:08:22 -06:00
parent ca30ac4203
commit d1d4c9c5ff
1 changed files with 7 additions and 2 deletions

View File

@ -1,4 +1,4 @@
/* Copyright (c) 2012-2014, The Linux Foundation. All rights reserved.
/* Copyright (c) 2012-2015, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@ -25,6 +25,7 @@
#define TLV_LEN_SIZE sizeof(uint16_t)
#define TLV_TYPE_SIZE sizeof(uint8_t)
#define U8_MAX 255
#define OPTIONAL_TLV_TYPE_START 0x10
#ifdef CONFIG_QMI_ENCDEC_DEBUG
@ -793,9 +794,13 @@ static int _qmi_kernel_decode(struct elem_info *ei_array,
buf_src += (TLV_TYPE_SIZE + TLV_LEN_SIZE);
decoded_bytes += (TLV_TYPE_SIZE + TLV_LEN_SIZE);
temp_ei = find_ei(ei_array, tlv_type);
if (!temp_ei) {
if (!temp_ei && (tlv_type < OPTIONAL_TLV_TYPE_START)) {
pr_err("%s: Inval element info\n", __func__);
return -EINVAL;
} else if (!temp_ei) {
UPDATE_DECODE_VARIABLES(buf_src,
decoded_bytes, tlv_len);
continue;
}
} else {
/*