فهرست منبع

Kernel: KUBSAN implementation of returns-nonnull-attribute

This didn't find anything in the current source.
Brian Gianforcaro 4 سال پیش
والد
کامیت
c95d48c8d6
3فایلهای تغییر یافته به همراه12 افزوده شده و 1 حذف شده
  1. 1 1
      Kernel/CMakeLists.txt
  2. 7 0
      Kernel/UBSanitizer.cpp
  3. 4 0
      Kernel/UBSanitizer.h

+ 1 - 1
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")

+ 7 - 0
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*)
 {

+ 4 - 0
Kernel/UBSanitizer.h

@@ -74,6 +74,10 @@ struct NonnullArgData {
     int argument_index;
 };
 
+struct NonnullReturnData {
+    SourceLocation attribute_location;
+};
+
 struct OverflowData {
     SourceLocation location;
     const TypeDescriptor& type;