From: Bryan O'Donoghue <bryan.odonoghue@linaro.org>
To: Vikash Garodia <quic_vgarodia@quicinc.com>,
Stanimir Varbanov <stanimir.k.varbanov@gmail.com>,
Mauro Carvalho Chehab <mchehab@kernel.org>
Cc: linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH 2/4] media: venus: hfi_parser: avoid OOB access beyond payload word count
Date: Mon, 11 Nov 2024 23:43:58 +0000 [thread overview]
Message-ID: <f53a359a-cffe-4c3a-9f83-9114d666bf04@linaro.org> (raw)
In-Reply-To: <9098b8ef-76e0-f976-2f4e-1c6370caf59e@quicinc.com>
On 11/11/2024 14:36, Vikash Garodia wrote:
>> int hfi_parser(void *buf, int size)
>> {
>> int word_count = size >> 2;
>> uint32_t*my_word = (uint32_t*)buf;
> Make this as below and it should lead to OOB
> uint32_t*my_word = (uint32_t*)buf + 1
>
> Regards,
> Vikash
How does this code make sense ?
while (words_count) {
data = word + 1;
switch (*word) {
case HFI_PROPERTY_PARAM_CODEC_SUPPORTED:
parse_codecs(core, data);
init_codecs(core);
break;
case HFI_PROPERTY_PARAM_MAX_SESSIONS_SUPPORTED:
parse_max_sessions(core, data);
break;
case HFI_PROPERTY_PARAM_CODEC_MASK_SUPPORTED:
parse_codecs_mask(&codecs, &domain, data);
break;
case HFI_PROPERTY_PARAM_UNCOMPRESSED_FORMAT_SUPPORTED:
parse_raw_formats(core, codecs, domain, data);
break;
case HFI_PROPERTY_PARAM_CAPABILITY_SUPPORTED:
parse_caps(core, codecs, domain, data);
break;
case HFI_PROPERTY_PARAM_PROFILE_LEVEL_SUPPORTED:
parse_profile_level(core, codecs, domain, data);
break;
case HFI_PROPERTY_PARAM_BUFFER_ALLOC_MODE_SUPPORTED:
parse_alloc_mode(core, codecs, domain, data);
break;
default:
break;
}
word++;
words_count--;
}
word[] = { 0, 1, 2, 3 };
words_count = 4;
while(words_count);
data = word + 1;
switch(*word) {
case WHATEVER:
do_something(param, data);
}
word++;
words_count--;
}
// iteration 0
data = 1;
*word = 0;
// iteration 1
data = 2;
*word = 1;
????
How can the step size of word be correct ?
Do we ever actually process more than one pair here ?
#include <stdio.h>
#include <stdint.h>
char somebuf[16];
void init(char *buf, int len)
{
int i;
char c = 0;
for (i = 0; i < len; i++)
buf[i] = c++;
}
int hfi_parser(void *buf, int size)
{
int word_count = size >> 2;
uint32_t *my_word = (uint32_t*)buf, *data;
printf("Size %d word_count %d\n", size, word_count);
while (word_count > 1) {
data = my_word + 1;
printf("Myword %d == 0x%08x data=0x%08x\n", word_count,
*my_word, *data);
my_word++;
word_count--;
}
}
int main(int argc, char *argv[])
{
int i;
init(somebuf, sizeof(somebuf));
for (i = 0; i < sizeof(somebuf); i++)
printf("%x = %x\n", i, somebuf[i]);
hfi_parser(somebuf, sizeof(somebuf));
return 0;
}
0 = 0
1 = 1
2 = 2
3 = 3
4 = 4
5 = 5
6 = 6
7 = 7
8 = 8
9 = 9
a = a
b = b
c = c
d = d
e = e
f = f
Size 16 word_count 4
Myword 4 == 0x03020100 data=0x07060504
Myword 3 == 0x07060504 data=0x0b0a0908
Myword 2 == 0x0b0a0908 data=0x0f0e0d0c
---
bod
next prev parent reply other threads:[~2024-11-11 23:44 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-05 8:54 [PATCH 0/4] Venus driver fixes to avoid possible OOB accesses Vikash Garodia
2024-11-05 8:54 ` [PATCH 1/4] media: venus: hfi_parser: add check to avoid out of bound access Vikash Garodia
2024-11-05 10:51 ` Bryan O'Donoghue
2024-11-06 7:25 ` Vikash Garodia
2024-11-06 10:23 ` Bryan O'Donoghue
2024-11-07 8:24 ` Vikash Garodia
2024-11-05 13:55 ` Dmitry Baryshkov
2024-11-07 8:17 ` Vikash Garodia
2024-11-07 10:41 ` Dmitry Baryshkov
2024-11-07 12:07 ` Bryan O'Donoghue
2024-11-07 13:02 ` Vikash Garodia
2024-11-07 13:22 ` Dmitry Baryshkov
2024-11-07 13:35 ` Vikash Garodia
2024-11-07 13:54 ` Dmitry Baryshkov
2024-11-08 11:43 ` Bryan O'Donoghue
2024-11-11 14:02 ` Vikash Garodia
2024-11-11 14:04 ` Vikash Garodia
2024-11-05 8:54 ` [PATCH 2/4] media: venus: hfi_parser: avoid OOB access beyond payload word count Vikash Garodia
2024-11-05 11:15 ` Bryan O'Donoghue
2024-11-11 14:36 ` Vikash Garodia
2024-11-11 23:43 ` Bryan O'Donoghue [this message]
2024-11-12 8:05 ` Vikash Garodia
2024-11-12 11:17 ` Bryan O'Donoghue
2024-11-12 12:58 ` Vikash Garodia
2024-11-12 13:00 ` Bryan O'Donoghue
2024-11-05 8:54 ` [PATCH 3/4] media: venus: hfi: add check to handle incorrect queue size Vikash Garodia
2024-11-05 11:23 ` Bryan O'Donoghue
2024-11-05 8:54 ` [PATCH 4/4] media: venus: hfi: add a check to handle OOB in sfr region Vikash Garodia
2024-11-05 11:27 ` Bryan O'Donoghue
2024-11-05 13:58 ` Dmitry Baryshkov
2024-11-06 7:21 ` Vikash Garodia
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=f53a359a-cffe-4c3a-9f83-9114d666bf04@linaro.org \
--to=bryan.odonoghue@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=mchehab@kernel.org \
--cc=quic_vgarodia@quicinc.com \
--cc=stable@vger.kernel.org \
--cc=stanimir.k.varbanov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®