<html>
    <head>
      <base href="https://bugzilla.libav.org/" />
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - avconv crashes in libavcodec/eamad.c"
   href="https://bugzilla.libav.org/show_bug.cgi?id=1147">1147</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>avconv crashes in libavcodec/eamad.c
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>Libav
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>git HEAD
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>X86
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>Linux
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>---
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>libavcodec
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>bugzilla@libav.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>mgcho.minic@gmail.com
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Created <span class=""><a href="attachment.cgi?id=732" name="attach_732" title="Poc to trigger bug">attachment 732</a> <a href="attachment.cgi?id=732&action=edit" title="Poc to trigger bug">[details]</a></span>
Poc to trigger bug

Triggered by "./avconv -i $POC"

Heap out-of-bounds read in libavcodec/eamad.c.


The GDB debugging information is as follows:

(gdb) r -v 9 -loglevel 99 -i ~/Downloads/comp_crash 
Starting program:
/home/seclab/fuzzing-experiment/fuzzing/program/x86/libav-master/clang5/bin/avconv
-v 9 -loglevel 99 -i ~/Downloads/comp_crash
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
avconv version v13_dev0-1642-gf8abf7d, Copyright (c) 2000-2018 the Libav
developers
  built on Mar 19 2019 11:21:48 with clang version 5.0.0-3~16.04.1
(tags/RELEASE_500/final)
  configuration:
--prefix=/home/seclab/fuzzing-experiment/fuzzing/program/x86/libav-master/clang5
--disable-yasm --enable-cross-compile --cc=clang --target-os=linux --arch=i386
--host-cflags=-m32 --host-ldflags=-m32 --extra-cflags=-m32 --extra-ldflags=-m32
  libavutil     56.  8. 0 / 56.  8. 0
  libavcodec    58. 12. 1 / 58. 12. 1
  libavformat   58.  2. 0 / 58.  2. 0
  libavdevice   57.  0. 2 / 57.  0. 2
  libavfilter    7.  1. 0 /  7.  1. 0
  libavresample  4.  0. 0 /  4.  0. 0
  libswscale     5.  0. 1 /  5.  0. 1
Splitting the commandline.
Reading option '-v' ... matched as option 'v' (set libav* logging level) with
argument '9'.
Reading option '-loglevel' ... matched as option 'loglevel' (set libav* logging
level) with argument '99'.
Reading option '-i' ... matched as input file with argument
'/home/seclab/Downloads/comp_crash'.
Finished splitting the commandline.
Parsing a group of options: global .
Applying option v (set libav* logging level) with argument 9.
Successfully parsed a group of options.
Parsing a group of options: input file /home/seclab/Downloads/comp_crash.
Successfully parsed a group of options.
Opening an input file: /home/seclab/Downloads/comp_crash.
score: 0, dvhs_score: 0, fec_score: 0 
nsv_probe(), buf_size 2048
[ea @ 0x91535c0] Probed with size=2048 and score=100
Ignoring attempt to set invalid timebase for st:0
IN delayed:0 pts:-9223372036854775808, dts:-9223372036854775808 cur_dts:0 st:0
pc:(nil)
OUTdelayed:0/0 pts:-9223372036854775808, dts:-9223372036854775808 cur_dts:0
[eamad @ 0x9154360] Input data too small
IN delayed:0 pts:-9223372036854775808, dts:-9223372036854775808 cur_dts:0 st:0
pc:(nil)
OUTdelayed:0/0 pts:-9223372036854775808, dts:-9223372036854775808 cur_dts:0
[eamad @ 0x9154360] Missing reference frame.
[eamad @ 0x9154360] ac-tex damaged at 0 0
    Last message repeated 5 times
[eamad @ 0x9154360] ac-tex damaged at 1 0
    Last message repeated 1 times
[eamad @ 0x9154360] ac-tex damaged at 2 0
    Last message repeated 5 times
[eamad @ 0x9154360] ac-tex damaged at 3 0
    Last message repeated 5 times
[eamad @ 0x9154360] ac-tex damaged at 4 0
    Last message repeated 3 times
[eamad @ 0x9154360] ac-tex damaged at 6 0
    Last message repeated 3 times
