{"id":"CVE-2026-52947","revision":"cd2393c445d04fe68989286c3d24313b","records":[{"revision":"cd2393c445d04fe68989286c3d24313b","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-52947","aliases":[],"title":"net: qrtr: fix refcount saturation and potential UAF in qrtr_port_remove","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nnet: qrtr: fix refcount saturation and potential UAF in qrtr_port_remove\n\nIn qrtr_port_remove(), the socket reference count is decremented via\n__sock_put() before the port is removed from the qrtr_ports XArray and\nbefore the RCU grace period elapses.\n\nThis breaks the fundamental RCU update paradigm. It exposes a race\nwindow where a concurrent RCU reader (such as qrtr_reset_ports() or\nqrtr_port_lookup()) can obtain a pointer to the socket from the XArray,\nand attempt to call sock_hold() on a socket whose reference count has\nalready dropped to zero.\n\nThis exact race condition was hit during syzkaller fuzzing, leading to\nthe following refcount saturation warning and a potential Use-After-Free:\n\n  refcount_t: saturated; leaking memory.\n  WARNING: CPU: 3 PID: 1273 at lib/refcount.c:22 refcount_warn_saturate+0xae/0x1d0\n  Modules linked in: qrtr(+) bochs drm_shmem_helper ...\n  Call Trace:\n   <TASK>\n   qrtr_reset_ports net/qrtr/af_qrtr.c:768 [inline] [qrtr]\n   __qrtr_bind.isra.0+0x48b/0x570 net/qrtr/af_qrtr.c:805 [qrtr]\n   qrtr_bind+0x17d/0x210 net/qrtr/af_qrtr.c:901 [qrtr]\n   kernel_bind+0xe4/0x120 net/socket.c:3592\n   qrtr_ns_init+0x1a6/0x380 net/qrtr/ns.c:715 [qrtr]\n   qrtr_proto_init+0x3b/0xff0 net/qrtr/af_qrtr.c:169 [qrtr]\n   do_one_initcall+0xf5/0x5e0 init/main.c:1283\n   ...\n   </TASK>\n\nFix this by deferring the reference count decrement until after the\nxa_erase() and the synchronize_rcu() complete.\n\n(Note: The v1 of this patch incorrectly replaced __sock_put() with\nsock_put(). As Simon Horman pointed out, the callers of qrtr_port_remove()\nstill hold a reference to the socket, so freeing the socket memory here\nwould lead to a subsequent UAF in the caller. Thus, the __sock_put() is\nkept, but only repositioned to close the RCU race.)","state":0,"publishedAt":"2026-06-24T16:26:05.062+00:00","modifiedAt":"2026-10-19T19:47:09.2+00:00","affected":[{"ecosystem":"Vendor product","name":"Linux","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"product\": \"Linux\",\n                    \"vendor\": \"Linux\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\n                    \"programFiles\": [\n                        \"net/qrtr/af_qrtr.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"2aa4c12723fe432e623462a3be42a197a128722b\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"03bfa95e452e2b6ccd76a332060ae4feaf5ad84d\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"474293d90880622fde9d2430fb0165767090f7b3\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"2047c2aa0963bb2872fd722300a15bcb441a4c00\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"7de2d447072be3b1a76793f034432338fc9c494b\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"ab269990ed58143a92a263be1bee626d82ac03da\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"3b20ec8f31e8a6a6782243f473b0abd3463621df\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"bdabad3e363d825ddf9679dd431cca0b2c30f881\",\n                            \"lessThan\": \"a2171131ecda1ed61a594a1eb715e75fdad0fef5\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        }\n                    ]\n                }"},{"ecosystem":"Vendor product","name":"Linux","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"product\": \"Linux\",\n                    \"vendor\": \"Linux\",\n                    \"defaultStatus\": \"affected\",\n                    \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\n                    \"programFiles\": [\n                        \"net/qrtr/af_qrtr.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"4.7\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \"0\",\n                            \"lessThan\": \"4.7\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"5.10.259\",\n                            \"lessThanOrEqual\": \"5.10.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"5.15.210\",\n                            \"lessThanOrEqual\": \"5.15.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.1.176\",\n                            \"lessThanOrEqual\": \"6.1.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.6.143\",\n                            \"lessThanOrEqual\": \"6.6.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.12.94\",\n                            \"lessThanOrEqual\": \"6.12.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.18.36\",\n                            \"lessThanOrEqual\": \"6.18.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"7.0.13\",\n                            \"lessThanOrEqual\": \"7.0.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"7.1\",\n                            \"lessThanOrEqual\": \"*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"original_commit_for_fix\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","score":7.8,"severity":"HIGH"}],"references":["https://git.kernel.org/stable/c/2aa4c12723fe432e623462a3be42a197a128722b","https://git.kernel.org/stable/c/03bfa95e452e2b6ccd76a332060ae4feaf5ad84d","https://git.kernel.org/stable/c/474293d90880622fde9d2430fb0165767090f7b3","https://git.kernel.org/stable/c/2047c2aa0963bb2872fd722300a15bcb441a4c00","https://git.kernel.org/stable/c/7de2d447072be3b1a76793f034432338fc9c494b","https://git.kernel.org/stable/c/ab269990ed58143a92a263be1bee626d82ac03da","https://git.kernel.org/stable/c/3b20ec8f31e8a6a6782243f473b0abd3463621df","https://git.kernel.org/stable/c/a2171131ecda1ed61a594a1eb715e75fdad0fef5"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-52947","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-52947","identifiers":["CVE-2026-52947"]},"retained":false,"historicalAffected":[]}],"coverage":[]}