CVE-2023-54225
Full vulnerability record from the local CVENow database.
Description
In the Linux kernel, the following vulnerability has been resolved: net: ipa: only reset hashed tables when supported Last year, the code that manages GSI channel transactions switched from using spinlock-protected linked lists to using indexes into the ring buffer used for a channel. Recently, Google reported seeing transaction reference count underflows occasionally during shutdown. Doug Anderson found a way to reproduce the issue reliably, and bisected the issue to the commit that eliminated the linked lists and the lock. The root cause was ultimately determined to be related to unused transactions being committed as part of the modem shutdown cleanup activity. Unused transactions are not normally expected (except in error cases). The modem uses some ranges of IPA-resident memory, and whenever it shuts down we zero those ranges. In ipa_filter_reset_table() a transaction is allocated to zero modem filter table entries. If hashing is not supported, hashed table memory should not be zeroed. But currently nothing prevents that, and the result is an unused transaction. Something similar occurs when we zero routing table entries for the modem. By preventing any attempt to clear hashed tables when hashing is not supported, the reference count underflow is avoided in this case. Note that there likely remains an issue with properly freeing unused transactions (if they occur due to errors). This patch addresses only the underflows that Google originally reported.
View original CVE JSON
{
"id": "CVE-2023-54225",
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"published": "2025-12-30T13:16:10.877",
"lastModified": "2026-10-28T19:10:00.193",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet: ipa: only reset hashed tables when supported\n\nLast year, the code that manages GSI channel transactions switched\nfrom using spinlock-protected linked lists to using indexes into the\nring buffer used for a channel. Recently, Google reported seeing\ntransaction reference count underflows occasionally during shutdown.\n\nDoug Anderson found a way to reproduce the issue reliably, and\nbisected the issue to the commit that eliminated the linked lists\nand the lock. The root cause was ultimately determined to be\nrelated to unused transactions being committed as part of the modem\nshutdown cleanup activity. Unused transactions are not normally\nexpected (except in error cases).\n\nThe modem uses some ranges of IPA-resident memory, and whenever it\nshuts down we zero those ranges. In ipa_filter_reset_table() a\ntransaction is allocated to zero modem filter table entries. If\nhashing is not supported, hashed table memory should not be zeroed.\nBut currently nothing prevents that, and the result is an unused\ntransaction. Something similar occurs when we zero routing table\nentries for the modem.\n\nBy preventing any attempt to clear hashed tables when hashing is not\nsupported, the reference count underflow is avoided in this case.\n\nNote that there likely remains an issue with properly freeing unused\ntransactions (if they occur due to errors). This patch addresses\nonly the underflows that Google originally reported."
},
{
"lang": "es",
"value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nnet: ipa: solo restablecer tablas hash cuando sea compatible\n\nEl año pasado, el código que gestiona las transacciones del canal GSI cambió de usar listas enlazadas protegidas por spinlock a usar índices en el búfer circular utilizado para un canal. Recientemente, Google informó haber visto desbordamientos negativos del contador de referencias de transacciones ocasionalmente durante el apagado.\n\nDoug Anderson encontró una manera de reproducir el problema de forma fiable, y realizó una búsqueda binaria del problema hasta el commit que eliminó las listas enlazadas y el bloqueo. La causa raíz finalmente se determinó que estaba relacionada con transacciones no utilizadas que se estaban confirmando como parte de la actividad de limpieza del apagado del módem. Las transacciones no utilizadas no se esperan normalmente (excepto en casos de error).\n\nEl módem utiliza algunos rangos de memoria residente en IPA, y cada vez que se apaga ponemos a cero esos rangos. En ipa_filter_reset_table() se asigna una transacción para poner a cero las entradas de la tabla de filtros del módem. Si el hashing no es compatible, la memoria de la tabla hash no debería ponerse a cero. Pero actualmente nada lo impide, y el resultado es una transacción no utilizada. Algo similar ocurre cuando ponemos a cero las entradas de la tabla de enrutamiento para el módem.\n\nAl evitar cualquier intento de borrar tablas hash cuando el hashing no es compatible, se evita el desbordamiento negativo del contador de referencias en este caso.\n\nTenga en cuenta que probablemente aún queda un problema con la liberación adecuada de transacciones no utilizadas (si ocurren debido a errores). Este parche aborda solo los desbordamientos negativos que Google informó originalmente."
}
],
"affected": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"affectedData": [
{
"vendor": "Linux",
"product": "Linux",
"defaultStatus": "unaffected",
"programFiles": [
"drivers/net/ipa/ipa_table.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"versions": [
{
"version": "d338ae28d8a866c57fcac38f3d77bcc1d1702d19",
"lessThan": "50c24f0c940728792c8bdf65c1eaf6b91b3b0dcd",
"versionType": "git",
"status": "affected"
},
{
"version": "d338ae28d8a866c57fcac38f3d77bcc1d1702d19",
"lessThan": "c00af3a818cc573e10100cc6770f0e47befa1fa4",
"versionType": "git",
"status": "affected"
},
{
"version": "d338ae28d8a866c57fcac38f3d77bcc1d1702d19",
"lessThan": "e11ec2b868af2b351c6c1e2e50eb711cc5423a10",
"versionType": "git",
"status": "affected"
}
]
},
{
"vendor": "Linux",
"product": "Linux",
"defaultStatus": "affected",
"programFiles": [
"drivers/net/ipa/ipa_table.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"versions": [
{
"version": "6.1",
"status": "affected"
},
{
"version": "0",
"lessThan": "6.1",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.1.45",
"lessThanOrEqual": "6.1.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.4.8",
"lessThanOrEqual": "6.4.*",
"versionType": "semver",
"status": "unaffected"
},
{
"version": "6.5",
"lessThanOrEqual": "*",
"versionType": "original_commit_for_fix",
"status": "unaffected"
}
]
}
]
}
],
"metrics": {},
"references": [
{
"url": "https://git.kernel.org/stable/c/50c24f0c940728792c8bdf65c1eaf6b91b3b0dcd",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/c00af3a818cc573e10100cc6770f0e47befa1fa4",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
},
{
"url": "https://git.kernel.org/stable/c/e11ec2b868af2b351c6c1e2e50eb711cc5423a10",
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
]
}