[FFmpeg-devel] [PATCH 2/2] avcodec/binkaudio: Check sample_rate to avoid integer overflow

Michael Niedermayer michael at niedermayer.cc
Sat May 16 19:59:36 EEST 2020


On Mon, Apr 20, 2020 at 01:03:34AM +0200, Michael Niedermayer wrote:
> On Sun, Apr 19, 2020 at 05:52:01PM +0200, Lynne wrote:
> > Apr 19, 2020, 16:05 by michael at niedermayer.cc:
> > 
> > > Fixes: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int'
> > > Fixes: 19950/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_BINKAUDIO_DCT_fuzzer-5765514337189888
> > >
> > > Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
> > > Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> > > ---
> > >  libavcodec/binkaudio.c | 3 +++
> > >  1 file changed, 3 insertions(+)
> > >
> > > diff --git a/libavcodec/binkaudio.c b/libavcodec/binkaudio.c
> > > index 64a08b8608..2df3dc645a 100644
> > > --- a/libavcodec/binkaudio.c
> > > +++ b/libavcodec/binkaudio.c
> > > @@ -106,6 +106,9 @@ static av_cold int decode_init(AVCodecContext *avctx)
> > >  avctx->sample_fmt = AV_SAMPLE_FMT_FLTP;
> > >  }
> > >  
> > > +    if (sample_rate >= INT_MAX)
> > > +        return AVERROR_INVALIDDATA;
> > > +
> > >  s->frame_len     = 1 << frame_len_bits;
> > >  s->overlap_len   = s->frame_len / 16;
> > >  s->block_size    = (s->frame_len - s->overlap_len) * s->channels;
> > >
> > 
> > Did you even bother to look at the checks you added in this decoder previously?
> > Specifically 11 lines above?
> > 
> > > if (sample_rate > INT_MAX / avctx->channels)
> > >     return AVERROR_INVALIDDATA;
> > > sample_rate  *= avctx->channels;
> > 
> > To start with the sample rate of the avctx is already checked in utils.c, and you
> > still haven't cleaned up any decoders from the checks made unnecessary by you,
> 
> The new check is needed, it overflows without:
> libavcodec/binkaudio.c:116:37: runtime error: signed integer overflow: 2147483647 + 1 cannot be represented in type 'int'
> 
> The other check is also needed, if i remove it it still overflows
> libavcodec/binkaudio.c:100:22: runtime error: signed integer overflow: 1092624416 * 2 cannot be represented in type 'int'
> 
> 
> > so am reminding you again to clean up the codebase by getting rid of them.
> > At least you might get to clean the codebase for once rather than adding crap like this.
> > 
> > So there's only the branch which I quoted that's needed to be fixed, and since there's a
> > check there already, there's no reason to have a check here as well.
> 
> I posted exactly this same patch in january, there was a objection, and i asked
> what was preferred instead, and pinged it multiple times over the following
> months, in february and april:
> 
> 189192 N F 0114 15:36 To FFmpeg devel (1,6K) [FFmpeg-devel] [PATCH] avcodec/binkaudio: Check sample_rate to avoid integer overflow
> 189193 r   0114 16:04 Paul B Mahol    (2,1K) └─>
> 189194  sF 0201 16:14 To FFmpeg devel (1,7K)   └─>
> 189195 r   0201 16:17 Paul B Mahol    (1,3K)     └─>
> 189196 rsF 0201 23:48 To FFmpeg devel (2,6K)       └─>
> 189197 rs  0209 21:28 Michael Niederm (2,9K)         └─>
> 189198 rsF 0404 23:38 To FFmpeg devel (2,8K)           └─>
> 189199  sF 0407 23:17 To FFmpeg devel (3,1K)             └─>
> 
> but i failed to get a reply, so i tried reposting it
> 
> So, if the patch is still not liked, can you explain what do you
> prefer ?
> 
> i can put the sample_rate >= INT_MAX check in generic code but it
> is specific to this decoder it wont help anything else
> 
> i can put a more aggressive check like sample_rate * channels > MAX_CHANNEL_SAMPLES
> in generic code, that will of course block some otherwise supported cases
> 
> or we can have checks just for what is not supported
> 
> or we can extend the code to support a wider range where it is possible
> 

> Just say what you prefer, i dont mind at all what it is, i just want the
> issue fixed its already so many months open ...

ping
id like to fix ossfuzz issue 19950

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

What does censorship reveal? It reveals fear. -- Julian Assange
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20200516/22447eec/attachment.sig>


More information about the ffmpeg-devel mailing list