[PATCH v2] fscrypt: Fix uninit-value in ovl_fill_real

Qing Wang posted 1 patch 1 week, 5 days ago
fs/overlayfs/readdir.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH v2] fscrypt: Fix uninit-value in ovl_fill_real
Posted by Qing Wang 1 week, 5 days ago
Syzbot reported a KMSAN uninit-value issue in ovl_fill_real.

This iusse's call chain is:
__do_sys_getdents64()
    -> iterate_dir()
        ...
            -> ext4_readdir()
                -> fscrypt_fname_alloc_buffer() // alloc
                -> fscrypt_fname_disk_to_usr // write without tail '\0'
                -> dir_emit()
                    -> ovl_fill_real() // read by strcmp()

The string is used to store the decrypted directory entry name for an
encrypted inode. As shown in the call chain, fscrypt_fname_disk_to_usr()
write it wthout null-terminate. However, ovl_fill_real() uses strcmp() to
compare the name against "..", which assumes a null-terminated string and
may trigger a KMSAN uninit-value warning when the buffer tail contains
uninit data.

Reported-by: syzbot+d130f98b2c265fae5297@syzkaller.appspotmail.com
Fixes: 4edb83bb1041 ("ovl: constant d_ino for non-merge dirs")
Closes: https://syzkaller.appspot.com/bug?extid=d130f98b2c265fae5297
Signed-off-by: Qing Wang <wangqing7171@gmail.com>
---
 fs/overlayfs/readdir.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/fs/overlayfs/readdir.c b/fs/overlayfs/readdir.c
index 160960bb0ad0..e852b38949b6 100644
--- a/fs/overlayfs/readdir.c
+++ b/fs/overlayfs/readdir.c
@@ -755,7 +755,7 @@ static bool ovl_fill_real(struct dir_context *ctx, const char *name,
 	struct dir_context *orig_ctx = rdt->orig_ctx;
 	bool res;
 
-	if (rdt->parent_ino && strcmp(name, "..") == 0) {
+	if (rdt->parent_ino && namelen == 2 && strncmp(name, "..", namelen) == 0) {
 		ino = rdt->parent_ino;
 	} else if (rdt->cache) {
 		struct ovl_cache_entry *p;
-- 
2.34.1
Re: [PATCH v2] fscrypt: Fix uninit-value in ovl_fill_real
Posted by Eric Biggers 1 week, 4 days ago
On Mon, Jan 26, 2026 at 02:22:16PM +0800, Qing Wang wrote:
> ---
>  fs/overlayfs/readdir.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

This is an overlayfs patch, so please title it appropriately and use
get_maintainer.pl to get the correct recipients.  You can leave
linux-fscrypt@vger.kernel.org on Cc.

- Eric
Re: [PATCH] fscrypt: Fix uninit-value in ovl_fill_real
Posted by Qing Wang 1 week, 4 days ago
On Tue, 27 Jan 2026 at 11:47, Eric Biggers <ebiggers@kernel.org> wrote:
> This is an overlayfs patch, so please title it appropriately and use
> get_maintainer.pl to get the correct recipients.  You can leave
> linux-fscrypt@vger.kernel.org on Cc.

Thank you again for your guidance.

--
Best regards,
Qing