高通DSP驱动——意外挖掘出的exploit
作者:Seth Jenkins,Google Project Zero
这篇博客文章提供了对Google威胁分析小组(TAG)从国际特赦组织(Amnesty International)提供给我们的漏洞利用(exploit)技术产物的技术分析。国际特赦组织关于这些漏洞利用的报告可在此处查看。感谢国际特赦组织和Google威胁分析小组提供这些技术产物并合作进行后续的技术分析!
引言
今年早些时候,Google的TAG收到了一些由野外(In-the-Wild,ITW)漏洞利用生成的内核恐慌(kernel panic)日志。这些日志引发了一场漏洞搜寻,在2.5个月内导致在一个高通(Qualcomm)驱动程序中发现了6个漏洞,其中包括一个被TAG报告为ITW的问题。这篇博客文章涵盖了原始技术产物的细节、每个发现的漏洞,以及从日志中推测出的ITW漏洞利用策略。
技术产物
通常,在成功逆向工程一个ITW漏洞利用时,Project Zero/TAG能够访问漏洞利用样本本身,这使得确定利用了哪个漏洞主要是一个时间和精力的问题。然而,在这个特定案例中,我们收到了几个内核恐慌日志,但不幸的是没有漏洞利用样本。这意味着我们无法直接复现崩溃或逆向工程出被利用的漏洞是什么。
仅凭崩溃日志而没有漏洞利用本身,准确确定漏洞利用使用了哪个漏洞的难度范围从高度可能到不可能。我决定尝试一下,看看能发现什么。在我们收到的6次恐慌中,有4次恐慌尤其包含了可能有用的信息:
日志 1:
[ 47.223480] adsprpc: fastrpc_init_process: untrusted app trying to attach to privileged DSP PD
[ 47.254494] adsprpc: mapping not found to unmap fd 0xffffffff, va 0xffffffffffffffff, len 0xffffffff
[ 47.254512] adsprpc: falcon: fastrpc_internal_mmap: ERROR: adding user allocated pages is not supported
[ 47.261488] adsprpc: mapping not found to unmap fd 0xa, va 0x0, len 0x0
...
[ 50.865579] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
[ 50.865586] Mem abort info:
[ 50.865590] ESR = 0x96000006
[ 50.865593] Exception class = DABT (current EL), IL = 32 bits
[ 50.865597] SET = 0, FnV = 0
[ 50.865600] EA = 0, S1PTW = 0
[ 50.865603] Data abort info:
[ 50.865606] ISV = 0, ISS = 0x00000006
[ 50.865609] CM = 0, WnR = 0
[ 50.865614] user pgtable: 4k pages, 39-bit VAs, pgdp = 00000000f66703d3
[ 50.865617] [0000000000000000] pgd=0000000213147003, pud=0000000213147003, pmd=0000000000000000
[ 50.865624] Internal error: Oops: 96000006 [#1] PREEMPT SMP
...
[ 50.865649] Process falcon (pid: 8909, stack limit = 0x000000000e91af69)
[ 50.865654] CPU: 5 PID: 8909 Comm: falcon Tainted: G S W O 4.19.157-perf-g8779875ad741 #1
[ 50.865657] Hardware name: Qualcomm Technologies, Inc. xiaomi apollo (DT)
[ 50.865661] pstate: 00400005 (nzcv daif +PAN -UAO)
[ 50.865669] pc : __list_del_entry_valid+0x34/0xd0
[ 50.865672] lr : dma_buf_detach+0x34/0xa0
[ 50.865675] sp : ffffff802c7bb990
...
[ 50.865735] Call trace:
[ 50.865739] __list_del_entry_valid+0x34/0xd0
[ 50.865742] dma_buf_detach+0x34/0xa0
[ 50.865746] fastrpc_mmap_free+0x3e8/0x4d0
[ 50.865749] fastrpc_file_free+0x1a8/0x2e0
[ 50.865753] fastrpc_device_release+0x50/0x68
[ 50.865757] __fput+0xb8/0x1b0
[ 50.865762] ____fput+0xc/0x18
[ 50.865764] task_work_run+0x8c/0xb0
[ 50.865767] do_exit+0x3fc/0xa10
[ 50.865770] do_group_exit+0x8c/0xa0
[ 50.865773] get_signal+0x7c8/0x958
[ 50.865778] do_notify_resume+0x148/0x23e8
[ 50.865781] work_pending+0x8/0x10
[ 50.865785] Code: f9400669 91040042 eb02013f 54000260 (f9400122)
[ 50.865789] ---[ end trace 42c589b65f43d4ee ]---
[ 50.865802] Kernel panic - not syncing: Fatal exception
我们从第一次恐慌中立刻看到,漏洞利用似乎针对一个名为adsprpc的驱动程序。从堆栈跟踪(stacktrace)中我们还看到,崩溃发生在释放一个fastrpc_mmap结构体时——所以这很可能是某种堆(heap)漏洞利用,并且fastrpc_mmap结构体可能涉及其中。
日志 2:
[ 37.450199] adsprpc: fastrpc_init_process: untrusted app trying to attach to privileged DSP PD
[ 37.482741] adsprpc: mapping not found to unmap fd 0xffffffff, va 0xffffffffffffffff, len 0xffffffff
[ 37.482759] adsprpc: falcon: fastrpc_internal_mmap: ERROR: adding user allocated pages is not supported
[ 37.486210] adsprpc: mapping not found to unmap fd 0xa, va 0x0, len 0x0
...
[ 40.917577] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702834303, err:-44
...
[ 41.970037] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702834303, err:-44
...
[ 51.052781] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702834303, err:-44
...
[ 73.964765] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702834303, err:-44
...
[ 83.030394] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702834303, err:-44
...
[ 86.358103] Unable to handle kernel paging request at virtual address 0035fb968c5d536d
[ 86.358118] Mem abort info:
[ 86.358122] ESR = 0x96000044
[ 86.358127] Exception class = DABT (current EL), IL = 32 bits
[ 86.358131] SET = 0, FnV = 0
[ 86.358135] EA = 0, S1PTW = 0
[ 86.358139] Data abort info:
[ 86.358143] ISV = 0, ISS = 0x00000044
[ 86.358147] CM = 0, WnR = 1
[ 86.358151] [0035fb968c5d536d] address between user and kernel address ranges
[ 86.358159] Internal error: Oops: 96000044 [#1] PREEMPT SMP
...
[ 86.358221] Process falcon (pid: 7053, stack limit = 0x00000000a7dfa97f)
[ 86.358230] CPU: 0 PID: 7053 Comm: falcon Tainted: G S O 4.19.157-perf-g8779875ad741 #1
[ 86.358235] Hardware name: Qualcomm Technologies, Inc. xiaomi apollo (DT)
[ 86.358241] pstate: 60400005 (nZCv daif +PAN -UAO)
[ 86.358259] pc : fastrpc_file_free+0x1c4/0x2e0
[ 86.358264] lr : fastrpc_file_free+0x198/0x2e0
[ 86.358268] sp : ffffff80264d3a50
...
[ 86.358352] Call trace:
[ 86.358359] fastrpc_file_free+0x1c4/0x2e0
[ 86.358364] fastrpc_device_release+0x50/0x68
[ 86.358374] __fput+0xb8/0x1b0
[ 86.358380] ____fput+0xc/0x18
[ 86.358387] task_work_run+0x8c/0xb0
[ 86.358394] do_exit+0x3fc/0xa10
[ 86.358399] do_group_exit+0x8c/0xa0
[ 86.358405] get_signal+0x7c8/0x958
[ 86.358412] do_notify_resume+0x148/0x23e8
[ 86.358418] work_pending+0x8/0x10
[ 86.358424] Code: b4ffff68 f9400009 f9000109 b4fffee9 (f9000528)
[ 86.358430] ---[ end trace 9b01c55ca2d0bfea ]---
[ 86.358452] Kernel panic - not syncing: Fatal exception
这是adsprpc驱动程序的另一次崩溃,这次与fastrpc_file结构体相关,该结构体与一个struct file相关联,而struct file本身是由文件描述符引用的支持对象。我们还看到,漏洞利用这次似乎在利用过程中走得更远,并多次调用了fastrpc_mmap_free。值得注意的是,通道ID(channel id)被设置为这个非常大的值:1702834303。通道ID通常不能设置得这么高。虽然最大值因版本而异,但有效的通道ID范围大约在0到6之间,所以很明显通道ID(cid)存在某种内存损坏。同样值得注意的是,通道ID值被设置为一个Unix纪元时间戳值——这是国际特赦组织的Donncha在调查过程中注意到的。1702834303代表日期2023年12月17日星期日17:31:43,这非常接近漏洞利用被触发的时间……为什么会这样呢?
日志 3:
[ 2244.639158] adsprpc: ERROR: fastrpc_internal_mmap: user application falcon trying to map without initialization
...
[ 2244.641272] adsprpc: falcon: fastrpc_init_process: ERROR: donated memory allocated in userspace
[ 2244.683779] adsprpc: mapping not found to unmap fd 0xffffffff, va 0xffffffffffffffff, len 0xffffffff
[ 2244.683794] adsprpc: falcon: fastrpc_internal_mmap: ERROR: adding user allocated pages is not supported
[ 2244.689633] adsprpc: mapping not found to unmap fd 0x9, va 0x0, len 0x0
[ 2247.159424] Unable to handle kernel paging request at virtual address 006f7778a9cf5b88
[ 2247.159442] Mem abort info:
[ 2247.159446] ESR = 0x96000004
[ 2247.159453] Exception class = DABT (current EL), IL = 32 bits
[ 2247.159458] SET = 0, FnV = 0
[ 2247.159462] EA = 0, S1PTW = 0
[ 2247.159468] Data abort info:
[ 2247.159472] ISV = 0, ISS = 0x00000004
[ 2247.159476] CM = 0, WnR = 0
[ 2247.159481] [006f7778a9cf5b88] address between user and kernel address ranges
[ 2247.159489] Internal error: Oops: 96000004 [#1] PREEMPT SMP
...
[ 2247.159572] Process falcon (pid: 17512, stack limit = 0x00000000c911fea5)
[ 2247.159582] CPU: 0 PID: 17512 Comm: falcon Tainted: G S W O 4.19.157-perf-g8779875ad741 #1
[ 2247.159587] Hardware name: Qualcomm Technologies, Inc. xiaomi apollo (DT)
[ 2247.159595] pstate: 60400005 (nZCv daif +PAN -UAO)
[ 2247.159614] pc : __kmalloc+0x1c4/0x398
[ 2247.159619] lr : __kmalloc+0x60/0x398
[ 2247.159623] sp : ffffff8029173b80
...
[ 2247.159719] Call trace:
[ 2247.159727] __kmalloc+0x1c4/0x398
[ 2247.159740] inotify_handle_event+0xc8/0x1c8
[ 2247.159746] fsnotify+0x270/0x378
[ 2247.159753] __fsnotify_parent+0xdc/0x138
[ 2247.159763] notify_change2+0x314/0x348
[ 2247.159771] do_sys_ftruncate+0x190/0x1c0
[ 2247.159776] __arm64_sys_ftruncate+0x1c/0x28
[ 2247.159786] el0_svc_common+0x98/0x160
[ 2247.159792] el0_svc_handler+0x68/0x80
[ 2247.159800] el0_svc+0x8/0xc
[ 2247.159808] Code: b4000a77 b940230a f940bf0b 8b0a02ea (f940014c)
[ 2247.159815] ---[ end trace 3729c600fbf1ba28 ]---
[ 2247.159842] Kernel panic - not syncing: Fatal exception
我们再次看到adsprpc驱动程序日志,但最终在漏洞利用进程的上下文中,在代码的完全不同的部分发生了崩溃——这次是来自inotify子系统。我们稍后将重新审视这次崩溃的重要性。
日志 4:
[ 67.167510] adsprpc: fastrpc_init_process: untrusted app trying to attach to privileged DSP PD
[ 67.202061] adsprpc: mapping not found to unmap fd 0xffffffff, va 0xffffffffffffffff, len 0xffffffff
[ 67.202084] adsprpc: falcon: fastrpc_internal_mmap: ERROR: adding user allocated pages is not supported
[ 67.207916] adsprpc: mapping not found to unmap fd 0xa, va 0x0, len 0x0
[ 69.577152] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702832054, err:-44
[ 70.621863] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702832054, err:-44
...
[ 79.689300] adsprpc: ERROR:fastrpc_mmap_free, Invalid channel id: 1702832054, err:-44
...
[ 97.574406] Unable to handle kernel NULL pointer dereference at virtual address 0000000000000009
[ 97.574435] Mem abort info:
[ 97.574445] ESR = 0x96000006
[ 97.574457] Exception class = DABT (current EL), IL = 32 bits
[ 97.574467] SET = 0, FnV = 0
[ 97.574476] EA = 0, S1PTW = 0
[ 97.574485] Data abort info:
[ 97.574495] ISV = 0, ISS = 0x00000006
[ 97.574504] CM = 0, WnR = 0
[ 97.574522] user pgtable: 4k pages, 39-bit VAs, pgdp = 00000000ad40fd5a
[ 97.574532] [0000000000000009] pgd=00000001cadcb003, pud=00000001cadcb003, pmd=0000000000000000
[ 97.574554] Internal error: Oops: 96000006 [#1] PREEMPT SMP
...
[ 97.574680] Process falcon (pid: 10050, stack limit = 0x00000000eac9e565)
[ 97.574700] CPU: 0 PID: 10050 Comm: falcon Tainted: G S O 4.19.157-perf-g8779875ad741 #1
[ 97.574711] Hardware name: Qualcomm Technologies, Inc. xiaomi apollo (DT)
[ 97.574726] pstate: 00400005 (nzcv daif +PAN -UAO)
[ 97.574756] pc : pipe_read+0xac/0x308
[ 97.574769] lr : pipe_read+0x4c/0x308
[ 97.574778] sp : ffffff802e43bc80
...
[ 97.574982] Call trace:
[ 97.574996] pipe_read+0xac/0x308
[ 97.575014] __vfs_read+0xf8/0x140
[ 97.575027] vfs_read+0xb8/0x150
[ 97.575039] ksys_read+0x6c/0xd0
[ 97.575053] __arm64_sys_read+0x18/0x20
[ 97.575071] el0_svc_common+0x98/0x160
[ 97.575083] el0_svc_handler+0x68/0x80
[ 97.575097] el0_svc+0x8/0xc
[ 97.575114] Code: aa1c03fb aa1c03e1 b840ce68 f8410f69 (f9400529)
[ 97.575127] ---[ end trace 72c08623f6dedcd7 ]---
[ 97.575174] Kernel panic - not syncing: Fatal exception
我们在这里看到了第四种类型的崩溃,这次是在管道(pipe)子系统中。管道缓冲区通常被用作堆漏洞利用的喷射(spray)对象,如果这里也是这种情况,那并不奇怪。
从日志中可以收集到一些有价值的信息——最有意义的是这个adsprpc驱动程序的使用。我们还看到了来自几个adsprpc函数的日志行:
- fastrpc_init_process
- fastrpc_internal_munmap_fd
- fastrpc_internal_mmap
- fastrpc_mmap_free
攻击者使用的漏洞很可能存在于这些函数之间的关系的某个地方,但仅从日志中无法确切知道在哪里。漏洞利用执行的函数只会使调查复杂化,因为漏洞利用似乎不断触发非常早期的退出(bailouts),而这些退出不应该导致内核状态的任何改变。
经过进一步调查(特别是Jann Horn的调查!),很明显这个驱动程序可以从一系列非特权上下文中访问。untrusted_app没有能力直接打开驱动程序设备文件,但至少在某些设备上,它可以通过从dspservice进程通过IDspService HAL接口(可通过hwbinder访问)接收设备文件的文件描述符来获得有限的访问权限。
正如我们之前所见,第三方Android驱动程序是极具吸引力的易受攻击的攻击面,通常包含大量供攻击者利用的潜在漏洞。虽然攻击者利用了哪个漏洞并不立即明确,但显然有必要对这个驱动程序进行更彻底的审计。
adsprpc 驱动程序
应用数字信号处理器远程过程调用驱动程序(简称adsprpc)主要用于将多媒体处理卸载到更高效的DSP协处理器核心。该驱动程序主要通过 /dev/adsprpc-smd 字符设备文件访问,尽管历史上也可以通过多种设备文件访问,包括 cdsprpc-smd 和 mdsprpc-smd。该驱动程序的架构在内核文档中有详细描述。通过这个驱动程序,协处理器例程通过RPC接口暴露给应用处理器用户空间(包括untrusted_app进程),提供了一种高效的抽象方法,可以将多媒体处理卸载到SoC中的专用硬件。通过使用直接映射到DSP核心的DMA缓冲区,adsprpc旨在最小化跨处理器边界复制的数据量。这个功能集必然很复杂,这使其成为深入安全研究的成熟目标。
漏洞搜寻开始
由于放弃了直接从ITW日志中发现被利用的漏洞,是时候开始更广泛的代码审查过程了。事实证明,这是一个非常富有成效的研究决定。Jann很快就发现了第一个漏洞,在接下来的几个月里,我又发现了5个。我在下面描述了每个漏洞。
CVE-2024-38402:fastrpc_get_process_gids中的引用计数泄漏导致UAF
在驱动程序中发现的第一个漏洞是与任务关联的group_info结构体的引用计数泄漏,导致UAF(释放后使用)。在函数fastrpc_get_process_gids中,调用了get_current_groups,它增加了group_info结构体的引用计数,但该引用计数从未被释放。此外,这个引用计数是一个非饱和的引用计数,如果执行fastrpc_get_process_gids大约2^32次,就有可能溢出。这在实践中是一个难以利用的漏洞,至少需要14小时才能触发,但它仍然是内存损坏,并带有所有相关的后果。以下是此问题的一个崩溃示例:
[77306.174599] [7: adbd: 5455] BUG: KFENCE: invalid read in groups_to_user+0x34/0x1a4
[77306.174606] [7: adbd: 5455] Invalid read at 0xffffff89572a0000:
[77306.174607] [7: adbd: 5455] groups_to_user+0x34/0x1a4
[77306.174609] [7: adbd: 5455] invoke_syscall+0x58/0x13c
[77306.174612] [7: adbd: 5455] el0_svc_common+0xb4/0xf0
[77306.174614] [7: adbd: 5455] do_el0_svc+0x24/0x90
[77306.174615] [7: adbd: 5455] el0_svc+0x20/0x7c
[77306.174617] [7: adbd: 5455] el0t_64_sync_handler+0x84/0xe4
[77306.174618] [7: adbd: 5455] el0t_64_sync+0x1b8/0x1bc
[77306.174620] [7: adbd: 5455]
[77306.174621] [7: adbd: 5455] CPU: 7 PID: 5455 Comm: adbd Tainted: G S W OE 5.15.123-android13-8-28577312-abS911BXXU3CXD3 #1
[77306.174623] [7: adbd: 5455] Hardware name: Samsung DM1Q PROJECT (board-id,13) (DT)
[77306.174624] [7: adbd: 5455] pstate: 22400005 (nzCv daif +PAN -UAO +TCO -DIT -SSBS BTYPE=--)
[77306.174626] [7: adbd: 5455] pc : groups_to_user+0x34/0x1a4
[77306.174628] [7: adbd: 5455] lr : __arm64_sys_getgroups+0x4c/0x6c
[77306.174629] [7: adbd: 5455] sp : ffffffc02a073e00
[77306.174630] [7: adbd: 5455] x29: ffffffc02a073e00 x28: ffffff8868030040 x27: 0000000000000000
[77306.174633] [7: adbd: 5455] x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000
[77306.174635] [7: adbd: 5455] x23: 0000000060001000 x22: 00000077219a4f2c x21: ffffff8868030040
[77306.174637] [7: adbd: 5455] x20: ffffffc0081bd46c x19: 000000006b6b6b6b x18: ffffffc016089000
[77306.174638] [7: adbd: 5455] x17: 000000000000fffe x16: b4000074e392f638 x15: ffffff895729fff8
[77306.174640] [7: adbd: 5455] x14: 00000000524e68f8 x13: ffffff8868030040 x12: ffffffc00ad82000
[77306.174641] [7: adbd: 5455] x11: 0000007fffffffff x10: ffffffc00aa93000 x9 : 0000000014939a3e
[77306.174643] [7: adbd: 5455] x8 : 000000006b6b6b6b x7 : 0000000000000000 x6 : 0000000000000000
[77306.174645] [7: adbd: 5455] x5 : 0000000000000000 x4 : 0000000000000000 x3 : 0000000000000000
[77306.174646] [7: adbd: 5455] x2 : 0000000000000040 x1 : ffffff8904db9700 x0 : b400007491448d40
[77306.174648] [7: adbd: 5455] Call trace:
[77306.174648] [7: adbd: 5455] groups_to_user+0x34/0x1a4
[77306.174650] [7: adbd: 5455] invoke_syscall+0x58/0x13c
[77306.174651] [7: adbd: 5455] el0_svc_common+0xb4/0xf0
[77306.174653] [7: adbd: 5455] do_el0_svc+0x24/0x90
[77306.174654] [7: adbd: 5455] el0_svc+0x20/0x7c
[77306.174655] [7: adbd: 5455] el0t_64_sync_handler+0x84/0xe4
[77306.174656] [7: adbd: 5455] el0t_64_sync+0x1b8/0x1bc
CVE-2024-21455:is_compat标志导致将用户空间提供的地址作为内核指针访问
为了支持32位用户空间进程,64位内核包含一个“兼容层”,ioctl可以支持该层。该层负责将32位结构体编组(marshaling)为其64位等效结构体,这涉及将32位用户空间指针向上转换为64位指针。adsprpc驱动程序在adsprpc_compat.c文件中处理这种情况。它分配内核内存,将32位结构体复制并转换为该内核内存中的64位结构体,然后调用64位ioctl接口。因此,64位ioctl接口需要处理来自32位内核兼容层和64位用户空间的调用。为了提供这种支持,32位兼容层通过设置文件描述符绑定的fl结构体中的标志is_compat来向更广泛的adsprpc驱动程序指示正在使用32位兼容层。
long compat_fastrpc_device_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg)
{
int err = 0;
struct fastrpc_file *fl = (struct fastrpc_file *)filp->private_data;
if (!filp->f_op || !filp->f_op->unlocked_ioctl)
return -ENOTTY;
fl->is_compat = true;
...
}
稍后,在调用K_COPY_FROM_USER时使用该is_compat标志来决定是使用memmove(32位兼容层或其他内核调用)还是copy_from_user。
#define K_COPY_FROM_USER(err, kernel, dst, src, size) \
do {\
if (!(kernel))\
err = copy_from_user((dst),\
(void const __user *)(src),\
(size));\
else\
memmove((dst), (src), (size));\
} while (0)
...int fastrpc_internal_invoke2(struct fastrpc_file *fl,
struct fastrpc_ioctl_invoke2 *inv2)
{
switch (inv2->req) {
case FASTRPC_INVOKE2_ASYNC:
...
K_COPY_FROM_USER(err, fl->is_compat, &p.inv3, (void*)inv2->invparam, sizeof(struct fastrpc_ioctl_invoke_async_no_perf));
...
}
然而,这个标志是在相对全局的级别设置的,因此同一文件描述符上的任何其他ioctl调用都会看到这个标志已设置。此外,一旦设置了该标志,它就永远不会被取消设置。考虑以下场景:
- 恶意的64位进程A打开adsprpc-smd文件,创建一个新的adsprpc文件描述符
- 进程A fork并创建一个新的32位进程B(A和B共享adsprpc fd/fl)
- 进程B调用32位ioctl接口(从而设置is_compat标志)并退出
- 进程A调用64位ioctl接口
在这种情况下,驱动程序错误地认为请求来自32位兼容层(因为is_compat已设置),并且应该像访问包含内核指针的结构体一样访问该结构体,而实际上这是一个来自64位用户空间的请求,其中包含不受信任的用户空间提供的指针(在恶意情况下可能是内核指针!)。内核随后将使用不安全的memmove来访问这些指针,导致用户空间控制的内核地址读取。
[49468.514358] Unable to handle kernel paging request at virtual address ffffffff41414141
[49468.514397] PC Code: d65f03c0 d503201f (a9401c26) a9412428
[49468.514407] LR Code: 340003a8 957474dd (f9401be8) f90023e8
[49468.514413] Mem abort info:
[49468.514418] ESR = 0x96000005
[49468.514426] EC = 0x25: DABT (current EL), IL = 32 bits
[49468.514433] SET = 0, FnV = 0
[49468.514440] EA = 0, S1PTW = 0
[49468.514445] FSC = 0x05: level 1 translation fault
[49468.514452] Data abort info:
[49468.514456] ISV = 0, ISS = 0x00000005
[49468.514463] CM = 0, WnR = 0
[49468.514469] swapper pgtable: 4k pages, 39-bit VAs, pgdp=00000000aa728000
[49468.514479] [ffffffff41414141] pgd=0000000000000000, p4d=0000000000000000, pud=0000000000000000
[49468.514502] Internal error: Oops: 96000005 [#1] PREEMPT SMP
[49468.514780] sec_arm64_ap_context:sec_arm64_ap_context_on_die() context saved (CPU:6)
[49468.514788] Modules linked in: [...]
[49468.516301] CPU: 6 PID: 17448 Comm: poc_compat_pare Tainted: G S W OE 5.15.123-android13-8-28577312-abS911BXXU3CXD3 #1
[49468.516312] Hardware name: Samsung DM1Q PROJECT (board-id,13) (DT)
[49468.516317] pstate: 22400005 (nzCv daif +PAN -UAO +TCO -DIT -SSBS BTYPE=--)
[49468.516326] pc : __memcpy+0x90/0x250
[49468.516339] lr : fastrpc_internal_invoke2+0x308/0x408 [frpc_adsprpc]
[49468.516471] sp : ffffffc02fe33ba0
[49468.516475] x29: ffffffc02fe33cb0 x28: ffffff894341bb80 x27: 0000000000000000
[49468.516489] x26: 0000000000000000 x25: 0000000000000000 x24: ffffff891fe6c5c0
[49468.516499] x23: 00000000ffffffe7 x22: ffffff8939eff010 x21: 00000000c0185212
[49468.516510] x20: 0000007fe5890e40 x19: ffffff8939eff000 x18: ffffffc017b37010
[49468.516520] x17: 0000000000000000 x16: 0000000000000000 x15: 0000007fe5890e40
[49468.516530] x14: ffffff80011f6480 x13: 0000000000000000 x12: ffffff8034b27ce8
[49468.516540] x11: 0000000000000010 x10: ffffffc002443654 x9 : 0000000000000008
[49468.516549] x8 : 000000