summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorManoj Prabhu B <bmanoj@codeaurora.org>2018-06-27 16:05:57 +0530
committerGerrit - the friendly Code Review server <code-review@localhost>2018-07-04 23:11:14 -0700
commit0fe549f6b66cd6329fa4e7c0ca67a6eb6bae7336 (patch)
tree62f4f2114f63754c3fa24b7451a1d56612377790 /drivers
parent38a0bccad56942e30c91af116767717ce1060607 (diff)
diag: Update mask buffer after reallocation
Currently, reallocated mask update buffers are not updated if the received mask range is more than the mask update buffer length. Update the reallocated buffer address before writing the mask to peripherals. CRs-Fixed: 2266693 Change-Id: I6b506ce68e17b7da61926b0f9543157812a8c555 Signed-off-by: Manoj Prabhu B <bmanoj@codeaurora.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/char/diag/diag_masks.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/char/diag/diag_masks.c b/drivers/char/diag/diag_masks.c
index d76ae0b14a6e..ad6805553998 100644
--- a/drivers/char/diag/diag_masks.c
+++ b/drivers/char/diag/diag_masks.c
@@ -185,10 +185,11 @@ static void diag_send_log_mask_update(uint8_t peripheral, int equip_id)
}
mask_info->update_buf = temp;
mask_info->update_buf_len = header_len + mask_size;
+ buf = temp;
}
memcpy(buf, &ctrl_pkt, header_len);
- if (mask_size > 0)
+ if (mask_size > 0 && mask_size <= LOG_MASK_SIZE)
memcpy(buf + header_len, mask->ptr, mask_size);
mutex_unlock(&mask->lock);
@@ -286,9 +287,16 @@ static void diag_send_event_mask_update(uint8_t peripheral)
} else {
mask_info->update_buf = temp;
mask_info->update_buf_len = temp_len;
+ buf = temp;
}
}
- memcpy(buf + sizeof(header), mask_info->ptr, num_bytes);
+ if (num_bytes > 0 && num_bytes < mask_info->mask_len)
+ memcpy(buf + sizeof(header), mask_info->ptr, num_bytes);
+ else {
+ pr_err("diag: num_bytes(%d) is not satisfying length condition\n",
+ num_bytes);
+ goto err;
+ }
write_len += num_bytes;
break;
default:
@@ -404,6 +412,7 @@ static void diag_send_msg_mask_update(uint8_t peripheral, int first, int last)
} else {
mask_info->update_buf = temp;
mask_info->update_buf_len = temp_len;
+ buf = temp;
pr_debug("diag: In %s, successfully reallocated msg_mask update buffer to len: %d\n",
__func__, mask_info->update_buf_len);
}