From: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Zhiyu Zhang <zhiyuzhang999@gmail.com>,
viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz,
linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] fat: avoid parent link count underflow in rmdir
Date: Tue, 13 Jan 2026 01:20:58 +0900 [thread overview]
Message-ID: <87ms2idcph.fsf@mail.parknet.co.jp> (raw)
In-Reply-To: <87secph8yi.fsf@mail.parknet.co.jp>
Ping?
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> writes:
> Zhiyu Zhang <zhiyuzhang999@gmail.com> writes:
>
>> Corrupted FAT images can leave a directory inode with an incorrect
>> i_nlink (e.g. 2 even though subdirectories exist). rmdir then
>> unconditionally calls drop_nlink(dir) and can drive i_nlink to 0,
>> triggering the WARN_ON in drop_nlink().
>>
>> Add a sanity check in vfat_rmdir() and msdos_rmdir(): only drop the
>> parent link count when it is at least 3, otherwise report a filesystem
>> error.
>>
>> Fixes: 9a53c3a783c2 ("[PATCH] r/o bind mounts: unlink: monitor i_nlink")
>> Reported-by: Zhiyu Zhang <zhiyuzhang999@gmail.com>
>> Closes: https://lore.kernel.org/linux-fsdevel/aVN06OKsKxZe6-Kv@casper.infradead.org/T/#t
>> Tested-by: Zhiyu Zhang <zhiyuzhang999@gmail.com>
>> Signed-off-by: Zhiyu Zhang <zhiyuzhang999@gmail.com>
>
> Looks good. Thanks.
>
> Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
>
>> ---
>> fs/fat/namei_msdos.c | 7 ++++++-
>> fs/fat/namei_vfat.c | 7 ++++++-
>> 2 files changed, 12 insertions(+), 2 deletions(-)
>>
>> diff --git a/fs/fat/namei_msdos.c b/fs/fat/namei_msdos.c
>> index 0b920ee40a7f..262ec1b790b5 100644
>> --- a/fs/fat/namei_msdos.c
>> +++ b/fs/fat/namei_msdos.c
>> @@ -325,7 +325,12 @@ static int msdos_rmdir(struct inode *dir, struct dentry *dentry)
>> err = fat_remove_entries(dir, &sinfo); /* and releases bh */
>> if (err)
>> goto out;
>> - drop_nlink(dir);
>> + if (dir->i_nlink >= 3)
>> + drop_nlink(dir);
>> + else {
>> + fat_fs_error(sb, "parent dir link count too low (%u)",
>> + dir->i_nlink);
>> + }
>>
>> clear_nlink(inode);
>> fat_truncate_time(inode, NULL, S_CTIME);
>> diff --git a/fs/fat/namei_vfat.c b/fs/fat/namei_vfat.c
>> index 5dbc4cbb8fce..47ff083cfc7e 100644
>> --- a/fs/fat/namei_vfat.c
>> +++ b/fs/fat/namei_vfat.c
>> @@ -803,7 +803,12 @@ static int vfat_rmdir(struct inode *dir, struct dentry *dentry)
>> err = fat_remove_entries(dir, &sinfo); /* and releases bh */
>> if (err)
>> goto out;
>> - drop_nlink(dir);
>> + if (dir->i_nlink >= 3)
>> + drop_nlink(dir);
>> + else {
>> + fat_fs_error(sb, "parent dir link count too low (%u)",
>> + dir->i_nlink);
>> + }
>>
>> clear_nlink(inode);
>> fat_truncate_time(inode, NULL, S_ATIME|S_MTIME);
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
next prev parent reply other threads:[~2026-01-12 16:21 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-01 11:11 [PATCH] fat: avoid parent link count underflow in rmdir Zhiyu Zhang
2026-01-01 11:24 ` OGAWA Hirofumi
2026-01-12 16:20 ` OGAWA Hirofumi [this message]
2026-01-12 17:45 ` Zhiyu Zhang
2026-01-12 17:52 ` Andrew Morton
2026-01-12 18:16 ` OGAWA Hirofumi
2026-01-12 18:39 ` Andrew Morton
2026-01-13 9:20 ` Christian Brauner
2026-01-13 10:08 ` OGAWA Hirofumi
2026-01-14 16:15 ` Christian Brauner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ms2idcph.fsf@mail.parknet.co.jp \
--to=hirofumi@mail.parknet.co.jp \
--cc=akpm@linux-foundation.org \
--cc=brauner@kernel.org \
--cc=jack@suse.cz \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=viro@zeniv.linux.org.uk \
--cc=zhiyuzhang999@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.