New submission from Daniel Kang <[email protected]>: ffmpeg crashes on mp4 files with invalid headers. Upon further investigation, it seems that av_mallocz is not actually allocating the amount of memory passed to it (i.e. only 8 bytes are mallocated when 208 are requested). I am not sure why. Perhaps this bug only affects my box? I have attached a patch which checks for this.
gdb run:
(gdb) r -i ../fuzzed.mp4 del.mp4
Starting program: /afs/csl.tjhsst.edu/students/2011/2011dkang/ffmpeg/ffmpeg_g -i
../fuzzed.mp4 del.mp4
[Thread debugging using libthread_db enabled]
FFmpeg version git-a5b7c2e, Copyright (c) 2000-2011 the FFmpeg developers
built on Jan 2 2011 19:33:34 with gcc 4.4.5
configuration: --enable-gpl --samples=../fate/fate-suite/
libavutil 50.36. 0 / 50.36. 0
libavcore 0.16. 0 / 0.16. 0
libavcodec 52.101. 0 / 52.101. 0
libavformat 52.92. 0 / 52.92. 0
libavdevice 52. 2. 2 / 52. 2. 2
libavfilter 1.72. 0 / 1.72. 0
libswscale 0.12. 0 / 0.12. 0
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x11fa510] stream 0, timescale not set
Program received signal SIGSEGV, Segmentation fault.
0x0000000000484b52 in mov_build_index (c=0x11fb5a0, pb=<value optimized out>,
atom=...) at libavformat/mov.c:1518
1518 if (sc->ctts_data && sc->ctts_data[0].duration /
sc->stts_data[0].duration > 16) {
(gdb) bt
#0 0x0000000000484b52 in mov_build_index (c=0x11fb5a0, pb=<value optimized
out>, atom=...) at libavformat/mov.c:1518
#1 mov_read_trak (c=0x11fb5a0, pb=<value optimized out>, atom=...) at
libavformat/mov.c:1765
#2 0x000000000048222d in mov_read_default (c=0x11fb5a0, pb=0x12035b0, atom=...)
at libavformat/mov.c:302
#3 0x00000000004826f5 in mov_read_moov (c=0xfffffffe, pb=0x1, atom=...) at
libavformat/mov.c:575
#4 0x000000000048222d in mov_read_default (c=0x11fb5a0, pb=0x12035b0, atom=...)
at libavformat/mov.c:302
#5 0x0000000000486950 in mov_read_header (s=<value optimized out>, ap=<value
optimized out>) at libavformat/mov.c:2353
#6 0x00000000004d0819 in av_open_input_stream (ic_ptr=0x7fffffffd678,
pb=0x12035b0, filename=0x7fffffffdc84 "../fuzzed.mp4", fmt=0xc9d7a0,
ap=0x7fffffffd640)
at libavformat/utils.c:487
#7 0x00000000004d29d8 in av_open_input_file (ic_ptr=0x7fffffffd678,
filename=0x7fffffffdc84 "../fuzzed.mp4", fmt=0xc9d7a0, buf_size=0,
ap=0x7fffffffd640)
at libavformat/utils.c:643
#8 0x00000000004301bd in opt_input_file (filename=0x7fffffffdc84
"../fuzzed.mp4") at ffmpeg.c:3178
#9 0x000000000043a7cc in parse_options (argc=4, argv=0x7fffffffd8f8,
options=<value optimized out>, parse_arg_function=0x437290 <opt_output_file>) at
cmdutils.c:204
#10 0x00000000004363d2 in main (argc=4, argv=0x7fffffffd8f8) at ffmpeg.c:4340
(gdb) disass $pc-32 $pc+32
Dump of assembler code from 0x484b32 to 0x484b72:
0x0000000000484b32 <mov_read_trak+306>: jl 0x4851c0 <mov_read_trak+1984>
0x0000000000484b38 <mov_read_trak+312>: mov 0x38(%r13),%rax
0x0000000000484b3c <mov_read_trak+316>: neg %edi
0x0000000000484b3e <mov_read_trak+318>: movslq %edi,%r15
0x0000000000484b41 <mov_read_trak+321>: test %rax,%rax
0x0000000000484b44 <mov_read_trak+324>: je 0x484b70 <mov_read_trak+368>
0x0000000000484b46 <mov_read_trak+326>: mov 0x4(%rax),%edx
0x0000000000484b49 <mov_read_trak+329>: mov 0x28(%r13),%rcx
0x0000000000484b4d <mov_read_trak+333>: mov %edx,%eax
0x0000000000484b4f <mov_read_trak+335>: sar $0x1f,%edx
0x0000000000484b52 <mov_read_trak+338>: idivl 0x4(%rcx)
0x0000000000484b55 <mov_read_trak+341>: cmp $0x10,%eax
0x0000000000484b58 <mov_read_trak+344>: jle 0x484b70 <mov_read_trak+368>
0x0000000000484b5a <mov_read_trak+346>: movl $0x1,0xbc(%r13)
0x0000000000484b65 <mov_read_trak+357>: movl $0x1,0x140(%r14)
0x0000000000484b70 <mov_read_trak+368>: cmpl $0x1,0x108(%r14)
End of assembler dump.
(gdb) info all-registers
rax 0x2 2
rbx 0x11fb790 18855824
rcx 0x0 0
rdx 0x0 0
rsi 0x1 1
rdi 0xfffffffe 4294967294
rbp 0x11fb5a0 0x11fb5a0
rsp 0x7fffffffd270 0x7fffffffd270
r8 0x1 1
r9 0xfefefefefeff0973 -72340172838073997
r10 0x1162340 18228032
r11 0x7ffff6dbd180 140737334989184
r12 0x11fd4f0 18863344
r13 0x11fd4f0 18863344
r14 0x11fd080 18862208
r15 0xfffffffffffffffe -2
rip 0x484b52 0x484b52 <mov_read_trak+338>
eflags 0x10246 [ PF ZF IF RF ]
cs 0x33 51
ss 0x2b 43
ds 0x0 0
es 0x0 0
fs 0x0 0
gs 0x0 0
st0 0 (raw 0x00000000000000000000)
st1 0 (raw 0x00000000000000000000)
st2 0 (raw 0x00000000000000000000)
st3 0 (raw 0x00000000000000000000)
st4 0 (raw 0x00000000000000000000)
st5 0 (raw 0x00000000000000000000)
st6 0 (raw 0x00000000000000000000)
st7 0 (raw 0x00000000000000000000)
fctrl 0x37f 895
fstat 0x0 0
ftag 0xffff 65535
fiseg 0x0 0
fioff 0x0 0
foseg 0x0 0
fooff 0x0 0
fop 0x0 0
xmm0 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0},
v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm1 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x25 <repeats 16 times>}, v8_int16 = {0x2525, 0x2525, 0x2525,
0x2525, 0x2525,
---Type <return> to continue, or q <return> to quit---
0x2525, 0x2525, 0x2525}, v4_int32 = {0x25252525, 0x25252525, 0x25252525,
0x25252525}, v2_int64 = {0x2525252525252525, 0x2525252525252525},
uint128 = 0x25252525252525252525252525252525}
xmm2 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0},
v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
xmm3 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double =
{0x8000000000000000, 0x0}, v16_int8 = {0x0, 0x0, 0xff, 0x0, 0x0, 0x0, 0x0, 0xff,
0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0}, v8_int16 = {0x0, 0xff, 0x0, 0xff00, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0xff0000, 0xff000000, 0x0, 0x0}, v2_int64 = {0xff00000000ff0000,
0x0},
uint128 = 0x0000000000000000ff00000000ff0000}
xmm4 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0,
0x8000000000000000}, v16_int8 = {0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x54,
0x72, 0x69, 0x65,
0x64, 0x20, 0x74, 0x6f}, v8_int16 = {0x73, 0x0, 0x0, 0x0, 0x7254, 0x6569,
0x2064, 0x6f74}, v4_int32 = {0x73, 0x0, 0x65697254, 0x6f742064}, v2_int64 =
{0x73,
0x6f74206465697254}, uint128 = 0x6f742064656972540000000000000073}
xmm5 {v4_float = {0x0, 0x1, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0, 0x0, 0x0, 0xe0, 0x95, 0x9c, 0xe7, 0x3f, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0,
0x0}, v8_int16 = {0x0, 0xe000, 0x9c95, 0x3fe7, 0x0, 0x0, 0x0, 0x0}, v4_int32
= {0xe0000000, 0x3fe79c95, 0x0, 0x0}, v2_int64 = {0x3fe79c95e0000000, 0x0},
uint128 = 0x00000000000000003fe79c95e0000000}
xmm6 {v4_float = {0x0, 0x1, 0x0, 0x0}, v2_double = {0x1, 0x0},
v16_int8 = {0x6d, 0x7d, 0xbf, 0xbb, 0x27, 0xaf, 0xf5, 0x3f, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
0x0, 0x0}, v8_int16 = {0x7d6d, 0xbbbf, 0xaf27, 0x3ff5, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0xbbbf7d6d, 0x3ff5af27, 0x0, 0x0}, v2_int64 = {0x3ff5af27bbbf7d6d,
0x0},
uint128 = 0x00000000000000003ff5af27bbbf7d6d}
xmm7 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x68, 0xc8, 0xbc, 0x3b, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
0x0}, v8_int16 = {0x0, 0x0, 0xc868, 0x3bbc, 0x0, 0x0, 0x0, 0x0}, v4_int32 =
{0x0, 0x3bbcc868, 0x0, 0x0}, v2_int64 = {0x3bbcc86800000000, 0x0},
uint128 = 0x00000000000000003bbcc86800000000}
xmm8 {v4_float = {0x0, 0xfffffffd, 0x0, 0x0}, v2_double =
{0xffffffffffffffd2, 0x0}, v16_int8 = {0xe0, 0xe6, 0x35, 0x67, 0x9e, 0x6, 0x47,
0xc0, 0x0, 0x0,
0x0, 0x0, 0x0, 0x0, 0x0, 0x0}, v8_int16 = {0xe6e0, 0x6735, 0x69e, 0xc047,
0x0, 0x0, 0x0, 0x0}, v4_int32 = {0x6735e6e0, 0xc047069e, 0x0, 0x0}, v2_int64 = {
0xc047069e6735e6e0, 0x0}, uint128 = 0x0000000000000000c047069e6735e6e0}
xmm9 {v4_float = {0x0, 0x1, 0x0, 0x0}, v2_double = {0x1, 0x0},
v16_int8 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf0, 0x3f, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
0x0}, v8_int16 = {0x0, 0x0, 0x0, 0x3ff0, 0x0, 0x0, 0x0, 0x0}, v4_int32 =
{0x0, 0x3ff00000, 0x0, 0x0}, v2_int64 = {0x3ff0000000000000, 0x0},
uint128 = 0x00000000000000003ff0000000000000}
xmm10 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0, 0x0, 0x46, 0x84, 0x24, 0x59, 0xd6, 0x3e, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0, 0x0,
0x0}, v8_int16 = {0x0, 0x8446, 0x5924, 0x3ed6, 0x0, 0x0, 0x0, 0x0}, v4_int32
= {0x84460000, 0x3ed65924, 0x0, 0x0}, v2_int64 = {0x3ed6592484460000, 0x0},
uint128 = 0x00000000000000003ed6592484460000}
xmm11 {v4_float = {0x9689a800, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x6a, 0xa2, 0x65, 0x50, 0xf2, 0xea, 0x8f, 0xbd, 0x0, 0x0, 0x0, 0x0,
0x0,
0x0, 0x0, 0x0}, v8_int16 = {0xa26a, 0x5065, 0xeaf2, 0xbd8f, 0x0, 0x0, 0x0,
0x0}, v4_int32 = {0x5065a26a, 0xbd8feaf2, 0x0, 0x0}, v2_int64 =
{0xbd8feaf25065a26a,
0x0}, uint128 = 0x0000000000000000bd8feaf25065a26a}
xmm12 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x29, 0xf2, 0x88, 0x6c, 0xa6, 0x49, 0xde, 0x3e, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
0x0, 0x0}, v8_int16 = {0xf229, 0x6c88, 0x49a6, 0x3ede, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0x6c88f229, 0x3ede49a6, 0x0, 0x0}, v2_int64 = {0x3ede49a66c88f229,
0x0},
uint128 = 0x00000000000000003ede49a66c88f229}
xmm13 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0xb3, 0x12, 0x58, 0x17, 0x64, 0x46, 0xe6, 0x3b, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
0x0, 0x0}, v8_int16 = {0x12b3, 0x1758, 0x4664, 0x3be6, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0x175812b3, 0x3be64664, 0x0, 0x0}, v2_int64 = {0x3be64664175812b3,
0x0},
uint128 = 0x00000000000000003be64664175812b3}
xmm14 {v4_float = {0x0, 0x3, 0x0, 0x0}, v2_double = {0x2d, 0x0},
v16_int8 = {0xc0, 0x9, 0xf2, 0x16, 0xb5, 0xdf, 0x46, 0x40, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0,
0x0, 0x0}, v8_int16 = {0x9c0, 0x16f2, 0xdfb5, 0x4046, 0x0, 0x0, 0x0, 0x0},
v4_int32 = {0x16f209c0, 0x4046dfb5, 0x0, 0x0}, v2_int64 = {0x4046dfb516f209c0,
0x0},
uint128 = 0x00000000000000004046dfb516f209c0}
xmm15 {v4_float = {0x0, 0x0, 0x0, 0x0}, v2_double = {0x0, 0x0},
v16_int8 = {0x0 <repeats 16 times>}, v8_int16 = {0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
0x0, 0x0},
v4_int32 = {0x0, 0x0, 0x0, 0x0}, v2_int64 = {0x0, 0x0}, uint128 =
0x00000000000000000000000000000000}
mxcsr 0x1fa0 [ PE IM DM ZM OM UM PM ]
----------
files: mp4_malloc_fail_fix.diff
messages: 13174
priority: normal
status: open
substatus: open
title: ffmpeg crashes on mp4 file with invalid headers
type: bug
________________________________________________
FFmpeg issue tracker <[email protected]>
<https://roundup.ffmpeg.org/issue2479>
________________________________________________
mp4_malloc_fail_fix.diff
Description: Binary data
