clang generates call to __msan_instrument_asm_store with size calculated based on inline asm constraints. It looks like there's no way to properly write constraint for var-size memory write and make clang generate __msan_instrument_asm_store call based on runtime-obtained size. Implement instrument_write_after similar to instrument_write and instrument_copy_from_user_after to manually fix kmsan behaviour in such cases. Signed-off-by: Aleksei Nikiforov --- include/linux/instrumented.h | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/linux/instrumented.h b/include/linux/instrumented.h index 711a1f0d1a73..a498d914a8b0 100644 --- a/include/linux/instrumented.h +++ b/include/linux/instrumented.h @@ -41,6 +41,20 @@ static __always_inline void instrument_write(const volatile void *v, size_t size kcsan_check_write(v, size); } +/** + * instrument_write_after - instrument regular write access + * @v: address of access + * @size: size of access + * + * Instrument a regular write access. The instrumentation should be inserted + * after the actual write happens. + */ +static __always_inline void instrument_write_after(const volatile void *v, + size_t size) +{ + kmsan_unpoison_memory((const void *)v, size); +} + /** * instrument_read_write - instrument regular read-write access * @v: address of access -- 2.43.7