FaceID操作出现踩内存问题分析

现象:手机进行Face ID 的基本操作后,查看手机版本,手机静置于桌上,过会,手机卡住,重启

[ 2715.426638] (1)[16556:lsof]Unable to handle kernel NULL pointer dereference at virtual address 00000008

空指针问题
 对应出问题时的源码位置:
 fs/proc/task_mmu.c:330

330         dev = inode->i_sb->s_dev;


通过反汇编可得 R2是由R3得到,R3是由R6的得到。
0xc0281f78 <+0>: mov r12, sp
 0xc0281f7c <+4>: push 
{r4, r5, r6, r7, r8, r9, r10, r11, r12, lr, pc} 
0xc0281f80 <+8>: sub r11, r12, #4
 0xc0281f84 <+12>: sub sp, sp, #52 ; 0x34
 0xc0281f88 <+16>: ldr r6, r1, #80 ; 0x50
 0xc0281f8c <+20>: ldr r3, r0, #80 ; 0x50
 0xc0281f90 <+24>: mov r8, r2
 0xc0281f94 <+28>: cmp r6, #0
 0xc0281f98 <+32>: mov r4, r1
 0xc0281f9c <+36>: ldr r7, r1, #32
 0xc0281fa0 <+40>: mov r5, r0
 0xc0281fa4 <+44>: str r3, r11, #-48 ; 0xffffffd0
 0xc0281fa8 <+48>: moveq r2, r6
 0xc0281fac <+52>: ldrne r3, r6, #16
 0xc0281fb0 <+56>: moveq r12, r6
 0xc0281fb4 <+60>: ldr r0, r1, #40 ; 0x28
 0xc0281fb8 <+64>: moveq lr, r6
 0xc0281fbc <+68>: moveq r1, r6
 0xc0281fc0 <+72>: ldr r9, r5, #12
 0xc0281fc4 <+76>: ldrne r2, r3, #28
 0xc0281fc8 <+80>: ldrne lr, r3, #40 ; 0x28
 0xc0281fcc <+84>: add r9, r9, #48 ; 0x30
 --Type <return> to continue, or q <return> to quit--
0xc0281fd0 <+88>: ldr r3, [r4]
 => 0xc0281fd4 <+92>: ldrne r1, r2, #8

通过检查汇编确认R6为源码中的file = vma->vm_file;
 0xc0281fac <+52>: ldrne r3, r6, #16
 r3 = [r6+0x10]
 通过测算当时 r3 = 0xdc5a84bf
 (gdb) p 
{struct file} 
0xda1173c0
 $3 = {f_u = {fu_llist = 
{next = 0xdc5c83bf} 
, fu_rcuhead = {next = 0xdc5c83bf,
 func = 0xdc5c82bf}}, f_path = 
{mnt = 0xdc5c83c1, dentry = 0xdc5c83c1} 
,
f_inode = 0xdc5a84bf, f_op = 0xdc5a83bf, f_lock = {{rlock = {raw_lock = {{

正好对应上f_inode.

(gdb) x 0xdc5a84bf
 0xdc5a84bf: Cannot access memory at address 0xdc5a84bf
 但这个地址不在dump中。

通过 计算可以得知 
问题点:
 => 0xc0281fd4 <+92>: ldrne r1, r2, #8

r2为 inode->i_sb 也就是这个值为空导致的。

此题是踩内存问题,复现难度比较大

FaceID SDK 是一种用于人脸识别的软件开发工具包,可以帮助开发者将人脸识别功能集成到他们的应用程序中。 首先,要使用FaceID SDK,开发者需要先在官方网站上注册并获取授权。注册完毕后,开发者可以下载并安装SDK,并将其导入到他们的开发环境中。 接下来,在应用程序中集成FaceID SDK,开发者需要根据提供的文档和示例代码来实现相应的功能。一般来说,需要先初始化SDK,并获取访问API的密钥。随后,开发者可以使用SDK提供的函数来进行人脸检测、特征提取和比对等操作。 在集成过程中,开发者需要注意保护用户的隐私数据。一般来说,FaceID SDK 不会保存用户的人脸数据,但在应用程序中使用时,开发者需要合理地处理用户的人脸信息,确保不被未经授权的第三方获取。 此外,为了提高识别的准确性,开发者可以根据实际需要进行优化。例如,使用高质量的摄像头来捕捉人脸图像,确保图像清晰度;调整相机角度和光照条件,以提高识别效果。 最后,在集成完成后,开发者可以对整个系统进行测试和调试,确保人脸识别功能的稳定性和准确性。在应用程序正式上线之前,可以邀请一些用户进行试用,并收集反馈意见,以进一步提升用户体验。 总之,FaceID SDK 的集成过程需要注册、下载、初始化、编写代码等一系列步骤,开发者需要按照文档和示例进行操作,并保护用户隐私。集成完成后,通过测试和反馈意见,可以不断优化和改进人脸识别功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值