Commit 469cbd01 authored by Arnd Bergmann's avatar Arnd Bergmann Committed by Linus Torvalds

lib/ubsan.c: fix gcc-10 warnings

The latest compiler expects slightly different function prototypes
for the ubsan helpers:

  lib/ubsan.c:192:6: error: conflicting types for built-in function '__ubsan_handle_add_overflow'; expected 'void(void *, void *, void *)' [-Werror=builtin-declaration-mismatch]
    192 | void __ubsan_handle_add_overflow(struct overflow_data *data,
        |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
  lib/ubsan.c:200:6: error: conflicting types for built-in function '__ubsan_handle_sub_overflow'; expected 'void(void *, void *, void *)' [-Werror=builtin-declaration-mismatch]
    200 | void __ubsan_handle_sub_overflow(struct overflow_data *data,
        |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
  lib/ubsan.c:207:6: error: conflicting types for built-in function '__ubsan_handle_mul_overflow'; expected 'void(void *, void *, void *)' [-Werror=builtin-declaration-mismatch]
    207 | void __ubsan_handle_mul_overflow(struct overflow_data *data,
        |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~
  lib/ubsan.c:214:6: error: conflicting types for built-in function '__ubsan_handle_negate_overflow'; expected 'void(void *, void *)' [-Werror=builtin-declaration-mismatch]
    214 | void __ubsan_handle_negate_overflow(struct overflow_data *data,
        |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  lib/ubsan.c:234:6: error: conflicting types for built-in function '__ubsan_handle_divrem_overflow'; expected 'void(void *, void *, void *)' [-Werror=builtin-declaration-mismatch]
    234 | void __ubsan_handle_divrem_overflow(struct overflow_data *data,
        |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Change the Linux implementation to match these, using a local typed
pointer.
Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Reviewed-by: default avatarKees Cook <keescook@chromium.org>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: Julien Grall <julien.grall@arm.com>
Link: http://lkml.kernel.org/r/20200429185948.4189600-1-arnd@arndb.deSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 2792d488
...@@ -189,7 +189,7 @@ static void handle_overflow(struct overflow_data *data, void *lhs, ...@@ -189,7 +189,7 @@ static void handle_overflow(struct overflow_data *data, void *lhs,
ubsan_epilogue(); ubsan_epilogue();
} }
void __ubsan_handle_add_overflow(struct overflow_data *data, void __ubsan_handle_add_overflow(void *data,
void *lhs, void *rhs) void *lhs, void *rhs)
{ {
...@@ -197,23 +197,23 @@ void __ubsan_handle_add_overflow(struct overflow_data *data, ...@@ -197,23 +197,23 @@ void __ubsan_handle_add_overflow(struct overflow_data *data,
} }
EXPORT_SYMBOL(__ubsan_handle_add_overflow); EXPORT_SYMBOL(__ubsan_handle_add_overflow);
void __ubsan_handle_sub_overflow(struct overflow_data *data, void __ubsan_handle_sub_overflow(void *data,
void *lhs, void *rhs) void *lhs, void *rhs)
{ {
handle_overflow(data, lhs, rhs, '-'); handle_overflow(data, lhs, rhs, '-');
} }
EXPORT_SYMBOL(__ubsan_handle_sub_overflow); EXPORT_SYMBOL(__ubsan_handle_sub_overflow);
void __ubsan_handle_mul_overflow(struct overflow_data *data, void __ubsan_handle_mul_overflow(void *data,
void *lhs, void *rhs) void *lhs, void *rhs)
{ {
handle_overflow(data, lhs, rhs, '*'); handle_overflow(data, lhs, rhs, '*');
} }
EXPORT_SYMBOL(__ubsan_handle_mul_overflow); EXPORT_SYMBOL(__ubsan_handle_mul_overflow);
void __ubsan_handle_negate_overflow(struct overflow_data *data, void __ubsan_handle_negate_overflow(void *_data, void *old_val)
void *old_val)
{ {
struct overflow_data *data = _data;
char old_val_str[VALUE_LENGTH]; char old_val_str[VALUE_LENGTH];
if (suppress_report(&data->location)) if (suppress_report(&data->location))
...@@ -231,9 +231,9 @@ void __ubsan_handle_negate_overflow(struct overflow_data *data, ...@@ -231,9 +231,9 @@ void __ubsan_handle_negate_overflow(struct overflow_data *data,
EXPORT_SYMBOL(__ubsan_handle_negate_overflow); EXPORT_SYMBOL(__ubsan_handle_negate_overflow);
void __ubsan_handle_divrem_overflow(struct overflow_data *data, void __ubsan_handle_divrem_overflow(void *_data, void *lhs, void *rhs)
void *lhs, void *rhs)
{ {
struct overflow_data *data = _data;
char rhs_val_str[VALUE_LENGTH]; char rhs_val_str[VALUE_LENGTH];
if (suppress_report(&data->location)) if (suppress_report(&data->location))
...@@ -326,10 +326,9 @@ void __ubsan_handle_type_mismatch(struct type_mismatch_data *data, ...@@ -326,10 +326,9 @@ void __ubsan_handle_type_mismatch(struct type_mismatch_data *data,
} }
EXPORT_SYMBOL(__ubsan_handle_type_mismatch); EXPORT_SYMBOL(__ubsan_handle_type_mismatch);
void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data_v1 *data, void __ubsan_handle_type_mismatch_v1(void *_data, void *ptr)
void *ptr)
{ {
struct type_mismatch_data_v1 *data = _data;
struct type_mismatch_data_common common_data = { struct type_mismatch_data_common common_data = {
.location = &data->location, .location = &data->location,
.type = data->type, .type = data->type,
...@@ -341,8 +340,9 @@ void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data_v1 *data, ...@@ -341,8 +340,9 @@ void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data_v1 *data,
} }
EXPORT_SYMBOL(__ubsan_handle_type_mismatch_v1); EXPORT_SYMBOL(__ubsan_handle_type_mismatch_v1);
void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, void *index) void __ubsan_handle_out_of_bounds(void *_data, void *index)
{ {
struct out_of_bounds_data *data = _data;
char index_str[VALUE_LENGTH]; char index_str[VALUE_LENGTH];
if (suppress_report(&data->location)) if (suppress_report(&data->location))
...@@ -357,9 +357,9 @@ void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, void *index) ...@@ -357,9 +357,9 @@ void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data, void *index)
} }
EXPORT_SYMBOL(__ubsan_handle_out_of_bounds); EXPORT_SYMBOL(__ubsan_handle_out_of_bounds);
void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, void __ubsan_handle_shift_out_of_bounds(void *_data, void *lhs, void *rhs)
void *lhs, void *rhs)
{ {
struct shift_out_of_bounds_data *data = _data;
struct type_descriptor *rhs_type = data->rhs_type; struct type_descriptor *rhs_type = data->rhs_type;
struct type_descriptor *lhs_type = data->lhs_type; struct type_descriptor *lhs_type = data->lhs_type;
char rhs_str[VALUE_LENGTH]; char rhs_str[VALUE_LENGTH];
...@@ -399,8 +399,9 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data, ...@@ -399,8 +399,9 @@ void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds); EXPORT_SYMBOL(__ubsan_handle_shift_out_of_bounds);
void __ubsan_handle_builtin_unreachable(struct unreachable_data *data) void __ubsan_handle_builtin_unreachable(void *_data)
{ {
struct unreachable_data *data = _data;
ubsan_prologue(&data->location, "unreachable"); ubsan_prologue(&data->location, "unreachable");
pr_err("calling __builtin_unreachable()\n"); pr_err("calling __builtin_unreachable()\n");
ubsan_epilogue(); ubsan_epilogue();
...@@ -408,9 +409,9 @@ void __ubsan_handle_builtin_unreachable(struct unreachable_data *data) ...@@ -408,9 +409,9 @@ void __ubsan_handle_builtin_unreachable(struct unreachable_data *data)
} }
EXPORT_SYMBOL(__ubsan_handle_builtin_unreachable); EXPORT_SYMBOL(__ubsan_handle_builtin_unreachable);
void __ubsan_handle_load_invalid_value(struct invalid_value_data *data, void __ubsan_handle_load_invalid_value(void *_data, void *val)
void *val)
{ {
struct invalid_value_data *data = _data;
char val_str[VALUE_LENGTH]; char val_str[VALUE_LENGTH];
if (suppress_report(&data->location)) if (suppress_report(&data->location))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment