Hello,

Applied, thanks!

Samuel

Milos Nikic, le mar. 27 oct. 2026 21:32:21 -0700, a ecrit:
> Hello,
> 
> Three small libdiskfs fixes, independent of the journal work.
> 
> Patch 1: two more exits in diskfs_rename_dir with the bug fixed in
> 117ad2e56.  I missed them then, as they come before the lookup that
> locks the directory being moved, but they unlock it all the same.  Any
> user hits it by renaming a directory into one they cannot write:
> 
>   $ mkdir ~/d && mv ~/d /usr/
> 
> That unlocks a free mutex, which goes unnoticed; a thread holding it
> at that moment would lose its lock.
> 
> Patch 2: a directory that was removed but is still held (a process's
> working directory, an open port) accepts new names.  The file entered
> is reachable from nowhere, and once the directory goes, e2fsck reports
> it as an unattached inode:
> 
>   $ mkdir /tmp/d && cd /tmp/d && rmdir /tmp/d && touch x; echo $?
>   0
> 
> With the patch the create fails with ENOENT, as on Linux.  A rename
> into such a directory is refused too, before ".." is rewritten.
> 
> Patch 3: on a filesystem mounted with -s, a create that fails (no
> space, no free inode) called diskfs_file_update with a null node and
> killed the translator.
> 
> Thanks,
> Milos
> 
> Milos Nikic (3):
>   libdiskfs: Do not unlock the directory being moved before locking it
>   libdiskfs: Do not enter names in a removed directory
>   libdiskfs: Do not update a node that a failed create did not make
> 
>  libdiskfs/dir-lookup.c  |  4 +++-
>  libdiskfs/dir-renamed.c | 14 +++++++++++++-
>  libdiskfs/direnter.c    |  9 +++++++++
>  3 files changed, 25 insertions(+), 2 deletions(-)
> 
> -- 
> 2.56.0
> 

-- 
Samuel
/*
 * Oops. The kernel tried to access some bad page. We'll have to
 * terminate things with extreme prejudice.
*/
die_if_kernel("Oops", regs, error_code);
(From linux/arch/i386/mm/fault.c)                                  

Reply via email to