| From: Arnd Bergmann <arnd@arndb.de> |
| Subject: kcov: avoid clang out-of-range warning |
| Date: Thu, 28 Mar 2024 15:30:42 +0100 |
| |
| The area_size is never larger than the maximum on 64-bit architectutes: |
| |
| kernel/kcov.c:634:29: error: result of comparison of constant 1152921504606846975 with expression of type '__u32' (aka 'unsigned int') is always false [-Werror,-Wtautological-constant-out-of-range-compare] |
| if (remote_arg->area_size > LONG_MAX / sizeof(unsigned long)) |
| ~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The compiler can correctly optimize the check away and the code appears |
| correct to me, so just add a cast to avoid the warning. |
| |
| Link: https://lkml.kernel.org/r/20240328143051.1069575-5-arnd@kernel.org |
| Signed-off-by: Arnd Bergmann <arnd@arndb.de> |
| Reviewed-by: Justin Stitt <justinstitt@google.com> |
| Cc: Andrey Konovalov <andreyknvl@gmail.com> |
| Cc: Bill Wendling <morbo@google.com> |
| Cc: Dmitry Vyukov <dvyukov@google.com> |
| Cc: Nathan Chancellor <nathan@kernel.org> |
| Cc: Nick Desaulniers <ndesaulniers@google.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| kernel/kcov.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/kernel/kcov.c~kcov-avoid-clang-out-of-range-warning |
| +++ a/kernel/kcov.c |
| @@ -627,7 +627,8 @@ static int kcov_ioctl_locked(struct kcov |
| mode = kcov_get_mode(remote_arg->trace_mode); |
| if (mode < 0) |
| return mode; |
| - if (remote_arg->area_size > LONG_MAX / sizeof(unsigned long)) |
| + if ((unsigned long)remote_arg->area_size > |
| + LONG_MAX / sizeof(unsigned long)) |
| return -EINVAL; |
| kcov->mode = mode; |
| t->kcov = kcov; |
| _ |