Program received signal SIGSEGV, Segmentation fault.
comp (dst_stride=576, src_stride=576, add=<optimized out>, dst=<optimized out>,
src=<optimized out>) at libavcodec/eamad.c:90
90    in libavcodec/eamad.c
(gdb) bt
#0  comp (dst_stride=576, src_stride=576, add=<optimized out>, dst=<optimized
out>, src=<optimized out>) at libavcodec/eamad.c:90
#1  comp_block (t=<optimized out>, mb_x=<optimized out>, mb_y=<optimized out>,
add=-4, frame=<optimized out>, j=<optimized out>, mv_x=<optimized out>,
mv_y=<optimized out>) at libavcodec/eamad.c:104
#2  decode_mb (s=<optimized out>, frame=<optimized out>, inter=<optimized out>)
at libavcodec/eamad.c:217
#3  decode_frame (avctx=<optimized out>, data=<optimized out>,
got_frame=<optimized out>, avpkt=<optimized out>) at libavcodec/eamad.c:302
#4  0x081cb0af in decode_simple_internal (avctx=<optimized out>,
frame=<optimized out>) at libavcodec/decode.c:336
#5  decode_simple_receive_frame (avctx=<optimized out>, frame=<optimized out>)
at libavcodec/decode.c:387
#6  decode_receive_frame_internal (avctx=0x9154360, frame=<optimized out>) at
libavcodec/decode.c:405
#7  0x081caf58 in avcodec_send_packet (avctx=0x9154360, avpkt=<optimized out>)
at libavcodec/decode.c:466
#8  0x081485e3 in try_decode_frame (s=<optimized out>, st=<optimized out>,
avpkt=<optimized out>, options=<optimized out>) at libavformat/utils.c:1950
#9  0x0814703a in avformat_find_stream_info (ic=<optimized out>,
options=<optimized out>) at libavformat/utils.c:2459
#10 0x0804ba0c in open_input_file (o=<optimized out>, filename=<optimized out>)
at avtools/avconv_opt.c:821
#11 0x0804b480 in open_files (l=<optimized out>, inout=<optimized out>,
open_file=<optimized out>) at avtools/avconv_opt.c:2467
#12 0x0804b286 in avconv_parse_options (argc=<optimized out>, argv=<optimized
out>) at avtools/avconv_opt.c:2504
#13 0x08058b4f in main (argc=<optimized out>, argv=<optimized out>) at
avtools/avconv.c:2953
(gdb) disass $pc-32,$pc+32
Dump of assembler code from 0x81f3d20 to 0x81f3d60:
   0x081f3d20 <decode_frame+5280>:    stc    
   0x081f3d21 <decode_frame+5281>:    mov    -0xc(%ebx,%ebp,4),%edi
   0x081f3d25 <decode_frame+5285>:    mov    $0x8,%ebx
   0x081f3d2a <decode_frame+5290>:    add    0x38(%esp),%edi
   0x081f3d2e <decode_frame+5294>:    lea    0x7(%edi,%ecx,1),%edi
   0x081f3d32 <decode_frame+5298>:    data16 data16 data16 data16 nopw
%cs:0x0(%eax,%eax,1)
=> 0x081f3d40 <decode_frame+5312>:    movzbl -0x7(%edi),%ebp
   0x081f3d44 <decode_frame+5316>:    add    %eax,%ebp
   0x081f3d46 <decode_frame+5318>:    mov    %ebp,%ecx
   0x081f3d48 <decode_frame+5320>:    neg    %ecx
   0x081f3d4a <decode_frame+5322>:    sar    $0x1f,%ecx
   0x081f3d4d <decode_frame+5325>:    cmp    $0xff,%ebp
   0x081f3d53 <decode_frame+5331>:    cmovbe %ebp,%ecx
   0x081f3d56 <decode_frame+5334>:    mov    %cl,-0x7(%edx)
   0x081f3d59 <decode_frame+5337>:    movzbl -0x6(%edi),%ebp
   0x081f3d5d <decode_frame+5341>:    add    %eax,%ebp
   0x081f3d5f <decode_frame+5343>:    mov    %ebp,%ecx
End of assembler dump.
(gdb) info all-registers
eax            0xfffffffc    -4
ecx            0xfffffe00    -512
edx            0xf4c10067    -188678041
ebx            0x8    8
esp            0xffffc8b0    0xffffc8b0
ebp            0x5    0x5
esi            0x240    576
edi            0xf4a4fe23    -190513629
eip            0x81f3d40    0x81f3d40 <decode_frame+5312>
eflags         0x210283    [ CF SF IF RF ID ]
cs             0x23    35
ss             0x2b    43
ds             0x2b    43
es             0x2b    43
fs             0x0    0
gs             0x63    99
st0            9.957466722920461539027801867174361e-06    (raw
0x3feea70efe71ee611800)
st1            -0.16666658368778738963378316384478239    (raw
0xbffcaaaaa51919b23800)
st2            -5.2368704321306240943608958015795252e-09    (raw
0xbfe3b3efffdd0585e000)
st3            0.49999999985513093880840074234583881    (raw
0x3ffdfffffffec16df800)
st4            1.7384289452803415575633558961773407e-09    (raw
0x3fe1eeed87e67d4a0800)
st5            0    (raw 0x00000000000000000000)
st6            9.9999999999999994515327145420957165e-21    (raw
0x3fbcbce5086492111800)
st7            1    (raw 0x3fff8000000000000000)
fctrl          0x37f    895
fstat          0x20    32
ftag           0xffff    65535
fiseg          0x0    0
fioff          0xf7f89a27    -134702553
foseg          0x0    0
fooff          0x0    0
fop            0x0    0
mxcsr          0x1fa0    [ PE IM DM ZM OM UM PM ]
bndcfgu        {raw = 0x0, config = {base = 0x0, reserved = 0x0, preserved =
0x0, enabled = 0x0}}    {raw = 0x0, config = {base = 0, reserved = 0, preserved
= 0, enabled = 0}}
bndstatus      {raw = 0x0, status = {bde = 0x0, error = 0x0}}    {raw = 0x0,
status = {bde = 0, error = 0}}
k0             0x0    0
k1             0x0    0
k2             0x0    0
k3             0x0    0
k4             0x0    0
k5             0x0    0
k6             0x0    0
k7             0x0    0
zmm0           {v16_float = {0x0 <repeats 16 times>}, v8_double = {0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v64_int8 = {0x0 <repeats 64 times>}, v32_int16 =
{0x0 <repeats 32 times>}, v16_int32 = {
    0x0 <repeats 16 times>}, v8_int64 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int128 = {0x00000000000000000000000000000000,
0x00000000000000000000000000000000, 0x00000000000000000000000000000000, 
    0x00000000000000000000000000000000}}
zmm1           {v16_float = {0x0, 0x0, 0x0, 0x0, 0x0 <repeats 12 times>},
v8_double = {0x8000000000000000, 0x8000000000000000, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v64_int8 = {0x30, 0xa, 0x0, 0x20, 0x72, 
    0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x20, 0x66, 0x72, 0x0
<repeats 48 times>}, v32_int16 = {0xa30, 0x2000, 0x6572, 0x6566, 0x6572,
0x636e, 0x2065, 0x7266, 0x0 <repeats 24 times>}, 
  v16_int32 = {0x20000a30, 0x65666572, 0x636e6572, 0x72662065, 0x0 <repeats 12
times>}, v8_int64 = {0x6566657220000a30, 0x72662065636e6572, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v4_int128 = {
    0x72662065636e65726566657220000a30, 0x00000000000000000000000000000000,
0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
zmm2           {v16_float = {0x0, 0x0, 0x0, 0x0, 0x0 <repeats 12 times>},
v8_double = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v64_int8 = {0x30, 0xa,
0x0, 0x2e, 0xa, 0x0, 0x39, 0x32, 0x32, 0x33, 0x33, 
    0x37, 0x32, 0x30, 0x33, 0x36, 0x0 <repeats 48 times>}, v32_int16 = {0xa30,
0x2e00, 0xa, 0x3239, 0x3332, 0x3733, 0x3032, 0x3633, 0x0 <repeats 24 times>},
v16_int32 = {0x2e000a30, 0x3239000a, 
    0x37333332, 0x36333032, 0x0 <repeats 12 times>}, v8_int64 =
{0x3239000a2e000a30, 0x3633303237333332, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v4_int128 = {0x36333032373333323239000a2e000a30, 
    0x00000000000000000000000000000000, 0x00000000000000000000000000000000,
0x00000000000000000000000000000000}}
zmm3           {v16_float = {0x0 <repeats 16 times>}, v8_double = {0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v64_int8 = {0x0 <repeats 64 times>}, v32_int16 =
{0x0 <repeats 32 times>}, v16_int32 = {
    0x0 <repeats 16 times>}, v8_int64 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0}, v4_int128 = {0x00000000000000000000000000000000,
0x00000000000000000000000000000000, 0x00000000000000000000000000000000, 
    0x00000000000000000000000000000000}}
zmm4           {v16_float = {0x0, 0x0, 0x0, 0x0, 0x0 <repeats 12 times>},
v8_double = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v64_int8 = {0xc2, 0x6,
0x0, 0x0, 0xf3, 0xb, 0x0, 0x0, 0xe1, 0x1c, 0x0, 
    0x0, 0x1d, 0x6, 0x0 <repeats 50 times>}, v32_int16 = {0x6c2, 0x0, 0xbf3,
0x0, 0x1ce1, 0x0, 0x61d, 0x0 <repeats 25 times>}, v16_int32 = {0x6c2, 0xbf3,
0x1ce1, 0x61d, 0x0 <repeats 12 times>}, 
  v8_int64 = {0xbf3000006c2, 0x61d00001ce1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0},
v4_int128 = {0x0000061d00001ce100000bf3000006c2,
0x00000000000000000000000000000000, 0x00000000000000000000000000000000, 
    0x00000000000000000000000000000000}}
---Type <return> to continue, or q <return> to quit---
zmm5           {v16_float = {0x0, 0x0, 0x0, 0x0, 0x0 <repeats 12 times>},
v8_double = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v64_int8 = {0x1b, 0x0,
0x0, 0x0, 0x1d, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 
    0x26, 0x0 <repeats 51 times>}, v32_int16 = {0x1b, 0x0, 0x1d, 0x0, 0x22,
0x0, 0x26, 0x0 <repeats 25 times>}, v16_int32 = {0x1b, 0x1d, 0x22, 0x26, 0x0
<repeats 12 times>}, v8_int64 = {0x1d0000001b, 
    0x2600000022, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int128 =
{0x00000026000000220000001d0000001b, 0x00000000000000000000000000000000,
0x00000000000000000000000000000000, 
    0x00000000000000000000000000000000}}
zmm6           {v16_float = {0x0, 0x0, 0x0, 0x0 <repeats 13 times>}, v8_double
= {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v64_int8 = {0x84, 0xda, 0x0, 0x0,
0xf8, 0xe7, 0x0, 0x0, 0xf8, 0xe7, 
    0x0 <repeats 54 times>}, v32_int16 = {0xda84, 0x0, 0xe7f8, 0x0, 0xe7f8, 0x0
<repeats 27 times>}, v16_int32 = {0xda84, 0xe7f8, 0xe7f8, 0x0 <repeats 13
times>}, v8_int64 = {0xe7f80000da84, 0xe7f8, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int128 =
{0x000000000000e7f80000e7f80000da84, 0x00000000000000000000000000000000,
0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
zmm7           {v16_float = {0x0, 0x0, 0x0, 0x0 <repeats 13 times>}, v8_double
= {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v64_int8 = {0xb8, 0xb, 0x1b, 0x0,
0x0, 0x0, 0x0, 0x0, 0x20, 0x87, 0x73, 
    0x0 <repeats 53 times>}, v32_int16 = {0xbb8, 0x1b, 0x0, 0x0, 0x8720, 0x73,
0x0 <repeats 26 times>}, v16_int32 = {0x1b0bb8, 0x0, 0x738720, 0x0 <repeats 13
times>}, v8_int64 = {0x1b0bb8, 0x738720, 
    0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v4_int128 =
{0x000000000073872000000000001b0bb8, 0x00000000000000000000000000000000,
0x00000000000000000000000000000000, 0x00000000000000000000000000000000}}
mm0            {uint64 = 0xa70efe71ee611800, v2_int32 = {0xee611800,
0xa70efe71}, v4_int16 = {0x1800, 0xee61, 0xfe71, 0xa70e}, v8_int8 = {0x0, 0x18,
0x61, 0xee, 0x71, 0xfe, 0xe, 0xa7}}
mm1            {uint64 = 0xaaaaa51919b23800, v2_int32 = {0x19b23800,
0xaaaaa519}, v4_int16 = {0x3800, 0x19b2, 0xa519, 0xaaaa}, v8_int8 = {0x0, 0x38,
0xb2, 0x19, 0x19, 0xa5, 0xaa, 0xaa}}
mm2            {uint64 = 0xb3efffdd0585e000, v2_int32 = {0x585e000,
0xb3efffdd}, v4_int16 = {0xe000, 0x585, 0xffdd, 0xb3ef}, v8_int8 = {0x0, 0xe0,
0x85, 0x5, 0xdd, 0xff, 0xef, 0xb3}}
mm3            {uint64 = 0xfffffffec16df800, v2_int32 = {0xc16df800,
0xfffffffe}, v4_int16 = {0xf800, 0xc16d, 0xfffe, 0xffff}, v8_int8 = {0x0, 0xf8,
0x6d, 0xc1, 0xfe, 0xff, 0xff, 0xff}}
mm4            {uint64 = 0xeeed87e67d4a0800, v2_int32 = {0x7d4a0800,
0xeeed87e6}, v4_int16 = {0x800, 0x7d4a, 0x87e6, 0xeeed}, v8_int8 = {0x0, 0x8,
0x4a, 0x7d, 0xe6, 0x87, 0xed, 0xee}}
mm5            {uint64 = 0x0, v2_int32 = {0x0, 0x0}, v4_int16 = {0x0, 0x0, 0x0,
0x0}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0}}
mm6            {uint64 = 0xbce5086492111800, v2_int32 = {0x92111800,
0xbce50864}, v4_int16 = {0x1800, 0x9211, 0x864, 0xbce5}, v8_int8 = {0x0, 0x18,
0x11, 0x92, 0x64, 0x8, 0xe5, 0xbc}}
mm7            {uint64 = 0x8000000000000000, v2_int32 = {0x0, 0x80000000},
v4_int16 = {0x0, 0x0, 0x0, 0x8000}, v8_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x80}}


ASAN output:

==230731==ERROR: AddressSanitizer: heap-buffer-overflow on address 0xefaf73cf
at pc 0x0880882b bp 0xffb3b8f8 sp 0xffb3b8ec
READ of size 1 at 0xefaf73cf thread T0
    #0 0x880882a in comp /home/seclab/libav/libavcodec/eamad.c:90:51
    #1 0x880882a in comp_block /home/seclab/libav/libavcodec/eamad.c:98
    #2 0x880882a in decode_mb /home/seclab/libav/libavcodec/eamad.c:217
    #3 0x880882a in decode_frame /home/seclab/libav/libavcodec/eamad.c:302
    #4 0x874924b in decode_simple_internal
/home/seclab/libav/libavcodec/decode.c:336:15
    #5 0x874924b in decode_simple_receive_frame
/home/seclab/libav/libavcodec/decode.c:387
    #6 0x874924b in decode_receive_frame_internal
/home/seclab/libav/libavcodec/decode.c:405
    #7 0x8748d12 in avcodec_send_packet
/home/seclab/libav/libavcodec/decode.c:466:15
    #8 0x85247ab in try_decode_frame
/home/seclab/libav/libavformat/utils.c:1950:19
    #9 0x851cafa in avformat_find_stream_info
/home/seclab/libav/libavformat/utils.c:2459:9
    #10 0x818b68a in open_input_file
/home/seclab/libav/avtools/avconv_opt.c:821:11
    #11 0x818a393 in open_files /home/seclab/libav/avtools/avconv_opt.c:2467:15
    #12 0x8189d4f in avconv_parse_options
/home/seclab/libav/avtools/avconv_opt.c:2504:11
    #13 0x81baf9d in main /home/seclab/libav/avtools/avconv.c:2953:11
    #14 0xf74c7636 in __libc_start_main (/lib/i386-linux-gnu/libc.so.6+0x18636)
    #15 0x808b647 in _start
(/home/seclab/fuzzing-experiment/fuzzing/program/x86/libav-master/clang5-asan/bin/avconv+0x808b647)


Credits:

Mingi Cho, Seoyoung Kim, and Taekyoung Kwon of the Information Security Lab,
Yonsei University.</pre>
        </div>
      </p>
      <hr>
      <span>You are receiving this mail because:</span>
      
      <ul>
          <li>You are watching all bug changes.</li>
      </ul>
    </body>
</html>