{"id":"CVE-2026-90125","title":"In the Linux kernel, the following vulnerability has been resolved:\n\nsmb: client: fix request buffer leak in smb2_new_read_req()\n\nsmb2_new_read_req() allocates the request buffer with\nsmb2_plain_req_init() but only publishes it to the ca…","summary":"In the Linux kernel, the following vulnerability has been resolved:\n\nsmb: client: fix request buffer leak in smb2_new_read_req()\n\nsmb2_new_read_req() allocates the request buffer with\nsmb2_plain_req_init() but only publishes it to the ca…","severity":"medium","vendor":"Linux","product":"Linux","affected":["Linux >= bd3dcc6a22a9186ed78da51ce09e889803552189 < 58066940076b90c16e821fd6f9767cd979cbdb5e","Linux >= bd3dcc6a22a9186ed78da51ce09e889803552189 < 12092ed28434bf41e08d41e3c5269eb6b337fc02","Linux >= bd3dcc6a22a9186ed78da51ce09e889803552189 < 442c5f1358ced0d4e716778ac06f1e323a7e4f21","Linux >= bd3dcc6a22a9186ed78da51ce09e889803552189 < 73f6bdb0380486ab37fe12cd74de20abfaf5d3ae","Linux >= bd3dcc6a22a9186ed78da51ce09e889803552189 < deb6468f4164640e4dc875f008aa449cf55987a5","Linux 4.16"],"published":"2026-09-17","updated":"2026-09-17","sourceUpdated":"2026-09-17T17:17:04.790","source":"NVD","sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-90125","references":[{"url":"https://git.kernel.org/stable/c/12092ed28434bf41e08d41e3c5269eb6b337fc02","label":"416baaa9-dc9f-4396-8d5f-8c081fb06d67"},{"url":"https://git.kernel.org/stable/c/442c5f1358ced0d4e716778ac06f1e323a7e4f21","label":"416baaa9-dc9f-4396-8d5f-8c081fb06d67"},{"url":"https://git.kernel.org/stable/c/58066940076b90c16e821fd6f9767cd979cbdb5e","label":"416baaa9-dc9f-4396-8d5f-8c081fb06d67"},{"url":"https://git.kernel.org/stable/c/73f6bdb0380486ab37fe12cd74de20abfaf5d3ae","label":"416baaa9-dc9f-4396-8d5f-8c081fb06d67"},{"url":"https://git.kernel.org/stable/c/deb6468f4164640e4dc875f008aa449cf55987a5","label":"416baaa9-dc9f-4396-8d5f-8c081fb06d67"},{"url":"https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-90125.json"},{"url":"https://access.redhat.com/security/cve/CVE-2026-90125"},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=2536723"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-90125"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-90125"},{"url":"https://git.kernel.org/pub/scm/linux/security/vulns.git/plain/cve/published/2026/CVE-2026-90125.mbox"}],"tags":["nvd","cve.org","csaf","vex","red-hat"],"ingestedAt":"2026-09-17T16:21:47.882Z","epss":0.002,"epssPercentile":0.09783,"cvss":5.5,"cvssVector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H","cvssSource":"vendor","cwe":["CWE-772"],"slug":"CVE-2026-90125","body":"## Overview\n\nIn the Linux kernel, the following vulnerability has been resolved:\n\nsmb: client: fix request buffer leak in smb2_new_read_req()\n\nsmb2_new_read_req() allocates the request buffer with\nsmb2_plain_req_init() but only publishes it to the caller with\n*buf = req at the very end of the function. Two error returns sit in\nbetween:\n\n\trc = smb2_plain_req_init(SMB2_READ, io_parms->tcon, server,\n\t\t\t\t (void **) &req, total_len);\n\tif (rc)\n\t\treturn rc;\n\n\tif (server == NULL)\n\t\treturn -ECONNABORTED;\n\t[...]\n\t\trdata->mr = smbd_register_mr(server->smbd_conn,\n\t\t\t\t\t     &rdata->subreq.io_iter,\n\t\t\t\t\t     true, need_invalidate);\n\t\tif (!rdata->mr)\n\t\t\treturn -EAGAIN;\n\nOn either of them the buffer is neither released nor handed back, so\nit is leaked. The caller cannot clean up after it: smb2_async_readv()\ndoes 'goto out' on a non-zero return, which skips the\ncifs_small_buf_release(buf) at async_readv_out, and buf has not been\nassigned at that point in any case.\n\nThe write path has never had this problem. smb2_async_writev()\nregisters the memory region inline and jumps to its release label\ninstead of returning:\n\n\twdata->mr = smbd_register_mr(...);\n\tif (!wdata->mr) {\n\t\trc = -EAGAIN;\n\t\tgoto async_writev_out;\n\t}\n\nCommit b7972092199f (\"cifs: smbd: Retry on memory registration\nfailure\") changed both sides from -ENOBUFS to -EAGAIN in a single\npatch, which puts the two shapes next to each other.\n\nOnly the -EAGAIN return is reachable in practice, because\nsmb2_plain_req_init() calls smb2_reconnect() first and that already\nfails with -EIO when server is NULL, before anything is allocated.\nBoth returns are given the same treatment here rather than leaving\none of them correct only by accident.\n\nBecause -EAGAIN is a replayable error, the failure also reaches the\nretry block at the end of smb2_async_readv(), which marks the\nsubrequest NETFS_SREQ_NEED_RETRY, so a failing registration can be\nretried rather than ending the I/O, and every attempt that reaches it\nleaks another buffer. smb2_should_replay() short-circuits on\ntcon->retry, so on a hard mount the attempt count is not bounded by\nthe retrans setting.\n\nOnly the asynchronous read path is affected. The synchronous\nSMB2_read() caller passes rdata == NULL and the memory registration\nblock is guarded on rdata.\n\nThe memory registration failure path was pointed out by the Sashiko\nAI reviewer while it was reviewing an unrelated patch to\nsmb2_async_readv().\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n## Vendor advisories\n\n- **Red Hat VEX** · Low · affected: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 8, Red Hat Enterprise Linux 9, Red Hat OpenShift Container Platform 4 · no fix planned: Red Hat Enterprise Linux 10, Red Hat Enterprise Linux 8, Red Hat Enterprise Linux 9, Red Hat OpenShift Container Platform 4 · updated 2026-09-30 · [vex](https://security.access.redhat.com/data/csaf/v2/vex/2026/cve-2026-90125.json)","depth":"sunlit","depthScore":30,"depthScoreParts":{"impact":30.3,"likelihood":0,"exploitation":0,"ransomware":0},"changes":[{"seq":214173,"id":"CVE-2026-90125","ts":1790841323546,"field":"cvss","old":null,"new":"5.5"},{"seq":214172,"id":"CVE-2026-90125","ts":1790841323546,"field":"severity","old":"none","new":"medium"}]}