diff mbox series

[FFmpeg-devel,1/3] avformat/mov: Check sample_sizes before using it

Message ID 20240726210832.288597-1-michael@niedermayer.cc
State New
Headers show
Series [FFmpeg-devel,1/3] avformat/mov: Check sample_sizes before using it | expand

Checks

Context Check Description
andriy/make_x86 success Make finished
andriy/make_fate_x86 success Make fate finished

Commit Message

Michael Niedermayer July 26, 2024, 9:08 p.m. UTC
Fixes: NULL pointer dereference
Fixes: 70569/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5247918563459072

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
---
 libavformat/mov.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

James Almer July 26, 2024, 10:11 p.m. UTC | #1
On 7/26/2024 6:08 PM, Michael Niedermayer wrote:
> Fixes: NULL pointer dereference
> Fixes: 70569/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5247918563459072
> 
> Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
> ---
>   libavformat/mov.c | 4 ++++
>   1 file changed, 4 insertions(+)
> 
> diff --git a/libavformat/mov.c b/libavformat/mov.c
> index b74e43e2140..63db7d59a58 100644
> --- a/libavformat/mov.c
> +++ b/libavformat/mov.c
> @@ -10060,6 +10060,10 @@ static int mov_read_header(AVFormatContext *s)
>   
>               st = item->st;
>               sc = st->priv_data;
> +
> +            if (!sc->sample_sizes || !sc->sample_count)
> +                return AVERROR_INVALIDDATA;

Deja vu. Didn't you send something like this before?

Also, can i get the sample? As with other issues, we shouldn't reach 
this point if these were not allocated.

> +
>               st->codecpar->width  = item->width;
>               st->codecpar->height = item->height;
>
James Almer July 26, 2024, 10:24 p.m. UTC | #2
On 7/26/2024 7:11 PM, James Almer wrote:
> On 7/26/2024 6:08 PM, Michael Niedermayer wrote:
>> Fixes: NULL pointer dereference
>> Fixes: 
>> 70569/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5247918563459072
>>
>> Found-by: continuous fuzzing process 
>> https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
>> Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
>> ---
>>   libavformat/mov.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/libavformat/mov.c b/libavformat/mov.c
>> index b74e43e2140..63db7d59a58 100644
>> --- a/libavformat/mov.c
>> +++ b/libavformat/mov.c
>> @@ -10060,6 +10060,10 @@ static int mov_read_header(AVFormatContext *s)
>>               st = item->st;
>>               sc = st->priv_data;
>> +
>> +            if (!sc->sample_sizes || !sc->sample_count)
>> +                return AVERROR_INVALIDDATA;
> 
> Deja vu. Didn't you send something like this before?
> 
> Also, can i get the sample? As with other issues, we shouldn't reach 

No, it was me: 
https://ffmpeg.org//pipermail/ffmpeg-devel/2024-June/330391.html

Still, i want to check the sample because i'm not sure how this code is 
reached like this.

> this point if these were not allocated.
> 
>> +
>>               st->codecpar->width  = item->width;
>>               st->codecpar->height = item->height;
Michael Niedermayer July 27, 2024, 10:06 p.m. UTC | #3
Hi

On Fri, Jul 26, 2024 at 07:24:38PM -0300, James Almer wrote:
[...]
> > Deja vu. Didn't you send something like this before?
> > 
> > Also, can i get the sample? As with other issues, we shouldn't reach
> 
> No, it was me:
> https://ffmpeg.org//pipermail/ffmpeg-devel/2024-June/330391.html

Iam surprised we dont have more collisions
either way i will drop this on my side


> 
> Still, i want to check the sample because i'm not sure how this code is
> reached like this.

sure, sent privatly

thx

[...]
James Almer July 28, 2024, 12:29 a.m. UTC | #4
On 7/27/2024 7:06 PM, Michael Niedermayer wrote:
> Hi
> 
> On Fri, Jul 26, 2024 at 07:24:38PM -0300, James Almer wrote:
> [...]
>>> Deja vu. Didn't you send something like this before?
>>>
>>> Also, can i get the sample? As with other issues, we shouldn't reach
>>
>> No, it was me:
>> https://ffmpeg.org//pipermail/ffmpeg-devel/2024-June/330391.html
> 
> Iam surprised we dont have more collisions

There's a stsz atom after the iinf atom that tries to replace 
sc->sample_sizes. It's inside the same meta box structure as the items 
instead of inside an stsd structure, which is not spec compliant, so 
ideally we should stop parsing it if that's the case.

I'll push my fix for now, but if such an stsz atom ends up allocating an 
array with a single entry, it will be accepted, so not exactly ideal.

> either way i will drop this on my side
> 
> 
>>
>> Still, i want to check the sample because i'm not sure how this code is
>> reached like this.
> 
> sure, sent privatly
> 
> thx
> 
> [...]
> 
> 
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel@ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
> 
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff mbox series

Patch

diff --git a/libavformat/mov.c b/libavformat/mov.c
index b74e43e2140..63db7d59a58 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -10060,6 +10060,10 @@  static int mov_read_header(AVFormatContext *s)
 
             st = item->st;
             sc = st->priv_data;
+
+            if (!sc->sample_sizes || !sc->sample_count)
+                return AVERROR_INVALIDDATA;
+
             st->codecpar->width  = item->width;
             st->codecpar->height = item->height;