mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-07 00:19:27 +00:00
Kernel: Implement some more KUBSAN checks :^)
This patch enables the following -fsanitize sub-options: * bounds * bounds-strict * integer-divide-by-zero * return * shift * shift-base * shift-exponent
This commit is contained in:
parent
547130584c
commit
fad0332898
|
@ -270,7 +270,7 @@ set(SOURCES
|
|||
${C_SOURCES}
|
||||
)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=nonnull-attribute,bool,vla-bound,signed-integer-overflow")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=nonnull-attribute,bool,vla-bound,signed-integer-overflow,shift,shift-exponent,shift-base,integer-divide-by-zero,return,bounds,bounds-strict")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unknown-warning-option -DKERNEL")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pie -fPIE -fno-rtti -ffreestanding -fbuiltin")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-80387 -mno-mmx -mno-sse -mno-sse2")
|
||||
|
|
|
@ -87,4 +87,25 @@ void __ubsan_handle_mul_overflow(const OverflowData& data, void*, void*)
|
|||
dbgln("KUBSAN: multiplication overflow, {} ({}-bit)", data.type.name(), data.type.bit_width());
|
||||
print_location(data.location);
|
||||
}
|
||||
|
||||
void __ubsan_handle_shift_out_of_bounds(const ShiftOutOfBoundsData&, void* lhs, void* rhs);
|
||||
void __ubsan_handle_shift_out_of_bounds(const ShiftOutOfBoundsData& data, void*, void*)
|
||||
{
|
||||
dbgln("KUBSAN: shift out of bounds, {} ({}-bit) shifted by {} ({}-bit)", data.lhs_type.name(), data.lhs_type.bit_width(), data.rhs_type.name(), data.rhs_type.bit_width());
|
||||
print_location(data.location);
|
||||
}
|
||||
|
||||
void __ubsan_handle_divrem_overflow(const OverflowData&, void* lhs, void* rhs);
|
||||
void __ubsan_handle_divrem_overflow(const OverflowData& data, void*, void*)
|
||||
{
|
||||
dbgln("KUBSAN: divrem overlow, {} ({}-bit)", data.type.name(), data.type.bit_width());
|
||||
print_location(data.location);
|
||||
}
|
||||
|
||||
void __ubsan_handle_out_of_bounds(const OutOfBoundsData&, void*);
|
||||
void __ubsan_handle_out_of_bounds(const OutOfBoundsData& data, void*)
|
||||
{
|
||||
dbgln("KUBSAN: out of bounds access into array of {} ({}-bit), index type {} ({}-bit)", data.array_type.name(), data.array_type.bit_width(), data.index_type.name(), data.index_type.bit_width());
|
||||
print_location(data.location);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -84,4 +84,16 @@ struct VLABoundData {
|
|||
const TypeDescriptor& type;
|
||||
};
|
||||
|
||||
struct ShiftOutOfBoundsData {
|
||||
SourceLocation location;
|
||||
const TypeDescriptor& lhs_type;
|
||||
const TypeDescriptor& rhs_type;
|
||||
};
|
||||
|
||||
struct OutOfBoundsData {
|
||||
SourceLocation location;
|
||||
const TypeDescriptor& array_type;
|
||||
const TypeDescriptor& index_type;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue