Serenity Operating System
at master 144 lines 5.0 kB view raw
1/* 2 * Copyright (c) 2021, Andreas Kling <kling@serenityos.org> 3 * Copyright (c) 2020, Liav A. <liavalb@hotmail.co.il> 4 * 5 * SPDX-License-Identifier: BSD-2-Clause 6 */ 7 8#include <AK/UBSanitizer.h> 9 10using namespace AK::UBSanitizer; 11 12Atomic<bool> AK::UBSanitizer::g_ubsan_is_deadly { true }; 13 14extern "C" { 15 16static void print_location(SourceLocation const&) 17{ 18#if ARCH(X86_64) 19 asm volatile("cli; hlt"); 20#else 21 for (;;) { } 22#endif 23} 24 25void __ubsan_handle_load_invalid_value(InvalidValueData const&, ValueHandle) __attribute__((used)); 26void __ubsan_handle_load_invalid_value(InvalidValueData const& data, ValueHandle) 27{ 28 print_location(data.location); 29} 30 31void __ubsan_handle_nonnull_arg(NonnullArgData const&) __attribute__((used)); 32void __ubsan_handle_nonnull_arg(NonnullArgData const& data) 33{ 34 print_location(data.location); 35} 36 37void __ubsan_handle_nullability_arg(NonnullArgData const&) __attribute__((used)); 38void __ubsan_handle_nullability_arg(NonnullArgData const& data) 39{ 40 print_location(data.location); 41} 42 43void __ubsan_handle_nonnull_return_v1(NonnullReturnData const&, SourceLocation const&) __attribute__((used)); 44void __ubsan_handle_nonnull_return_v1(NonnullReturnData const&, SourceLocation const& location) 45{ 46 print_location(location); 47} 48 49void __ubsan_handle_nullability_return_v1(NonnullReturnData const& data, SourceLocation const& location) __attribute__((used)); 50void __ubsan_handle_nullability_return_v1(NonnullReturnData const&, SourceLocation const& location) 51{ 52 print_location(location); 53} 54 55void __ubsan_handle_vla_bound_not_positive(VLABoundData const&, ValueHandle) __attribute__((used)); 56void __ubsan_handle_vla_bound_not_positive(VLABoundData const& data, ValueHandle) 57{ 58 print_location(data.location); 59} 60 61void __ubsan_handle_add_overflow(OverflowData const&, ValueHandle lhs, ValueHandle rhs) __attribute__((used)); 62void __ubsan_handle_add_overflow(OverflowData const& data, ValueHandle, ValueHandle) 63{ 64 print_location(data.location); 65} 66 67void __ubsan_handle_sub_overflow(OverflowData const&, ValueHandle lhs, ValueHandle rhs) __attribute__((used)); 68void __ubsan_handle_sub_overflow(OverflowData const& data, ValueHandle, ValueHandle) 69{ 70 print_location(data.location); 71} 72 73void __ubsan_handle_negate_overflow(OverflowData const&, ValueHandle) __attribute__((used)); 74void __ubsan_handle_negate_overflow(OverflowData const& data, ValueHandle) 75{ 76 print_location(data.location); 77} 78 79void __ubsan_handle_mul_overflow(OverflowData const&, ValueHandle lhs, ValueHandle rhs) __attribute__((used)); 80void __ubsan_handle_mul_overflow(OverflowData const& data, ValueHandle, ValueHandle) 81{ 82 print_location(data.location); 83} 84 85void __ubsan_handle_shift_out_of_bounds(ShiftOutOfBoundsData const&, ValueHandle lhs, ValueHandle rhs) __attribute__((used)); 86void __ubsan_handle_shift_out_of_bounds(ShiftOutOfBoundsData const& data, ValueHandle, ValueHandle) 87{ 88 print_location(data.location); 89} 90 91void __ubsan_handle_divrem_overflow(OverflowData const&, ValueHandle lhs, ValueHandle rhs) __attribute__((used)); 92void __ubsan_handle_divrem_overflow(OverflowData const& data, ValueHandle, ValueHandle) 93{ 94 print_location(data.location); 95} 96 97void __ubsan_handle_out_of_bounds(OutOfBoundsData const&, ValueHandle) __attribute__((used)); 98void __ubsan_handle_out_of_bounds(OutOfBoundsData const& data, ValueHandle) 99{ 100 print_location(data.location); 101} 102 103void __ubsan_handle_type_mismatch_v1(TypeMismatchData const&, ValueHandle) __attribute__((used)); 104void __ubsan_handle_type_mismatch_v1(TypeMismatchData const& data, ValueHandle) 105{ 106 print_location(data.location); 107} 108 109void __ubsan_handle_alignment_assumption(AlignmentAssumptionData const&, ValueHandle, ValueHandle, ValueHandle) __attribute__((used)); 110void __ubsan_handle_alignment_assumption(AlignmentAssumptionData const& data, ValueHandle, ValueHandle, ValueHandle) 111{ 112 print_location(data.location); 113} 114 115void __ubsan_handle_builtin_unreachable(UnreachableData const&) __attribute__((used)); 116void __ubsan_handle_builtin_unreachable(UnreachableData const& data) 117{ 118 print_location(data.location); 119} 120 121void __ubsan_handle_missing_return(UnreachableData const&) __attribute__((used)); 122void __ubsan_handle_missing_return(UnreachableData const& data) 123{ 124 print_location(data.location); 125} 126 127void __ubsan_handle_implicit_conversion(ImplicitConversionData const&, ValueHandle, ValueHandle) __attribute__((used)); 128void __ubsan_handle_implicit_conversion(ImplicitConversionData const& data, ValueHandle, ValueHandle) 129{ 130 print_location(data.location); 131} 132 133void __ubsan_handle_invalid_builtin(const InvalidBuiltinData) __attribute__((used)); 134void __ubsan_handle_invalid_builtin(const InvalidBuiltinData data) 135{ 136 print_location(data.location); 137} 138 139void __ubsan_handle_pointer_overflow(PointerOverflowData const&, ValueHandle, ValueHandle) __attribute__((used)); 140void __ubsan_handle_pointer_overflow(PointerOverflowData const& data, ValueHandle, ValueHandle) 141{ 142 print_location(data.location); 143} 144}