[Devel] [PATCH VZ10 1/2] anon_inode: rework assertions
Vladimir Riabchun
vladimir.riabchun at virtuozzo.com
Mon Jul 27 18:24:40 MSK 2026
On 7/27/26 17:21, Pavel Tikhomirov wrote:
>
>
> On 7/27/26 17:18, Vladimir Riabchun wrote:
>>
>>
>> On 7/27/26 14:22, Pavel Tikhomirov wrote:
>>> From: Christian Brauner <brauner at kernel.org>
>>>
>>> Making anonymous inodes regular files comes with a lot of risk and
>>> regression potential as evidenced by a recent hickup in io_uring. We're
>>> better of continuing to not have them be regular files. Since we have
>>> S_ANON_INODE we can port all of our assertions easily.
>>>
>>> Link: https://lore.kernel.org/20250702-work-fixes-v1-1-ff76ea589e33@kernel.org
>>> Fixes: cfd86ef7e8e7 ("anon_inode: use a proper mode internally")
>>> Acked-by: Jens Axboe <axboe at kernel.dk>
>>> Cc: stable at kernel.org
>>> Reported-by: Jens Axboe <axboe at kernel.dk>
>>> Signed-off-by: Christian Brauner <brauner at kernel.org>
>>>
>>> (cherry picked from commit 1e7ab6f67824343ee3e96f100f0937c393749a8a)
>>>
>>> This fixes CRIU dump of processes that use AIO, since CRIU does not
>>> expect S_IFREG on AIO inodes.
>>>
>>> vz10 backport notes:
>>> - drop debug with missing VFS_WARN_ON_ONCE/VFS_BUG_ON_INODE
>>
>> Any particular reason for this drop? These checks seem harmless and
>> dropping them may add some work during the rebase.
>
> We don't have those warning-helpers, so I drop related hunks to avoid
> porting not directly related patches.
Fair.
>
>>
>> Other than that looks good.
>> Reviewed-by: Vladimir Riabchun <vladimir.riabchun at virtuozzo.com>
>>
>>> - add fput(file) on the introduced error paths in do_open_execat()
>>>
>>> Feature: ve: CRIU support
>>> https://virtuozzo.atlassian.net/browse/VSTOR-139264
>>> Signed-off-by: Pavel Tikhomirov <ptikhomirov at virtuozzo.com>
>>> ---
>>> fs/exec.c | 8 ++++++--
>>> fs/libfs.c | 8 +++-----
>>> 2 files changed, 9 insertions(+), 7 deletions(-)
>>>
>>> diff --git a/fs/exec.c b/fs/exec.c
>>> index dd5de1a4a9d6a..e861a54b491f8 100644
>>> --- a/fs/exec.c
>>> +++ b/fs/exec.c
>>> @@ -921,13 +921,17 @@ static struct file *do_open_execat(int fd, struct filename *name, int flags)
>>> if (IS_ERR(file))
>>> return file;
>>> + if (path_noexec(&file->f_path)) {
>>> + fput(file);
>>> + return ERR_PTR(-EACCES);
>>> + }
>>> +
>>> /*
>>> * In the past the regular type check was here. It moved to may_open() in
>>> * 633fb6ac3980 ("exec: move S_ISREG() check earlier"). Since then it is
>>> * an invariant that all non-regular files error out before we get here.
>>> */
>>> - if (WARN_ON_ONCE(!S_ISREG(file_inode(file)->i_mode)) ||
>>> - path_noexec(&file->f_path)) {
>>> + if (WARN_ON_ONCE(!S_ISREG(file_inode(file)->i_mode))) {
>>> fput(file);
>>> return ERR_PTR(-EACCES);
>>> }
>>> diff --git a/fs/libfs.c b/fs/libfs.c
>>> index c4a305967619f..af191a388303c 100644
>>> --- a/fs/libfs.c
>>> +++ b/fs/libfs.c
>>> @@ -1652,12 +1652,10 @@ struct inode *alloc_anon_inode(struct super_block *s)
>>> */
>>> inode->i_state = I_DIRTY;
>>> /*
>>> - * Historically anonymous inodes didn't have a type at all and
>>> - * userspace has come to rely on this. Internally they're just
>>> - * regular files but S_IFREG is masked off when reporting
>>> - * information to userspace.
>>> + * Historically anonymous inodes don't have a type at all and
>>> + * userspace has come to rely on this.
>>> */
>>> - inode->i_mode = S_IFREG | S_IRUSR | S_IWUSR;
>>> + inode->i_mode = S_IRUSR | S_IWUSR;
>>> inode->i_uid = current_fsuid();
>>> inode->i_gid = current_fsgid();
>>> inode->i_flags |= S_PRIVATE | S_ANON_INODE;
>>
>
--
Best regards, Riabchun Vladimir
Linux Kernel Developer, Virtuozzo
More information about the Devel
mailing list