aboutsummaryrefslogtreecommitdiffstats
path: root/libavcodec/indeo3.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-10-21 17:52:30 +0200
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>2022-10-24 16:28:14 +0200
commit73930e4f93032bf6638e9561042b49864070b101 (patch)
tree61ce6847dffb4154409b5d906eb276f49817d0a7 /libavcodec/indeo3.c
parent7c5d256c9c6f8361cd9dde24544b61cec177b3ec (diff)
downloadffmpeg-73930e4f93032bf6638e9561042b49864070b101.tar.gz
avutil/aes: Don't use misaligned pointers
The AES code uses av_aes_block, a union consisting of uint64_t[2], uint32_t[4], uint8_t[4][4] and uint8_t[16]. subshift() performs byte-wise manipulations of two av_aes_blocks, but when encrypting, it does so with a shift of two bytes; more precisely, it uses "av_aes_block *s1 = (av_aes_block *) (s0[0].u8 - s)" and lateron uses the uint8_t[16] member to access s0. Yet av_aes_block requires to be suitably aligned for the uint64_t[2] member, which s0[0].u8 - 2 is certainly not. This is in violation of 6.3.2.3 (7) of C11. UBSan reports this in the aes_ctr, mov-3elist-encrypted, mov-frag-encrypted, mov-tenc-only-encrypted and srtp tests. Furthermore, there is another issue here: The pointer points outside of s0; this works, because all the accesses lateron use an index >= 3. (Clang-)UBSan reports this as "runtime error: index -2 out of bounds for type 'uint8_t[16]'". This commit fixes both of these issues: The latter issue is fixed by applying an offset of "+ 3" during the cast and subtracting this from the indices used lateron. The former issue is solved by not casting to av_aes_block* at all; instead simply cast to unsigned char*. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Diffstat (limited to 'libavcodec/indeo3.c')
0 files changed, 0 insertions, 0 deletions