解读OBJ_KERNEL_HANDLE

本文深入解析了在创建文件对象时使用宏InitializeObjectAttributes初始化OBJECT_ATTRIBUTES结构体时,设置属性中OBJ_KERNEL_HANDLE的意义。解释了不包含此掩码时,句柄在当前上下文所属进程句柄表中的行为;以及包含此掩码时,句柄在系统上下文句柄表中的特性,强调了其对于跨进程访问的重要性。

我们在创建文件对象时,会使用宏InitializeObjectAttributes初始化OBJECT_ATTRIBUTES结构体,InitializeObjectAttributes声明如下:

VOID 
  InitializeObjectAttributes(
    OUT POBJECT_ATTRIBUTES  InitializedAttributes,
    IN PUNICODE_STRING  ObjectName,
    IN ULONG  Attributes,
    IN HANDLE  RootDirectory,
    IN PSECURITY_DESCRIPTOR  SecurityDescriptor
    );


 

其中属性Attributes可以设置OBJ_KERNEL_HANDLE,这个常量值代表什么意思呢?

若属性中不包括这个掩码,则创建的句柄属于当前上下文所属进程的句柄表中,若包括此掩码,创建的句柄属于系统上下文句柄表中(也可以叫全局句柄表吧),且不可被用户模式程序访问。假设对象属性不包含OBJ_KERNEL_HANDLE,进程A访问属于进程B的句柄,估计蓝屏(没测过),至少不会有正确的结果,所以一般情况下的设置为OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE。

 

 

== 异常报告v2.3(仅供参考) == 报告解读: MediaTek On-Line> Quick Start> NE/KE分析报告解读> KE分析报告 详细描述: 看门狗复位, 其中CPU3没有喂狗, 请检查对应调用栈是否存在死锁或长时间关中断 参考信息: MediaTek On-Line> Quick Start> 深入分析看门狗框架 平台 : MT6769 (88720AAD,07C18490) 版本 : alps-vf-mp-s0.mp1unknown-V15.215.V5.10/userdebug build 异常时间: 4437.885178秒, Wed Feb 28 10:36:36 WAT 2024 == 平台信息 == -- CPU 0 1 2 [3] 4 5 6 7 -- L opp: 0( 931mV, 1800MHz, 0C) 4433.735593s B opp: 0( 987mV, 2000MHz, 0C) 4437.881161s CCI opp: 3( 831mV, 1014MHz, 0C) 4437.881161s vproc: 931mV,987mV, vsram: 1031mV,1087mV PTP ver: 0 -- LPDDR4(8G)|eMMC -- vcore dvfs opp: [-140472788.122015]12(700mV, 1534MHz) 已热重启: 4次 -- Low Power -- SPM last pc: 0xa8e == CPU信息 == 无喂狗CPU信息: CPU3: (null), pid: 0, 中断: 关 本地调用栈: vmlinux irqtime_account_irq() + 48 vmlinux __do_softirq() + 176 vmlinux run_ksoftirqd() + 48 vmlinux smpboot_thread_fn() + 380 vmlinux kthread() + 332 vmlinux ret_from_fork() + 16 == 栈结束 == 其他CPU信息: CPU0: (null), pid: 0 本地调用栈: aee_hangdet.ko 0xFFFFFFEB436EC370() aee_hangdet.ko 0xFFFFFFEB436EC09C() vmlinux call_timer_fn() + 84 vmlinux expire_timers() + 220 vmlinux __run_timers() + 492 vmlinux run_timer_softirq() + 36 vmlinux __do_softirq() + 356 vmlinux __irq_exit_rcu() + 260 vmlinux __handle_domain_irq(参数3=1) + 276 vmlinux gic_handle_irq.34851() + 104 vmlinux el1_irq() + 224 == 栈结束 == CPU1: (null), pid: 0, EL0t 本地调用栈: ...... 0x00000078F358B7A0() == 栈结束 == CPU2: (null), pid: 0, 中断: 关 本地调用栈: mcdi.ko 0xFFFFFFEB45220B4C() mcdi.ko 0xFFFFFFEB45228A90() vmlinux cpuidle_enter_state(参数3=0x0000000008113F90) + 572 vmlinux do_idle() + 772 vmlinux cpu_startup_entry() + 128 vmlinux secondary_start_kernel() + 604 == 栈结束 == CPU4: (null), pid: 0, 中断: 关 本地调用栈: mcdi.ko 0xFFFFFFEB45220B4C() mcdi.ko 0xFFFFFFEB45228A90() vmlinux cpuidle_enter_state(参数3=0x0000000008123F90) + 572 vmlinux do_idle() + 772 vmlinux cpu_startup_entry() + 128 vmlinux secondary_start_kernel() + 604 == 栈结束 == CPU5: (null), pid: 0, 中断: 关 本地调用栈: mcdi.ko 0xFFFFFFEB45220B4C() mcdi.ko 0xFFFFFFEB45228A90() vmlinux cpuidle_enter_state(参数3=0x000000000812BF90) + 572 vmlinux do_idle() + 772 vmlinux cpu_startup_entry() + 128 vmlinux secondary_start_kernel() + 604 == 栈结束 == CPU6: (null), pid: 0 本地调用栈: vmlinux __mod_memcg_lruvec_state() + 96 vmlinux __page_add_new_anon_rmap() + 556 vmlinux mfill_atomic_install_pte() + 472 vmlinux mcopy_atomic_pte() + 352 vmlinux mcopy_atomic() + 480 vmlinux userfaultfd_copy() + 404 vmlinux userfaultfd_ioctl() + 348 vmlinux __arm64_sys_ioctl() + 368 vmlinux el0_svc_common() + 208 vmlinux el0_svc() + 36 vmlinux el0_sync_handler(参数1=0xFFFFFFC01E393FE0) + 136 vmlinux el0_sync() + 436 == 栈结束 == CPU7: (null), pid: 0, 中断: 关 本地调用栈: mcdi.ko 0xFFFFFFEB45220B4C() mcdi.ko 0xFFFFFFEB45228A90() vmlinux cpuidle_enter_state(参数3=0x000000000813BF90) + 572 vmlinux do_idle() + 772 vmlinux cpu_startup_entry() + 128 vmlinux secondary_start_kernel() + 604 == 栈结束 == == 日志信息 == kernel log: [ 4414.489510] [C301344] mix1:0: Call trace: [ 4414.500103] [C301344] mix1:0: Call trace: [ 4435.530431] [C300033] ksoftirqd/3: Call trace: [ 4437.729379] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732502] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732727] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732763] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732792] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732814] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732843] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732871] [ C623] irq/154-mtk-tpd: Call trace: [ 4437.732894] [ C623] irq/154-mtk-tpd: Call trace: 分析KE还需以下文件, 请提供out/target/product/$proj/obj/KERNEL_OBJ目录下相应的文件(必须同一次编译生成, 详情请查看MOL上的'[FAQ06985]KE发生后如何判断vmlinux和log是否匹配'): mcdi.ko mtk_iommu.ko iommu_debug.ko aee_hangdet.ko vmlinux 分析报告如下,怎么获取这个log的各种信息
04-02
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值