FROMGIT: media: venus: hfi: add a check to handle OOB in sfr region
sfr->buf_size is in shared memory and can be modified by malicious user.
OOB write is possible when the size is made higher than actual sfr data
buffer. Cap the size to allocated size for such cases.
Cc: stable@vger.kernel.org
Fixes: d96d3f30c0 ("[media] media: venus: hfi: add Venus HFI files")
Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
CRs-Fixed: 3947576
Change-Id: I483a5feff3dfa35dae8f444e57601d2d1d85246f
Git-commit: f4b211714bcc70effa60c34d9fa613d182e3ef1e
Git-repo: https://gitlab.freedesktop.org/linux-media/media-committers.git
Signed-off-by: Vikash Garodia <quic_vgarodia@quicinc.com>
(cherry picked from commit 56820042f93c80d21cd1442b6a6f4d8fa496598c)
This commit is contained in:
committed by
Vivekananda T
parent
4a29de385e
commit
901a26c51e
@@ -970,18 +970,26 @@ static void venus_sfr_print(struct venus_hfi_device *hdev)
|
||||
{
|
||||
struct device *dev = hdev->core->dev;
|
||||
struct hfi_sfr *sfr = hdev->sfr.kva;
|
||||
u32 size;
|
||||
void *p;
|
||||
|
||||
if (!sfr)
|
||||
return;
|
||||
|
||||
p = memchr(sfr->data, '\0', sfr->buf_size);
|
||||
size = sfr->buf_size;
|
||||
if (!size)
|
||||
return;
|
||||
|
||||
if (size > ALIGNED_SFR_SIZE)
|
||||
size = ALIGNED_SFR_SIZE;
|
||||
|
||||
p = memchr(sfr->data, '\0', size);
|
||||
/*
|
||||
* SFR isn't guaranteed to be NULL terminated since SYS_ERROR indicates
|
||||
* that Venus is in the process of crashing.
|
||||
*/
|
||||
if (!p)
|
||||
sfr->data[sfr->buf_size - 1] = '\0';
|
||||
sfr->data[size - 1] = '\0';
|
||||
|
||||
dev_err_ratelimited(dev, "SFR message from FW: %s\n", sfr->data);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user