Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ext4: fix memory leaks in ext4_fname_{setup_filename,prepare_lookup}

If the filename casefolding fails, we'll be leaking memory from the
fscrypt_name struct, namely from the 'crypto_buf.name' member.

Make sure we free it in the error path on both ext4_fname_setup_filename()
and ext4_fname_prepare_lookup() functions.

Cc: stable@kernel.org
Fixes: 1ae98e295fa2 ("ext4: optimize match for casefolded encrypted dirs")
Signed-off-by: Luís Henriques <lhenriques@suse.de>
Reviewed-by: Eric Biggers <ebiggers@google.com>
Link: https://lore.kernel.org/r/20230803091713.13239-1-lhenriques@suse.de
Signed-off-by: Theodore Ts'o <tytso@mit.edu>

authored by

Luís Henriques and committed by
Theodore Ts'o
7ca4b085 5f02a30e

+4
+4
fs/ext4/crypto.c
··· 33 33 34 34 #if IS_ENABLED(CONFIG_UNICODE) 35 35 err = ext4_fname_setup_ci_filename(dir, iname, fname); 36 + if (err) 37 + ext4_fname_free_filename(fname); 36 38 #endif 37 39 return err; 38 40 } ··· 53 51 54 52 #if IS_ENABLED(CONFIG_UNICODE) 55 53 err = ext4_fname_setup_ci_filename(dir, &dentry->d_name, fname); 54 + if (err) 55 + ext4_fname_free_filename(fname); 56 56 #endif 57 57 return err; 58 58 }