In the Linux kernel, the following vulnerability has been resolved:
wifi: ath11k: Fix SKB corruption in REO destination ring
While running traffics for a long time, randomly an RX descriptor filled with value "0" from REO destination ring is received. This descriptor which is invalid causes the wrong SKB (SKB stored in the IDR lookup with buffer id "0") to be fetched which in turn causes SKB memory corruption issue and the same leads to crash after some time.
Changed the start id for idr allocation to "1" and the buffer id "0" is reserved for error validation. Introduced Sanity check to validate the descriptor, before processing the SKB.
Crash Signature :
Unable to handle kernel paging request at virtual address 3f004900 PC points to "b15dmainvrange+0x30/0x50" LR points to "dmacachemaintpage+0x8c/0x128". The Backtrace obtained is as follows: [<8031716c>] (b15dmainvrange) from [<80313a4c>] (dmacachemaintpage+0x8c/0x128) [<80313a4c>] (dmacachemaintpage) from [<80313b90>] (dmapagedevtocpu+0x28/0xcc) [<80313b90>] (dmapagedevtocpu) from [<7fb5dd68>] (ath11kdpprocessrx+0x1e8/0x4a4 [ath11k]) [<7fb5dd68>] (ath11kdpprocessrx [ath11k]) from [<7fb53c20>] (ath11kdpservicesrng+0xb0/0x2ac [ath11k]) [<7fb53c20>] (ath11kdpservicesrng [ath11k]) from [<7f67bba4>] (ath11kpciextgrpnapipoll+0x1c/0x78 [ath11kpci]) [<7f67bba4>] (ath11kpciextgrpnapipoll [ath11kpci]) from [<807d5cf4>] (napipoll+0x28/0xb8) [<807d5cf4>] (napipoll) from [<807d5f28>] (netrxaction+0xf0/0x280) [<807d5f28>] (netrxaction) from [<80302148>] (dosoftirq+0xd0/0x280) [<80302148>] (dosoftirq) from [<80320408>] (irqexit+0x74/0xd4) [<80320408>] (irqexit) from [<803638a4>] (handledomainirq+0x90/0xb4) [<803638a4>] (handledomainirq) from [<805bedec>] (gichandleirq+0x58/0x90) [<805bedec>] (gichandleirq) from [<80301a78>] (irqsvc+0x58/0x8c)
Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.7.0.1-01744-QCAHKSWPL_SILICONZ-1
[
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@67459491f78146bcf7d93596e5b709d063dff5d8",
"target": {
"function": "ath11k_dp_rxbufs_replenish",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-1099d00d",
"digest": {
"length": 1839.0,
"function_hash": "294979857320877582087067585615696944240"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f9fff67d2d7ca6fa8066132003a3deef654c55b1",
"target": {
"function": "ath11k_dp_rxbufs_replenish",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-2d2afbbe",
"digest": {
"length": 1839.0,
"function_hash": "294979857320877582087067585615696944240"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f9fff67d2d7ca6fa8066132003a3deef654c55b1",
"target": {
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-3053845d",
"digest": {
"threshold": 0.9,
"line_hashes": [
"243256262725534316439214840933939131869",
"245876461235427616866519784245887145547",
"21315725225017506281358359441673978338",
"3413786192910368202766557742882875450",
"178826729882599750735236144180511663059",
"153552326511369436439605907428096667050",
"267275057594909972200967643864048615485",
"147793518533950021302359982892380602241",
"203931159360371808288258203409938838146",
"298178158438345770165097689067719363154"
]
},
"signature_type": "Line"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@866921dc06b94df91acfcf9359b57da943ed99b3",
"target": {
"function": "ath11k_dp_rxbufs_replenish",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-3c22f171",
"digest": {
"length": 1839.0,
"function_hash": "294979857320877582087067585615696944240"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@f9fff67d2d7ca6fa8066132003a3deef654c55b1",
"target": {
"function": "ath11k_dp_process_rx",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-6a4b2e90",
"digest": {
"length": 2857.0,
"function_hash": "218208047870759619677517517002824262920"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3d3f8fe01a01d94a17fe1ae0d2e894049a972717",
"target": {
"function": "ath11k_dp_rxbufs_replenish",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-70888a69",
"digest": {
"length": 1839.0,
"function_hash": "294979857320877582087067585615696944240"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3d3f8fe01a01d94a17fe1ae0d2e894049a972717",
"target": {
"function": "ath11k_dp_process_rx",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-8d63175a",
"digest": {
"length": 2529.0,
"function_hash": "191561497283994643379160162041938509260"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@866921dc06b94df91acfcf9359b57da943ed99b3",
"target": {
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-960fa124",
"digest": {
"threshold": 0.9,
"line_hashes": [
"243256262725534316439214840933939131869",
"245876461235427616866519784245887145547",
"21315725225017506281358359441673978338",
"3413786192910368202766557742882875450",
"178826729882599750735236144180511663059",
"153552326511369436439605907428096667050",
"267275057594909972200967643864048615485",
"147793518533950021302359982892380602241",
"203931159360371808288258203409938838146",
"298178158438345770165097689067719363154"
]
},
"signature_type": "Line"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@67459491f78146bcf7d93596e5b709d063dff5d8",
"target": {
"function": "ath11k_dp_process_rx",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-a5ded038",
"digest": {
"length": 2857.0,
"function_hash": "218208047870759619677517517002824262920"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@068fd06148fbf0af95bb08dc77cff34ee679fdbc",
"target": {
"function": "ath11k_dp_process_rx",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-b46265d9",
"digest": {
"length": 2857.0,
"function_hash": "218208047870759619677517517002824262920"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@3d3f8fe01a01d94a17fe1ae0d2e894049a972717",
"target": {
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-baf0ce6a",
"digest": {
"threshold": 0.9,
"line_hashes": [
"243256262725534316439214840933939131869",
"245876461235427616866519784245887145547",
"21315725225017506281358359441673978338",
"3413786192910368202766557742882875450",
"178826729882599750735236144180511663059",
"153552326511369436439605907428096667050",
"267275057594909972200967643864048615485",
"147793518533950021302359982892380602241",
"203931159360371808288258203409938838146",
"298178158438345770165097689067719363154"
]
},
"signature_type": "Line"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@866921dc06b94df91acfcf9359b57da943ed99b3",
"target": {
"function": "ath11k_dp_process_rx",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-dd82ddfd",
"digest": {
"length": 2529.0,
"function_hash": "191561497283994643379160162041938509260"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@67459491f78146bcf7d93596e5b709d063dff5d8",
"target": {
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-eb746ee9",
"digest": {
"threshold": 0.9,
"line_hashes": [
"243256262725534316439214840933939131869",
"245876461235427616866519784245887145547",
"21315725225017506281358359441673978338",
"3413786192910368202766557742882875450",
"178826729882599750735236144180511663059",
"153552326511369436439605907428096667050",
"267275057594909972200967643864048615485",
"147793518533950021302359982892380602241",
"203931159360371808288258203409938838146",
"298178158438345770165097689067719363154"
]
},
"signature_type": "Line"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@068fd06148fbf0af95bb08dc77cff34ee679fdbc",
"target": {
"function": "ath11k_dp_rxbufs_replenish",
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-eb9632c0",
"digest": {
"length": 1839.0,
"function_hash": "294979857320877582087067585615696944240"
},
"signature_type": "Function"
},
{
"source": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git@068fd06148fbf0af95bb08dc77cff34ee679fdbc",
"target": {
"file": "drivers/net/wireless/ath/ath11k/dp_rx.c"
},
"deprecated": false,
"signature_version": "v1",
"id": "CVE-2023-53315-ef3e5ec5",
"digest": {
"threshold": 0.9,
"line_hashes": [
"243256262725534316439214840933939131869",
"245876461235427616866519784245887145547",
"21315725225017506281358359441673978338",
"3413786192910368202766557742882875450",
"178826729882599750735236144180511663059",
"153552326511369436439605907428096667050",
"267275057594909972200967643864048615485",
"147793518533950021302359982892380602241",
"203931159360371808288258203409938838146",
"298178158438345770165097689067719363154"
]
},
"signature_type": "Line"
}
]