ubsan - #763
Conversation
|
@MarekKnapek how is this PR different from #756 ? |
|
Eh, when talking about undefined behavior in #758 I decided to compile all of libtomcrypt with UBSan and fix all places it triggered during unit tests. Both PRs seem to be created roughly at the same time. This PR might contain more changes as it not only fixes the unaligned integer casts, but also some other things UBSan detected. Such as memcpy on null pointer and zero length. Bit-shift on singed negative variable. |
src/encauth/siv/siv.c:164:19: runtime error: null pointer passed as argument 2, which is declared to never be null /usr/include/string.h:44:28: note: nonnull attribute specified here src/misc/compare_testvector.c:63:25: runtime error: null pointer passed as argument 2, which is declared to never be null /usr/include/string.h:65:33: note: nonnull attribute specified here
As it might be dangerous to use it.
This introduces `LTC_FAST_TYPE_{ASSIGN,MASK,XOR{2,3}}()` in order to
replace the potential unaligned loads.
This fixes the following UBSAN errors:
src/modes/ctr/ctr_encrypt.c:56:66: runtime error: load of misaligned address 0x7ffea07ee82f for type 'LTC_FAST_TYPE', which requires 8 byte alignment
src/modes/ctr/ctr_encrypt.c:56:64: runtime error: store to misaligned address 0x7ffea07ee82f for type 'LTC_FAST_TYPE', which requires 8 byte alignment
tests/store_test.c:66:91: runtime error: load of misaligned address 0x7ffdd32f0d9f for type 'LTC_FAST_TYPE', which requires 8 byte alignment
tests/store_test.c:66:52: runtime error: load of misaligned address 0x7ffdd32f0d71 for type 'LTC_FAST_TYPE', which requires 8 byte alignment
tests/store_test.c:66:50: runtime error: store to misaligned address 0x7ffdd32f0dc1 for type 'LTC_FAST_TYPE', which requires 8 byte alignment
src/mac/pmac/pmac_process.c:40:50: runtime error: load of misaligned address 0x57c89c4329ec for type 'LTC_FAST_TYPE', which requires 8 byte alignment
src/mac/xcbc/xcbc_process.c:35:60: runtime error: load of misaligned address 0x57c89c432ccc for type 'LTC_FAST_TYPE', which requires 8 byte alignment
src/mac/f9/f9_process.c:39:58: runtime error: load of misaligned address 0x5c2b1a1d2c14 for type 'LTC_FAST_TYPE', which requires 8 byte alignment
src/encauth/gcm/gcm_process.c:82:58: runtime error: load of misaligned address 0x596b3e6aa354 for type 'LTC_FAST_TYPE', which requires 8 byte alignment
sjaeckel
left a comment
There was a problem hiding this comment.
Thanks a lot for the PR.
I took the liberty to squash the commits together.
I also took your macro based version instead of the inline functions proposed in #756 since we had problems with inline functions on some compilers ages ago. @karel-m IIRC some IBM compiler chugged on this in the past, can you maybe check?
Also I kept the ed{25519,448} modifications from @karel-m since I liked the style better.
Checklist
Fixes:tag to the commit message