{"id":21690,"date":"2026-09-12T04:31:32","date_gmt":"2026-09-11T20:31:32","guid":{"rendered":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89768"},"modified":"2026-09-12T04:31:32","modified_gmt":"2026-09-11T20:31:32","slug":"cve-2026-89768","status":"publish","type":"vuln","link":"https:\/\/www.54iter.cn\/?vuln=cve-2026-89768","title":{"rendered":"CVE-2026-89768 &#8211; In the Linux kernel, the following vulnerability has been resolved:\n\nfs: fix user path of"},"content":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>fs: fix user path of nested backing files<\/p>\n<p>backing_file_open() derives the path to be stored in the new backing<br \/>\nfile from user_file-&gt;f_path.  This is incorrect when user_file itself<br \/>\nis a backing file, which is the case for nested stacking filesystems,<br \/>\ne.g. overlayfs mounts where the lowerdir of one overlayfs is the merged<br \/>\ndirectory of another.  Since commit def3ae83da02 (&#8220;fs: store real path<br \/>\ninstead of fake path in backing file f_path&#8221;) the f_path of a backing<br \/>\nfile holds the real path of the intermediate layer, not the path that<br \/>\nthe user opened.<\/p>\n<p>Commit 924577e4f6ca (&#8220;ovl: Fix nested backing file paths&#8221;) fixed this<br \/>\nfor such configurations by passing file_user_path() from<br \/>\novl_open_realfile().  However, commit 6af36aeb147a (&#8220;lsm: add<br \/>\nbacking_file LSM hooks&#8221;) changed the first argument of<br \/>\nbacking_file_open() from the user path back to the user file and<br \/>\nderived the path from user_file-&gt;f_path again, silently re-introducing<br \/>\nthe problem.<\/p>\n<p>As a result, files mapped through a nested overlayfs show the wrong<br \/>\npath in \/proc\/\/maps and in perf\/ftrace mmap records.  For example,<br \/>\nwith two nested overlayfs mounts:<\/p>\n<p>  mkdir -p \/ovl\/{lower,upper,work,merged} \/ovl\/nested<br \/>\n  echo hello &gt; \/ovl\/lower\/foo<br \/>\n  mount -t overlay overlay<br \/>\n\t-o lowerdir=\/ovl\/lower,upperdir=\/ovl\/upper,workdir=\/ovl\/work<br \/>\n\t\/ovl\/merged<br \/>\n  # at least two lowerdirs are needed when upperdir is nonexistent<br \/>\n  mount -t overlay overlay<br \/>\n\t-o lowerdir=\/ovl\/merged:\/ovl\/lower \/ovl\/nested<\/p>\n<p>mapping \/ovl\/nested\/foo shows a disconnected path instead of the user<br \/>\npath:<\/p>\n<p>  # readlink \/proc\/self\/fd\/3<br \/>\n  \/ovl\/nested\/foo<br \/>\n  # grep foo \/proc\/self\/maps<br \/>\n  7f6e2c100000-7f6e2c101000 r&#8211;s 00000000 00:24 15813027 \/foo<\/p>\n<p>The bogus path is derived from the f_path of the intermediate backing<br \/>\nfile, whose mount is a private clone that d_path() cannot resolve.<\/p>\n<p>Fix this by using file_user_path(), which returns the outermost<br \/>\nuser-visible path for backing files and falls back to<br \/>\n&amp;user_file-&gt;f_path for regular files.  This restores the behavior of<br \/>\ncommit 924577e4f6ca (&#8220;ovl: Fix nested backing file paths&#8221;) for<br \/>\noverlayfs and also fixes the same problem for the other<br \/>\nbacking_file_open() callers, fuse passthrough and erofs ishare, when<br \/>\ntheir user file is itself a backing file.<\/p>\n<p>backing_tmpfile_open() has the same pattern but is not affected: it is<br \/>\nonly called by ovl_create_tmpfile() for the upper layer, and another<br \/>\noverlayfs is rejected as upperdir by the DCACHE_OP_REAL check in<br \/>\novl_mount_dir_check(), so its user_file can never be a backing file.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In the Linux kernel, the following vulnerability has been resolved:<\/p>\n<p>fs: fix user path of nested backing files<\/p>\n<p>backing_file_open() derives the path to be stored in the new backing<br \/>\nfile from user_file<\/p>\n","protected":false},"template":"","meta":[],"categories":[],"tags":[],"class_list":["post-21690","vuln","type-vuln","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.54iter.cn\/index.php?rest_route=\/wp\/v2\/vuln\/21690","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=21690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=21690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.54iter.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=21690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}