{"id":28495,"date":"2026-09-25T00:31:33","date_gmt":"2026-09-24T16:31:33","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93231"},"modified":"2026-09-25T00:31:33","modified_gmt":"2026-09-24T16:31:33","slug":"cve-2026-93231","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-93231","title":{"rendered":"CVE-2026-93231 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nlockd: fix swapped ar"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>lockd: fix swapped arguments in nlmsvc_match_ip()<\/p>\n<p>When releasing locks by server IP address via \/proc\/fs\/nfsd\/unlock_ip,<br \/>\nnlmsvc_unlock_all_by_ip() calls nlm_traverse_files() with the server<br \/>\nsockaddr as the opaque @data argument:<\/p>\n<p>\tnlm_traverse_files(server_addr, nlmsvc_match_ip, NULL);<\/p>\n<p>The match callback is later invoked from nlm_traverse_locks() as:<\/p>\n<p>\tmatch(lockhost, host);<\/p>\n<p>where the first argument is the nlm_host that owns the lock, and the<br \/>\nsecond argument is the @data that was originally passed down (here the<br \/>\nserver sockaddr).  This is the convention every other match callback<br \/>\nrelies on (nlmsvc_mark_host(), nlmsvc_same_host(), nlmsvc_is_client()):<br \/>\narg1 is the real nlm_host, arg2 is the caller-supplied reference value.<\/p>\n<p>nlmsvc_match_ip() has had these two arguments reversed ever since the<br \/>\nunlock-by-IP feature was introduced in commit 4373ea84c84d (&#8220;lockd:<br \/>\nunlock lockd locks associated with a given server ip&#8221;):<\/p>\n<p>\treturn rpc_cmp_addr(nlm_srcaddr(host), datap);<\/p>\n<p>Here @host is actually the server sockaddr, so nlm_srcaddr(host)<br \/>\ndereferences a struct sockaddr as a struct nlm_host and reads garbage<br \/>\nat the offset of h_srcaddr; meanwhile @datap is actually the lock<br \/>\nowner&#8217;s nlm_host but is compared as a sockaddr.  As a result the<br \/>\ncomparison practically never matches and locks are not released for the<br \/>\nrequested IP.<\/p>\n<p>Swap the arguments so the lock owner&#8217;s source address is compared<br \/>\nagainst the requested server address:<\/p>\n<p>\treturn rpc_cmp_addr(nlm_srcaddr(datap), (struct sockaddr *)host);<\/p>\n<p>[ cel: fix the misleading typedef parameter names too ]<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>lockd: fix swapped arguments in nlmsvc_match_ip()<\/p>\n<p>When releasing locks by server IP address via \/proc\/fs\/nfsd\/unlock_ip,<br \/>\nnlmsvc_un<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-28495","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/28495","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=28495"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=28495"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=28495"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}