Skip to content

Commit

Permalink
core: fix undefined references to ubsan functions
Browse files Browse the repository at this point in the history
Add UBSan handlers for `__ubsan_handle_type_mismatch_v1` and `__ubsan_handle_pointer_overflow` to remove the undefined references error.

Signed-off-by: Abhishek Revadekar <abhishek.rvdkr@yahoo.com>
  • Loading branch information
Abhishek-612 committed May 3, 2024
1 parent 95b8c53 commit d611b21
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
8 changes: 8 additions & 0 deletions core/arch/arm/kernel/boot.c
Original file line number Diff line number Diff line change
Expand Up @@ -1508,6 +1508,14 @@ unsigned long __weak get_aslr_seed(void)
goto err;
}

/*
Checks if seed is 8-byte aligned, and performs alignment if needed.
If removed while CFG_CORE_SANITIZE_UNDEFINED is set, it may cause a ubsan panic
*/
if (((uint64_t)seed & 7) != 0) {
seed = (uint64_t *)((unsigned long)seed + (8 - ((unsigned long)seed & 7)));
}

return fdt64_to_cpu(*seed);

err:
Expand Down
21 changes: 21 additions & 0 deletions core/kernel/ubsan.c
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,8 @@ struct nonnull_arg_data {
*/
void __ubsan_handle_type_mismatch(struct type_mismatch_data *data,
unsigned long ptr);
void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data *data,
unsigned long ptr);
void __ubsan_handle_add_overflow(struct overflow_data *data,
unsigned long lhs, unsigned long rhs);
void __ubsan_handle_sub_overflow(struct overflow_data *data,
Expand All @@ -80,6 +82,8 @@ void __ubsan_handle_negate_overflow(struct overflow_data *data,
unsigned long old_val);
void __ubsan_handle_divrem_overflow(struct overflow_data *data,
unsigned long lhs, unsigned long rhs);
void __ubsan_handle_pointer_overflow(struct overflow_data *data,
unsigned long old_val);
void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
unsigned long lhs, unsigned long rhs);
void __ubsan_handle_out_of_bounds(struct out_of_bounds_data *data,
Expand Down Expand Up @@ -119,6 +123,14 @@ void __ubsan_handle_type_mismatch(struct type_mismatch_data *data,
panic();
}

void __ubsan_handle_type_mismatch_v1(struct type_mismatch_data *data,
unsigned long ptr __unused)
{
print_loc(__func__, &data->loc);
if (ubsan_panic)
panic();
}

void __ubsan_handle_add_overflow(struct overflow_data *data,
unsigned long lhs __unused,
unsigned long rhs __unused)
Expand Down Expand Up @@ -163,6 +175,15 @@ void __ubsan_handle_divrem_overflow(struct overflow_data *data,
panic();
}

void __ubsan_handle_pointer_overflow(struct overflow_data *data,
unsigned long lhs __unused,
unsigned long rhs __unused)
{
print_loc(__func__, &data->loc);
if (ubsan_panic)
panic();
}

void __ubsan_handle_shift_out_of_bounds(struct shift_out_of_bounds_data *data,
unsigned long lhs __unused,
unsigned long rhs __unused)
Expand Down

0 comments on commit d611b21

Please sign in to comment.