Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Global-buffer-overflow in intpl_chroma_block_ver_sse128() --> xavs2/source/common/vec/intrinsic_inter_pred.c:1592 #30

Open
arayzw opened this issue Sep 8, 2022 · 0 comments

Comments

@arayzw
Copy link

arayzw commented Sep 8, 2022

Describe the bug

Bug Relevant code as follows:

====================================================================================
void intpl_chroma_block_ver_sse128(pel_t *dst, int i_dst, pel_t *src, int i_src, int width, int height, const int8_t *coeff)
{

int row, col;
const short offset = 32;
const int shift = 6;
int bsym = (coeff[1] == coeff[2]);
__m128i mAddOffset = _mm_set1_epi16(offset);
pel_t const *p;
__m128i mask = _mm_loadu_si128((__m128i*)(intrinsic_mask[(width & 7) - 1]));        <------ read overflow here

......
}

====================================================================================

This is a security issue.

To Reproduce

cd /path/to/xavs2/build/linux/
./configure --enable-pic --enable-debug
vim config.mak (add -fsanitize=address to CFLAGS, and -fsanitize=address -lasan to LDFLAGS)
make
./xavs2 -p InputFile=./poc.yuv

ASAN Crash log

=================================================================
==103739==ERROR: AddressSanitizer: global-buffer-overflow on address 0x55c3f2947f10 at pc 0x55c3f271aae7 bp 0x7ff9a0bdd110 sp 0x7ff9a0bdd100
READ of size 16 at 0x55c3f2947f10 thread T9
#0 0x55c3f271aae6 in _mm_loadu_si128 /usr/lib/gcc/x86_64-linux-gnu/9/include/emmintrin.h:703
#1 0x55c3f271aae6 in xavs2_intpl_chroma_block_ver_sse128 /home/arayz/arayz/work/xavs2/source/common/vec/intrinsic_inter_pred.c:1592
#2 0x55c3f2874214 in xavs2_intpl_chroma_block_ver_avx2 /home/arayz/arayz/work/xavs2/source/common/vec/intrinsic_inter_pred_avx2.c:1710
#3 0x55c3f2678e8f in xavs2_mc_chroma /home/arayz/arayz/work/xavs2/source/common/mc.c:823
#4 0x55c3f2613ae1 in rdo_get_pred_inter /home/arayz/arayz/work/xavs2/source/encoder/rdo.c:1654
#5 0x55c3f2613ae1 in cu_rdcost_inter /home/arayz/arayz/work/xavs2/source/encoder/rdo.c:1723
#6 0x55c3f262d105 in cu_check_skip_direct_rough2 /home/arayz/arayz/work/xavs2/source/encoder/rdo.c:2568
#7 0x55c3f262d105 in compress_cu_inter /home/arayz/arayz/work/xavs2/source/encoder/rdo.c:3068
#8 0x55c3f262d105 in xavs2_compress_ctu_inter /home/arayz/arayz/work/xavs2/source/encoder/rdo.c:3462
#9 0x55c3f26387cb in xavs2_compress_ctu_inter /home/arayz/arayz/work/xavs2/source/encoder/rdo.c:3515
#10 0x55c3f26387cb in xavs2_compress_ctu_inter /home/arayz/arayz/work/xavs2/source/encoder/rdo.c:3515
#11 0x55c3f264da84 in xavs2_lcu_row_write /home/arayz/arayz/work/xavs2/source/encoder/slice.c:436
#12 0x55c3f25c0c38 in proc_xavs2_threadpool_thread /home/arayz/arayz/work/xavs2/source/common/threadpool.c:258
#13 0x7ff9b3692608 in start_thread /build/glibc-SzIz7B/glibc-2.31/nptl/pthread_create.c:477
#14 0x7ff9b35b1132 in __clone (/lib/x86_64-linux-gnu/libc.so.6+0x11f132)

0x55c3f2947f10 is located 16 bytes to the left of global variable 'intrinsic_mask' defined in '/home/arayz/arayz/work/xavs2/source/common/vec/intrinsic.c:46:1' (0x55c3f2947f20) of size 240
0x55c3f2947f10 is located 16 bytes to the right of global variable 'intrinsic_mask_256_8bit' defined in '/home/arayz/arayz/work/xavs2/source/common/vec/intrinsic.c:65:1' (0x55c3f2947d00) of size 512
SUMMARY: AddressSanitizer: global-buffer-overflow /usr/lib/gcc/x86_64-linux-gnu/9/include/emmintrin.h:703 in _mm_loadu_si128
Shadow bytes around the buggy address:
0x0ab8fe520f90: 00 00 00 00 00 00 00 00 00 00 00 00 f9 f9 f9 f9
0x0ab8fe520fa0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ab8fe520fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ab8fe520fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ab8fe520fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0ab8fe520fe0: f9 f9[f9]f9 00 00 00 00 00 00 00 00 00 00 00 00
0x0ab8fe520ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ab8fe521000: 00 00 f9 f9 f9 f9 f9 f9 00 00 00 00 00 00 00 00
0x0ab8fe521010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ab8fe521020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x0ab8fe521030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
Shadow gap: cc
Thread T9 created by T0 here:
#0 0x7ff9b3836815 in __interceptor_pthread_create ../../../../src/libsanitizer/asan/asan_interceptors.cc:208
#1 0x55c3f25b8df2 in xavs2_create_thread /home/arayz/arayz/work/xavs2/source/common/common.c:323

==103739==ABORTING

Additional context

  • OS: Ubuntu 20.04 (Desktop)
  • Compiler: gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)

PoC:
poc.zip

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant