{"id":"DEBIAN-CVE-2024-26923","details":"In the Linux kernel, the following vulnerability has been resolved:  af_unix: Fix garbage collector racing against connect()  Garbage collector does not take into account the risk of embryo getting enqueued during the garbage collection. If such embryo has a peer that carries SCM_RIGHTS, two consecutive passes of scan_children() may see a different set of children. Leading to an incorrectly elevated inflight count, and then a dangling pointer within the gc_inflight_list.  sockets are AF_UNIX/SOCK_STREAM S is an unconnected socket L is a listening in-flight socket bound to addr, not in fdtable V's fd will be passed via sendmsg(), gets inflight count bumped  connect(S, addr)\tsendmsg(S, [V]); close(V)\t__unix_gc() ----------------\t-------------------------\t-----------  NS = unix_create1() skb1 = sock_wmalloc(NS) L = unix_find_other(addr) unix_state_lock(L) unix_peer(S) = NS \t\t\t// V count=1 inflight=0   \t\t\tNS = unix_peer(S)  \t\t\tskb2 = sock_alloc() \t\t\tskb_queue_tail(NS, skb2[V])  \t\t\t// V became in-flight \t\t\t// V count=2 inflight=1  \t\t\tclose(V)  \t\t\t// V count=1 inflight=1 \t\t\t// GC candidate condition met  \t\t\t\t\t\tfor u in gc_inflight_list: \t\t\t\t\t\t  if (total_refs == inflight_refs) \t\t\t\t\t\t    add u to gc_candidates  \t\t\t\t\t\t// gc_candidates={L, V}  \t\t\t\t\t\tfor u in gc_candidates: \t\t\t\t\t\t  scan_children(u, dec_inflight)  \t\t\t\t\t\t// embryo (skb1) was not \t\t\t\t\t\t// reachable from L yet, so V's \t\t\t\t\t\t// inflight remains unchanged __skb_queue_tail(L, skb1) unix_state_unlock(L) \t\t\t\t\t\tfor u in gc_candidates: \t\t\t\t\t\t  if (u.inflight) \t\t\t\t\t\t    scan_children(u, inc_inflight_move_tail)  \t\t\t\t\t\t// V count=1 inflight=2 (!)  If there is a GC-candidate listening socket, lock/unlock its state. This makes GC wait until the end of any ongoing connect() to that socket. After flipping the lock, a possibly SCM-laden embryo is already enqueued. And if there is another embryo coming, it can not possibly carry SCM_RIGHTS. At this point, unix_inflight() can not happen because unix_gc_lock is already taken. Inflight graph remains unaffected.","modified":"2026-09-15T09:03:06.046122801Z","published":"2024-04-25T06:15:57.160Z","upstream":["CVE-2024-26923"],"references":[{"type":"ADVISORY","url":"https://security-tracker.debian.org/tracker/CVE-2024-26923"}],"affected":[{"package":{"name":"linux","ecosystem":"Debian:12","purl":"pkg:deb/debian/linux?arch=source&distro=bookworm"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.1.90-1"}]}],"versions":["6.1.27-1","6.1.37-1","6.1.38-1","6.1.38-2","6.1.38-2~bpo11+1","6.1.38-3","6.1.38-4","6.1.38-4~bpo11+1","6.1.52-1","6.1.55-1","6.1.55-1~bpo11+1","6.1.64-1","6.1.66-1","6.1.67-1","6.1.69-1","6.1.69-1~bpo11+1","6.1.76-1","6.1.76-1~bpo11+1","6.1.82-1","6.1.85-1","6.1.90-1~bpo11+1"],"ecosystem_specific":{"urgency":"not yet assigned"},"database_specific":{"source":"https://storage.googleapis.com/osv-test-debian-osv/debian-cve-osv/DEBIAN-CVE-2024-26923.json"}},{"package":{"name":"linux","ecosystem":"Debian:13","purl":"pkg:deb/debian/linux?arch=source&distro=trixie"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.8.9-1"}]}],"ecosystem_specific":{"urgency":"not yet assigned"},"database_specific":{"source":"https://storage.googleapis.com/osv-test-debian-osv/debian-cve-osv/DEBIAN-CVE-2024-26923.json"}},{"package":{"name":"linux","ecosystem":"Debian:14","purl":"pkg:deb/debian/linux?arch=source&distro=forky"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"6.8.9-1"}]}],"ecosystem_specific":{"urgency":"not yet assigned"},"database_specific":{"source":"https://storage.googleapis.com/osv-test-debian-osv/debian-cve-osv/DEBIAN-CVE-2024-26923.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:N/A:H"}]}