{"affected": [{"affectedData": [{"defaultStatus": "unaffected", "product": "Linux", "programFiles": ["net/kcm/kcmsock.c"], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [{"lessThan": "d6dcbcc8d630d14e9651fe93a9386b35f4dcfd56", "status": "affected", "version": "ab7ac4eb9832e32a09f4e8042705484d2fb0aad3", "versionType": "git"}, {"lessThan": "6f129a251c2795ba55dd5cc1fdf7e0af3098d848", "status": "affected", "version": "ab7ac4eb9832e32a09f4e8042705484d2fb0aad3", "versionType": "git"}, {"lessThan": "9ea3671d70ee07480d80bebe86696397c4e99fb7", "status": "affected", "version": "ab7ac4eb9832e32a09f4e8042705484d2fb0aad3", "versionType": "git"}, {"lessThan": "b1e3edf688a88c1a3ac41657055d9c136a08cd25", "status": "affected", "version": "ab7ac4eb9832e32a09f4e8042705484d2fb0aad3", "versionType": "git"}, {"lessThan": "7af58f76e4b404a74c836881a845e6652db8a09f", "status": "affected", "version": "ab7ac4eb9832e32a09f4e8042705484d2fb0aad3", "versionType": "git"}, {"lessThan": "ca220141fa8ebae09765a242076b2b77338106b0", "status": "affected", "version": "ab7ac4eb9832e32a09f4e8042705484d2fb0aad3", "versionType": "git"}]}, {"defaultStatus": "affected", "product": "Linux", "programFiles": ["net/kcm/kcmsock.c"], "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "vendor": "Linux", "versions": [{"status": "affected", "version": "4.6"}, {"lessThan": "4.6", "status": "unaffected", "version": "0", "versionType": "semver"}, {"lessThanOrEqual": "6.1.*", "status": "unaffected", "version": "6.1.191", "versionType": "semver"}, {"lessThanOrEqual": "6.6.*", "status": "unaffected", "version": "6.6.160", "versionType": "semver"}, {"lessThanOrEqual": "6.12.*", "status": "unaffected", "version": "6.12.75", "versionType": "semver"}, {"lessThanOrEqual": "6.18.*", "status": "unaffected", "version": "6.18.16", "versionType": "semver"}, {"lessThanOrEqual": "6.19.*", "status": "unaffected", "version": "6.19.6", "versionType": "semver"}, {"lessThanOrEqual": "*", "status": "unaffected", "version": "7.0", "versionType": "original_commit_for_fix"}]}], "source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"}], "configurations": [{"nodes": [{"cpeMatch": [{"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "matchCriteriaId": "BF0012BC-1AAF-4F0D-B9C8-FC13D91F000E", "versionEndExcluding": "6.12.75", "versionStartIncluding": "4.6", "vulnerable": true}, {"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "matchCriteriaId": "B4B8CDA9-BADF-4CF5-8B3B-702DE8EEA40B", "versionEndExcluding": "6.18.16", "versionStartIncluding": "6.13", "vulnerable": true}, {"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "matchCriteriaId": "373EEEDA-FAA1-4FB4-B6ED-DB4DD99DBE67", "versionEndExcluding": "6.19.6", "versionStartIncluding": "6.19", "vulnerable": true}, {"criteria": "cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:*", "matchCriteriaId": "F253B622-8837-4245-BCE5-A7BF8FC76A16", "vulnerable": true}], "negate": false, "operator": "OR"}]}], "cveTags": [], "descriptions": [{"lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\nkcm: fix zero-frag skb in frag_list on partial sendmsg error\n\nSyzkaller reported a warning in kcm_write_msgs() when processing a\nmessage with a zero-fragment skb in the frag_list.\n\nWhen kcm_sendmsg() fills MAX_SKB_FRAGS fragments in the current skb,\nit allocates a new skb (tskb) and links it into the frag_list before\ncopying data. If the copy subsequently fails (e.g. -EFAULT from\nuser memory), tskb remains in the frag_list with zero fragments:\n\n head skb (msg being assembled, NOT yet in sk_write_queue)\n +-----------+\n | frags[17] | (MAX_SKB_FRAGS, all filled with data)\n | frag_list-+--> tskb\n +-----------+ +----------+\n | frags[0] | (empty! copy failed before filling)\n +----------+\n\nFor SOCK_SEQPACKET with partial data already copied, the error path\nsaves this message via partial_message for later completion. For\nSOCK_SEQPACKET, sock_write_iter() automatically sets MSG_EOR, so a\nsubsequent zero-length write(fd, NULL, 0) completes the message and\nqueues it to sk_write_queue. kcm_write_msgs() then walks the\nfrag_list and hits:\n\n WARN_ON(!skb_shinfo(skb)->nr_frags)\n\nTCP has a similar pattern where skbs are enqueued before data copy\nand cleaned up on failure via tcp_remove_empty_skb(). KCM was\nmissing the equivalent cleanup.\n\nFix this by tracking the predecessor skb (frag_prev) when allocating\na new frag_list entry. On error, if the tail skb has zero frags,\nuse frag_prev to unlink and free it in O(1) without walking the\nsingly-linked frag_list. frag_prev is safe to dereference because\nthe entire message chain is only held locally (or in kcm->seq_skb)\nand is not added to sk_write_queue until MSG_EOR, so the send path\ncannot free it underneath us.\n\nAlso change the WARN_ON to WARN_ON_ONCE to avoid flooding the log\nif the condition is somehow hit repeatedly.\n\nThere are currently no KCM selftests in the kernel tree; a simple\nreproducer is available at [1].\n\n[1] https://gist.github.com/mrpre/a94d431c757e8d6f168f4dd1a3749daa"}, {"lang": "es", "value": "En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:\n\nkcm: corrige skb de cero fragmentos en frag_list en error parcial de sendmsg\n\nSyzkaller inform\u00f3 una advertencia en kcm_write_msgs() al procesar un mensaje con un skb de cero fragmentos en la frag_list.\n\nCuando kcm_sendmsg() llena fragmentos MAX_SKB_FRAGS en el skb actual, asigna un nuevo skb (tskb) y lo enlaza en la frag_list antes de copiar datos. Si la copia falla posteriormente (por ejemplo, -EFAULT de la memoria de usuario), tskb permanece en la frag_list con cero fragmentos:\n\n skb de cabecera (mensaje en ensamblaje, A\u00daN NO en sk_write_queue)\n +-----------+\n | frags[17] | (MAX_SKB_FRAGS, todos llenos de datos)\n | frag_list-+ - tskb\n +-----------+ +----------+\n | frags[0] | (\u00a1vac\u00edo! la copia fall\u00f3 antes de llenarse)\n +----------+\n\nPara SOCK_SEQPACKET con datos parciales ya copiados, la ruta de error guarda este mensaje a trav\u00e9s de partial_message para su posterior finalizaci\u00f3n. Para SOCK_SEQPACKET, sock_write_iter() establece autom\u00e1ticamente MSG_EOR, por lo que una escritura posterior de longitud cero write(fd, NULL, 0) completa el mensaje y lo encola en sk_write_queue. kcm_write_msgs() luego recorre la frag_list y encuentra:\n\n WARN_ON(!skb_shinfo(skb) -> nr_frags)\n\nTCP tiene un patr\u00f3n similar donde los skbs se encolan antes de la copia de datos y se limpian en caso de fallo a trav\u00e9s de tcp_remove_empty_skb(). A KCM le faltaba la limpieza equivalente.\n\nSolucione esto rastreando el skb predecesor (frag_prev) al asignar una nueva entrada de frag_list. En caso de error, si el skb de cola tiene cero fragmentos, use frag_prev para desenlazarlo y liberarlo en O(1) sin recorrer la frag_list de enlace simple. Es seguro desreferenciar frag_prev porque toda la cadena de mensajes solo se mantiene localmente (o en kcm -> seq_skb) y no se a\u00f1ade a sk_write_queue hasta MSG_EOR, por lo que la ruta de env\u00edo no puede liberarlo por debajo de nosotros.\n\nTambi\u00e9n cambie el WARN_ON a WARN_ON_ONCE para evitar inundar el registro si la condici\u00f3n se cumple repetidamente de alguna manera.\n\nActualmente no hay KCM selftests en el \u00e1rbol del kernel; un reproductor simple est\u00e1 disponible en [1].\n\n[1] https://gist.github.com/mrpre/a94d431c757e8d6f168f4dd1a3749daa"}], "id": "CVE-2026-43244", "lastModified": "2026-11-11T20:10:00.273", "metrics": {"cvssMetricV31": [{"cvssData": {"attackComplexity": "LOW", "attackVector": "LOCAL", "availabilityImpact": "HIGH", "baseScore": 5.5, "baseSeverity": "MEDIUM", "confidentialityImpact": "NONE", "integrityImpact": "NONE", "privilegesRequired": "LOW", "scope": "UNCHANGED", "userInteraction": "NONE", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H", "version": "3.1"}, "exploitabilityScore": 1.8, "impactScore": 3.6, "source": "nvd@nist.gov", "type": "Primary"}]}, "published": "2026-05-06T12:16:44.873", "references": [{"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "url": "https://git.kernel.org/stable/c/6f129a251c2795ba55dd5cc1fdf7e0af3098d848"}, {"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"], "url": "https://git.kernel.org/stable/c/7af58f76e4b404a74c836881a845e6652db8a09f"}, {"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"], "url": "https://git.kernel.org/stable/c/9ea3671d70ee07480d80bebe86696397c4e99fb7"}, {"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"], "url": "https://git.kernel.org/stable/c/b1e3edf688a88c1a3ac41657055d9c136a08cd25"}, {"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "tags": ["Patch"], "url": "https://git.kernel.org/stable/c/ca220141fa8ebae09765a242076b2b77338106b0"}, {"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "url": "https://git.kernel.org/stable/c/d6dcbcc8d630d14e9651fe93a9386b35f4dcfd56"}], "sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "vulnStatus": "Modified", "weaknesses": [{"description": [{"lang": "en", "value": "CWE-401"}], "source": "nvd@nist.gov", "type": "Primary"}]}