Another cavs security-related bug fix; check run value validity. From Brad.
This commit is contained in:
parent
31a32e8441
commit
6c5a80cffc
@ -1,11 +1,11 @@
|
|||||||
# $OpenBSD: Makefile,v 1.78 2011/08/23 11:59:59 sthen Exp $
|
# $OpenBSD: Makefile,v 1.79 2011/08/24 09:26:41 sthen Exp $
|
||||||
|
|
||||||
COMMENT= audio/video converter and streamer
|
COMMENT= audio/video converter and streamer
|
||||||
|
|
||||||
V= 20110408
|
V= 20110408
|
||||||
DISTNAME= ffmpeg-git-${V}
|
DISTNAME= ffmpeg-git-${V}
|
||||||
PKGNAME= ffmpeg-${V}
|
PKGNAME= ffmpeg-${V}
|
||||||
REVISION= 6
|
REVISION= 7
|
||||||
CATEGORIES= graphics multimedia
|
CATEGORIES= graphics multimedia
|
||||||
MASTER_SITES= http://comstyle.com/source/
|
MASTER_SITES= http://comstyle.com/source/
|
||||||
|
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
$OpenBSD: patch-libavcodec_cavsdec_c,v 1.2 2011/08/23 11:59:59 sthen Exp $
|
$OpenBSD: patch-libavcodec_cavsdec_c,v 1.3 2011/08/24 09:26:41 sthen Exp $
|
||||||
|
|
||||||
- Fix insufficient boundary check. oCERT #2011-002
|
- Fix insufficient boundary check. oCERT #2011-002
|
||||||
- Fix some crashes with invalid bitstreams. oCERT #2011-002
|
- Fix some crashes with invalid bitstreams. oCERT #2011-002
|
||||||
|
- Check run value validity.
|
||||||
|
|
||||||
--- libavcodec/cavsdec.c.orig Mon Mar 28 19:23:17 2011
|
--- libavcodec/cavsdec.c.orig Mon Mar 28 19:23:17 2011
|
||||||
+++ libavcodec/cavsdec.c Mon Aug 22 21:06:48 2011
|
+++ libavcodec/cavsdec.c Tue Aug 23 16:33:20 2011
|
||||||
@@ -115,7 +115,8 @@ static inline int get_ue_code(GetBitContext *gb, int o
|
@@ -115,7 +115,8 @@ static inline int get_ue_code(GetBitContext *gb, int o
|
||||||
static int decode_residual_block(AVSContext *h, GetBitContext *gb,
|
static int decode_residual_block(AVSContext *h, GetBitContext *gb,
|
||||||
const struct dec_2dvlc *r, int esc_golomb_order,
|
const struct dec_2dvlc *r, int esc_golomb_order,
|
||||||
@ -15,7 +16,15 @@ $OpenBSD: patch-libavcodec_cavsdec_c,v 1.2 2011/08/23 11:59:59 sthen Exp $
|
|||||||
DCTELEM level_buf[65];
|
DCTELEM level_buf[65];
|
||||||
uint8_t run_buf[65];
|
uint8_t run_buf[65];
|
||||||
DCTELEM *block = h->block;
|
DCTELEM *block = h->block;
|
||||||
@@ -130,12 +131,14 @@ static int decode_residual_block(AVSContext *h, GetBit
|
@@ -124,18 +125,22 @@ static int decode_residual_block(AVSContext *h, GetBit
|
||||||
|
level_code = get_ue_code(gb,r->golomb_order);
|
||||||
|
if(level_code >= ESCAPE_CODE) {
|
||||||
|
run = ((level_code - ESCAPE_CODE) >> 1) + 1;
|
||||||
|
+ if(run > 64)
|
||||||
|
+ return -1;
|
||||||
|
esc_code = get_ue_code(gb,esc_golomb_order);
|
||||||
|
level = esc_code + (run > r->max_run ? 1 : r->level_add[run]);
|
||||||
|
while(level > r->inc_limit)
|
||||||
r++;
|
r++;
|
||||||
mask = -(level_code & 1);
|
mask = -(level_code & 1);
|
||||||
level = (level^mask) - mask;
|
level = (level^mask) - mask;
|
||||||
@ -31,7 +40,7 @@ $OpenBSD: patch-libavcodec_cavsdec_c,v 1.2 2011/08/23 11:59:59 sthen Exp $
|
|||||||
}
|
}
|
||||||
level_buf[i] = level;
|
level_buf[i] = level;
|
||||||
run_buf[i] = run;
|
run_buf[i] = run;
|
||||||
@@ -189,7 +192,8 @@ static inline int decode_residual_inter(AVSContext *h)
|
@@ -189,7 +194,8 @@ static inline int decode_residual_inter(AVSContext *h)
|
||||||
|
|
||||||
static int decode_mb_i(AVSContext *h, int cbp_code) {
|
static int decode_mb_i(AVSContext *h, int cbp_code) {
|
||||||
GetBitContext *gb = &h->s.gb;
|
GetBitContext *gb = &h->s.gb;
|
||||||
@ -41,7 +50,7 @@ $OpenBSD: patch-libavcodec_cavsdec_c,v 1.2 2011/08/23 11:59:59 sthen Exp $
|
|||||||
uint8_t top[18];
|
uint8_t top[18];
|
||||||
uint8_t *left = NULL;
|
uint8_t *left = NULL;
|
||||||
uint8_t *d;
|
uint8_t *d;
|
||||||
@@ -445,6 +449,8 @@ static inline int check_for_slice(AVSContext *h) {
|
@@ -445,6 +451,8 @@ static inline int check_for_slice(AVSContext *h) {
|
||||||
if((show_bits_long(gb,24+align) & 0xFFFFFF) == 0x000001) {
|
if((show_bits_long(gb,24+align) & 0xFFFFFF) == 0x000001) {
|
||||||
skip_bits_long(gb,24+align);
|
skip_bits_long(gb,24+align);
|
||||||
h->stc = get_bits(gb,8);
|
h->stc = get_bits(gb,8);
|
||||||
@ -50,7 +59,7 @@ $OpenBSD: patch-libavcodec_cavsdec_c,v 1.2 2011/08/23 11:59:59 sthen Exp $
|
|||||||
decode_slice_header(h,gb);
|
decode_slice_header(h,gb);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -659,7 +665,7 @@ static int cavs_decode_frame(AVCodecContext * avctx,vo
|
@@ -659,7 +667,7 @@ static int cavs_decode_frame(AVCodecContext * avctx,vo
|
||||||
buf_end = buf + buf_size;
|
buf_end = buf + buf_size;
|
||||||
for(;;) {
|
for(;;) {
|
||||||
buf_ptr = ff_find_start_code(buf_ptr,buf_end, &stc);
|
buf_ptr = ff_find_start_code(buf_ptr,buf_end, &stc);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user