]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
binfmt_misc: restore write access before closing files opened by open_exec()
authorZilin Guan <zilin@seu.edu.cn>
Wed, 5 Nov 2025 02:29:23 +0000 (02:29 +0000)
committerChristian Brauner <brauner@kernel.org>
Wed, 5 Nov 2025 13:00:16 +0000 (14:00 +0100)
bm_register_write() opens an executable file using open_exec(), which
internally calls do_open_execat() and denies write access on the file to
avoid modification while it is being executed.

However, when an error occurs, bm_register_write() closes the file using
filp_close() directly. This does not restore the write permission, which
may cause subsequent write operations on the same file to fail.

Fix this by calling exe_file_allow_write_access() before filp_close() to
restore the write permission properly.

Fixes: e7850f4d844e ("binfmt_misc: fix possible deadlock in bm_register_write")
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Link: https://patch.msgid.link/20251105022923.1813587-1-zilin@seu.edu.cn
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/binfmt_misc.c

index a839f960cd4a00323bf34f733ca0faa4cbca9b8e..a8b1d79e4af0748a27c220432e253b2aac65d7bb 100644 (file)
@@ -837,8 +837,10 @@ out:
        inode_unlock(d_inode(root));
 
        if (err) {
-               if (f)
+               if (f) {
+                       exe_file_allow_write_access(f);
                        filp_close(f, NULL);
+               }
                kfree(e);
                return err;
        }