diff --git a/Kernel/CMakeLists.txt b/Kernel/CMakeLists.txt index fb49685f11..23367237f6 100644 --- a/Kernel/CMakeLists.txt +++ b/Kernel/CMakeLists.txt @@ -270,7 +270,7 @@ set(SOURCES ${C_SOURCES} ) -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,object-size,enum,vptr") +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=nonnull-attribute,returns-nonnull-attribute,bool,vla-bound,signed-integer-overflow,shift,shift-exponent,shift-base,integer-divide-by-zero,return,bounds,bounds-strict,object-size,enum,vptr") 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") diff --git a/Kernel/UBSanitizer.cpp b/Kernel/UBSanitizer.cpp index 073abc6eb4..f3f159c371 100644 --- a/Kernel/UBSanitizer.cpp +++ b/Kernel/UBSanitizer.cpp @@ -53,6 +53,13 @@ void __ubsan_handle_nonnull_arg(const NonnullArgData& data) print_location(data.location); } +void __ubsan_handle_nonnull_return_v1(const NonnullReturnData&, const SourceLocation&); +void __ubsan_handle_nonnull_return_v1(const NonnullReturnData&, const SourceLocation& location) +{ + dbgln("KUBSAN: null pointer return from function declared to never return null"); + print_location(location); +} + void __ubsan_handle_vla_bound_not_positive(const VLABoundData&, void*); void __ubsan_handle_vla_bound_not_positive(const VLABoundData& data, void*) { diff --git a/Kernel/UBSanitizer.h b/Kernel/UBSanitizer.h index 23889529f0..6553503b94 100644 --- a/Kernel/UBSanitizer.h +++ b/Kernel/UBSanitizer.h @@ -74,6 +74,10 @@ struct NonnullArgData { int argument_index; }; +struct NonnullReturnData { + SourceLocation attribute_location; +}; + struct OverflowData { SourceLocation location; const TypeDescriptor& type;