{"id":25534,"date":"2026-09-18T04:31:31","date_gmt":"2026-09-17T20:31:31","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90125"},"modified":"2026-09-18T04:31:31","modified_gmt":"2026-09-17T20:31:31","slug":"cve-2026-90125","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-90125","title":{"rendered":"CVE-2026-90125 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nsmb: client: fix requ"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>smb: client: fix request buffer leak in smb2_new_read_req()<\/p>\n<p>smb2_new_read_req() allocates the request buffer with<br \/>\nsmb2_plain_req_init() but only publishes it to the caller with<br \/>\n*buf = req at the very end of the function. Two error returns sit in<br \/>\nbetween:<\/p>\n<p>\trc = smb2_plain_req_init(SMB2_READ, io_parms-&gt;tcon, server,<br \/>\n\t\t\t\t (void **) &amp;req, total_len);<br \/>\n\tif (rc)<br \/>\n\t\treturn rc;<\/p>\n<p>\tif (server == NULL)<br \/>\n\t\treturn -ECONNABORTED;<br \/>\n\t[&#8230;]<br \/>\n\t\trdata-&gt;mr = smbd_register_mr(server-&gt;smbd_conn,<br \/>\n\t\t\t\t\t     &amp;rdata-&gt;subreq.io_iter,<br \/>\n\t\t\t\t\t     true, need_invalidate);<br \/>\n\t\tif (!rdata-&gt;mr)<br \/>\n\t\t\treturn -EAGAIN;<\/p>\n<p>On either of them the buffer is neither released nor handed back, so<br \/>\nit is leaked. The caller cannot clean up after it: smb2_async_readv()<br \/>\ndoes &#8216;goto out&#8217; on a non-zero return, which skips the<br \/>\ncifs_small_buf_release(buf) at async_readv_out, and buf has not been<br \/>\nassigned at that point in any case.<\/p>\n<p>The write path has never had this problem. smb2_async_writev()<br \/>\nregisters the memory region inline and jumps to its release label<br \/>\ninstead of returning:<\/p>\n<p>\twdata-&gt;mr = smbd_register_mr(&#8230;);<br \/>\n\tif (!wdata-&gt;mr) {<br \/>\n\t\trc = -EAGAIN;<br \/>\n\t\tgoto async_writev_out;<br \/>\n\t}<\/p>\n<p>Commit b7972092199f (&#8220;cifs: smbd: Retry on memory registration<br \/>\nfailure&#8221;) changed both sides from -ENOBUFS to -EAGAIN in a single<br \/>\npatch, which puts the two shapes next to each other.<\/p>\n<p>Only the -EAGAIN return is reachable in practice, because<br \/>\nsmb2_plain_req_init() calls smb2_reconnect() first and that already<br \/>\nfails with -EIO when server is NULL, before anything is allocated.<br \/>\nBoth returns are given the same treatment here rather than leaving<br \/>\none of them correct only by accident.<\/p>\n<p>Because -EAGAIN is a replayable error, the failure also reaches the<br \/>\nretry block at the end of smb2_async_readv(), which marks the<br \/>\nsubrequest NETFS_SREQ_NEED_RETRY, so a failing registration can be<br \/>\nretried rather than ending the I\/O, and every attempt that reaches it<br \/>\nleaks another buffer. smb2_should_replay() short-circuits on<br \/>\ntcon-&gt;retry, so on a hard mount the attempt count is not bounded by<br \/>\nthe retrans setting.<\/p>\n<p>Only the asynchronous read path is affected. The synchronous<br \/>\nSMB2_read() caller passes rdata == NULL and the memory registration<br \/>\nblock is guarded on rdata.<\/p>\n<p>The memory registration failure path was pointed out by the Sashiko<br \/>\nAI reviewer while it was reviewing an unrelated patch to<br \/>\nsmb2_async_readv().<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>smb: client: fix request buffer leak in smb2_new_read_req()<\/p>\n<p>smb2_new_read_req() allocates the request buffer with<br \/>\nsmb2_plain_req_i<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-25534","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/25534","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln"}],"about":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/types\/vuln"}],"wp:attachment":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=25534"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=25534"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=25534"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}