• Vlad Tsyrklevich's avatar
    [CFI] Use ProtectedMemory in CertVerifyProcNSS · d0de1771
    Vlad Tsyrklevich authored
    Because CertVerifyProcNSS dynamically resolves a pointer to the function
    CERT_CacheOCSPResponseFromSideChannel(), Control Flow Integrity [1]
    indirect call (cfi-icall) checking can not verify that it is the
    intended target for that function pointer call site.
    
    Since we can not use cfi-icall to check the function pointer, instead we
    place the pointer in ProtectedMemory, a wrapper for keeping variables in
    read-only memory except for when they are initialized. After setting the
    pointer in protected memory we can use the UnsanitizedCfiCall wrapper to
    disable cfi-icall checking when calling it since we know it can not be
    tampered with.
    
    [1] https://www.chromium.org/developers/testing/control-flow-integrity
    
    Bug: 771365
    Cq-Include-Trybots: master.tryserver.chromium.android:android_cronet_tester;master.tryserver.chromium.mac:ios-simulator-cronet
    Change-Id: I5d65b3591681f3daa917b6516eec1e5e47513d12
    Reviewed-on: https://chromium-review.googlesource.com/765098Reviewed-by: default avatarPeter Collingbourne <pcc@chromium.org>
    Reviewed-by: default avatarEric Roman <eroman@chromium.org>
    Commit-Queue: Peter Collingbourne <pcc@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#517169}
    d0de1771
cert_verify_proc_nss.cc 37.3 KB