Turns out that calling a variadic function with too many (e.g. >100 i64's) arguments overflows __msan_va_arg_tls, which leads to smashing other TLS data with function argument shadow values.
getShadow() already checks for kParamTLSSize and returns clean shadow if the argument does not fit, so just skip storing argument shadow for such arguments.
Details
Details
- Reviewers
eugenis kcc dvyukov javed.absar
Diff Detail
Diff Detail
Event Timeline
Comment Actions
In fact, getShadow() already checks for kParamTLSSize and returns clean shadow if the argument does not fit.
We just need to skip storing argument shadow for such arguments instead of asserting.
Comment Actions
Skip storing argument shadow instead of asserting, added tests for AArch64, Mips, PPC64