Message ID | 20241013130211.3067196-2-snovitoll@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | kasan: migrate the last module test to kunit | expand |
On Sun, Oct 13, 2024 at 3:01 PM Sabyrzhan Tasbolatov <snovitoll@gmail.com> wrote: > > Since in the commit 2865baf54077("x86: support user address masking instead > of non-speculative conditional") do_strncpy_from_user() is called from > multiple places, we should sanitize the kernel *dst memory and size > which were done in strncpy_from_user() previously. > > Fixes: 2865baf54077 ("x86: support user address masking instead of non-speculative conditional") > Signed-off-by: Sabyrzhan Tasbolatov <snovitoll@gmail.com> > --- > lib/strncpy_from_user.c | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/lib/strncpy_from_user.c b/lib/strncpy_from_user.c > index 989a12a6787..f36ad821176 100644 > --- a/lib/strncpy_from_user.c > +++ b/lib/strncpy_from_user.c > @@ -31,6 +31,9 @@ static __always_inline long do_strncpy_from_user(char *dst, const char __user *s > const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS; > unsigned long res = 0; > > + kasan_check_write(dst, count); > + check_object_size(dst, count, false); > + > if (IS_UNALIGNED(src, dst)) > goto byte_at_a_time; > > @@ -142,8 +145,6 @@ long strncpy_from_user(char *dst, const char __user *src, long count) > if (max > count) > max = count; > > - kasan_check_write(dst, count); > - check_object_size(dst, count, false); > if (user_read_access_begin(src, max)) { > retval = do_strncpy_from_user(dst, src, count, max); > user_read_access_end(); > -- > 2.34.1 > Reviewed-by: Andrey Konovalov <andreyknvl@gmail.com>
diff --git a/lib/strncpy_from_user.c b/lib/strncpy_from_user.c index 989a12a6787..f36ad821176 100644 --- a/lib/strncpy_from_user.c +++ b/lib/strncpy_from_user.c @@ -31,6 +31,9 @@ static __always_inline long do_strncpy_from_user(char *dst, const char __user *s const struct word_at_a_time constants = WORD_AT_A_TIME_CONSTANTS; unsigned long res = 0; + kasan_check_write(dst, count); + check_object_size(dst, count, false); + if (IS_UNALIGNED(src, dst)) goto byte_at_a_time; @@ -142,8 +145,6 @@ long strncpy_from_user(char *dst, const char __user *src, long count) if (max > count) max = count; - kasan_check_write(dst, count); - check_object_size(dst, count, false); if (user_read_access_begin(src, max)) { retval = do_strncpy_from_user(dst, src, count, max); user_read_access_end();
Since in the commit 2865baf54077("x86: support user address masking instead of non-speculative conditional") do_strncpy_from_user() is called from multiple places, we should sanitize the kernel *dst memory and size which were done in strncpy_from_user() previously. Fixes: 2865baf54077 ("x86: support user address masking instead of non-speculative conditional") Signed-off-by: Sabyrzhan Tasbolatov <snovitoll@gmail.com> --- lib/strncpy_from_user.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)