{"id":21587,"date":"2026-09-12T04:31:23","date_gmt":"2026-09-11T20:31:23","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89665"},"modified":"2026-09-12T04:31:23","modified_gmt":"2026-09-11T20:31:23","slug":"cve-2026-89665","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89665","title":{"rendered":"CVE-2026-89665 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nnfsd: reject out-of-r"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: reject out-of-range useconds in NFSv2 SETATTR\/CREATE<\/p>\n<p>The NFSv2 sattr decoder converts the wire useconds to nanoseconds in<br \/>\nsvcxdr_decode_sattr():<\/p>\n<p>\tiap-&gt;ia_atime.tv_nsec = tmp2 * NSEC_PER_USEC;<\/p>\n<p>tmp2 is a u32 and NSEC_PER_USEC is 1000, so the product is computed in<br \/>\nunsigned long. On ILP32 that is 32 bits, and an out-of-range useconds<br \/>\nvalue such as 4294968 wraps to tv_nsec == 704. The corruption therefore<br \/>\nhappens during decode, before any proc function can inspect the value,<br \/>\nand a later range check on tv_nsec would see an in-range result and<br \/>\naccept it. Rejecting in the decoder yields an RPC GARBAGE_ARGS reply.<br \/>\nNFSv2 defines no NFSERR_INVAL, so there is no NFS-level status to return<br \/>\nfor a malformed time argument, and the check cannot move to the proc<br \/>\nfunction the way the v3\/v4 nsec range checks do.<\/p>\n<p>Guard the raw useconds before the multiplication and reject values<br \/>\ngreater than 1000000. useconds == 1000000 is kept: it is the Sun<br \/>\nconvention for &#8220;set to the current server time&#8221;, and the in-tree Linux<br \/>\nNFSv2 client emits it in both the atime and the mtime field for a plain<br \/>\ntouch \/ utimes(file, NULL) (see encode_sattr() and<br \/>\nxdr_encode_current_server_time() in fs\/nfs\/nfs2xdr.c). Rejecting 1000000<br \/>\nwould turn that common operation into a hard decode failure for both<br \/>\nSETATTR and CREATE. 1000000 * NSEC_PER_USEC is 10^9, which does not wrap<br \/>\non ILP32, so the Sun convention value passes through safely. Only<br \/>\ngenuinely out-of-range values (&gt; 1000000) are rejected. The atime and<br \/>\nmtime guards are therefore symmetric.<\/p>\n<p>The decoder only applied the Sun convention in the mtime block, which<br \/>\nclears ATTR_ATIME_SET|ATTR_MTIME_SET when mtime useconds == 1000000. If a<br \/>\nclient puts 1000000 in the atime field but not in the mtime field, the<br \/>\natime block stored an out-of-range tv_nsec (10^9) and left ATTR_ATIME_SET<br \/>\nset, so the bogus value reached the filesystem. Apply the convention in<br \/>\nthe atime block as well, clearing ATTR_ATIME_SET so the server uses its<br \/>\ncurrent time and ignores the value. Only ATTR_ATIME_SET is cleared there.<br \/>\nThe mtime block keeps its existing behavior, where 1000000 means &#8220;set<br \/>\nboth atime and mtime to now&#8221;.<\/p>\n<p>[ cel: various tweaks, addenda, and clean-ups ]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>nfsd: reject out-of-range useconds in NFSv2 SETATTR\/CREATE<\/p>\n<p>The NFSv2 sattr decoder converts the wire useconds to nanoseconds in<br \/>\nsv<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21587","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21587","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=21587"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21587"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21587"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}