android CFI

CFI

cfi_slowpath_handler/__cfi_slowpath

kernel/cfi.c

复制代码
/* Compiler-defined handler names */
#ifdef CONFIG_CFI_PERMISSIVE
#define cfi_failure_handler    __ubsan_handle_cfi_check_fail
#define cfi_slowpath_handler    __cfi_slowpath_diag
#else /* enforcing */
#define cfi_failure_handler    __ubsan_handle_cfi_check_fail_abort
#define cfi_slowpath_handler    __cfi_slowpath   //替换为__cfi_slowpath
#endif /* CONFIG_CFI_PERMISSIVE */
复制代码

 

复制代码
static inline cfi_check_fn find_cfi_check(void *ptr)
{
    bool rcu;
    cfi_check_fn f;
    rcu = rcu_is_watching();
    if (!rcu)
        rcu_nmi_enter();
#ifdef CONFIG_CFI_CLANG_SHADOW
    /* Look up the __cfi_check function to use */
    rcu_read_lock_sched();
    f = ptr_to_check_fn(rcu_dereference_sched(cfi_shadow),
                (unsigned long)ptr);
    rcu_read_unlock_sched();
    if (f)
        goto out;
    /*
     * Fall back to find_module_cfi_check, which works also for a larger
     * module address space, but is slower.
     */
#endif /* CONFIG_CFI_CLANG_SHADOW */
    f = find_module_cfi_check(ptr);
out:
    if (!rcu)
        rcu_nmi_exit();
    return f;
}
复制代码

 

void cfi_slowpath_handler(uint64_t id, void *ptr, void *diag)
{
    cfi_check_fn check = find_cfi_check(ptr);
    if (likely(check))
        check(id, ptr, diag);
    else /* Don't allow unchecked modules */
        handle_cfi_failure(ptr);
}

 

posted @   aspirs  阅读(1023)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
历史上的今天:
2021-09-12 linux kernel input event处理流程
点击右上角即可分享
微信分享提示