Re: [RFC PATCH 0/1] vfs: pass S_IFDIR mode to vfs_prepare_mode()
From: NeilBrown
Date: Fri Jun 12 2026 - 21:45:08 EST
On Fri, 12 Jun 2026, Jori Koolstra wrote:
> There is a comment in vfs_prepare_mode() that says:
>
> Note that it's currently valid for @type to be 0 if a directory is
> created. Filesystems raise that flag individually and we need to check
> whether each filesystem can deal with receiving S_IFDIR from the vfs
> before we enforce a non-zero type.
>
> This is a bit challenging since there are many filesystems. Claude Opus
> 4.8 was used to generate the context for each mkdir implementation from
> which it can be judged whether passing S_IFDIR is safe. The result was
> then verified by hand by looking at how the mode argument is used in
> each case. To check whether all mkdir implementations are convered,
> 'rg "\.mkdir" ' was used and checked against the list of uses Claude
> found.
>
> The only mkdir implementation that I am not as sure of is
> cifs_mkdir(). So this goes cc to the cifs people. But of course, I might
> have made errors in other places (except probably not for the A list as
> those are all just mode | S_IFDIR cases without other uses of mode
> besides logging)
I agree that cifs_mkdir() is not obviously safe.
I think coda_mkdir() and fuse_mkdir() at also not obviously safe.
In all three cases the mode, which now has S_IFDIR included, is sent
unchanged to something outside of Linux - either user-space or over at
network connection.
I think you patch which adds S_IFDIR to mode should mask it back out in
those three functions. Then we could be certain it is safe.
The maintainers of those filesystems might then choose to remove the
mask if they know it to be safe to do so
Thanks,
NeilBrown