peter.smith added a comment.

Should `HANDLER(__ubsan_handle_function_type_mismatch,"function")` be added to 
ubsan_minimal_runtime if this is supported in the minimal runtime?



================
Comment at: clang/lib/CodeGen/CGExpr.cpp:5382
+          getPointerAlign());
       llvm::Value *CalleeRTTIMatch =
+          Builder.CreateICmpEQ(CalleeTypeHash, TypeHash);
----------------
Would CalleeTypeHashMatch be a better name?


================
Comment at: clang/lib/CodeGen/CodeGenFunction.h:120
   SANITIZER_CHECK(FloatCastOverflow, float_cast_overflow, 0)                   
\
-  SANITIZER_CHECK(FunctionTypeMismatch, function_type_mismatch, 1)             
\
+  SANITIZER_CHECK(FunctionTypeMismatch, function_type_mismatch, 0)             
\
   SANITIZER_CHECK(ImplicitConversion, implicit_conversion, 0)                  
\
----------------
Presumably the signature is different to the original v0 shouldn't it be 2; or 
is it effectively so long since the last one that we can reuse the original 
without fear?


================
Comment at: clang/test/CodeGenCXX/catch-undef-behavior.cpp:408
 
   // RTTI pointer check
+  // CHECK: [[CalleeTypeHashPtr:%.+]] = getelementptr <{ i32, i32 }>, <{ i32, 
i32 }>* [[PTR]], i32 -1, i32 1
----------------
CalleeTypeHash check?


================
Comment at: llvm/test/CodeGen/AArch64/patchable-function-entry-bti.ll:92
 ; CHECK-NEXT: .Ltmp{{.*}}:
 ; CHECK-NEXT:   nop
 ; CHECK-NEXT:   .word   3238382334  // 0xc105cafe
----------------
Assuming the test is the equivalent of `-fpatchable-function-entry=1,1` I think 
this is the wrong place for the nop, I think it needs to be after the signature 
and the loads adjusted. For example with -fsanitize=kcfi 
-fpatchable-function-entries=1,1
```
typedef int Fptr(void);

int function(void) {
  return 0;
}

int call(Fptr* fp) {
  return fp();
}
```
Results in code like:
```
        .word   1670944012                      // @call
                                        // 0x6398950c
.Ltmp1:
        nop
call:
.Lfunc_begin1:
        .cfi_startproc
// %bb.0:                               // %entry
        ldur    w16, [x0, #-8]
        movk    w17, #50598
        movk    w17, #14001, lsl #16
        cmp     w16, w17
        b.eq    .Ltmp2
        brk     #0x8220
.Ltmp2:
        br      x0
.Lfunc_end1:
```
Note the NOP is after the signature, with the `ldur` having an offset of -8 and 
not the usual -4. I think you would need to make sure the signature is a branch 
instruction for each target for this scheme to work.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D148785/new/

https://reviews.llvm.org/D148785

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to