Messages in this thread | | | Subject | Re: [PATCH v2 13/33] kmsan: Introduce memset_no_sanitize_memory() | From | Ilya Leoshkevich <> | Date | Wed, 13 Dec 2023 02:31:59 +0100 |
| |
On Fri, 2023-12-08 at 16:25 +0100, Alexander Potapenko wrote: > > A problem with __memset() is that, at least for me, it always ends > > up being a call. There is a use case where we need to write only 1 > > byte, so I thought that introducing a call there (when compiling > > without KMSAN) would be unacceptable. > > Wonder what happens with that use case if we e.g. build with fortify- > source. > Calling memset() for a single byte might be indicating the code is > not hot.
The original code has a simple assignment. Here is the relevant diff:
if (s->flags & __OBJECT_POISON) { - memset(p, POISON_FREE, poison_size - 1); - p[poison_size - 1] = POISON_END; + memset_no_sanitize_memory(p, POISON_FREE, poison_size - 1); + memset_no_sanitize_memory(p + poison_size - 1, POISON_END, 1); }
[...]
> As stated above, I don't think this is more or less working as > intended. > If we really want the ability to inline __memset(), we could > transform > it into memset() in non-sanitizer builds, but perhaps having a call > is > also acceptable?
Thanks for the detailed explanation and analysis. I will post a version with a __memset() and let the slab maintainers decide if the additional overhead is acceptable.
| |