summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFilipe Manana <fdmanana@suse.com>2022-12-20 11:13:33 +0000
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2023-10-10 22:00:46 +0200
commit6cd57f5c779578c2c41f6ab3dedd71aaddca4d9f (patch)
treef1eafca9737f3175eebb237d326cb4a8eb464921
parent6d05a1a7a484f1ff1459c4f5b853d94f839b26b0 (diff)
downloadlinux-6cd57f5c779578c2c41f6ab3dedd71aaddca4d9f.tar.gz
linux-6cd57f5c779578c2c41f6ab3dedd71aaddca4d9f.tar.bz2
linux-6cd57f5c779578c2c41f6ab3dedd71aaddca4d9f.zip
btrfs: fix fscrypt name leak after failure to join log transaction
commit fee4c19937439693f2420a916169d08e88576e8e upstream. When logging a new name, we don't expect to fail joining a log transaction since we know at least one of the inodes was logged before in the current transaction. However if we fail for some unexpected reason, we end up not freeing the fscrypt name we previously allocated. So fix that by freeing the name in case we failed to join a log transaction. Fixes: ab3c5c18e8fa ("btrfs: setup qstr from dentrys using fscrypt helper") Reviewed-by: Sweet Tea Dorminy <sweettea-kernel@dorminy.me> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/btrfs/tree-log.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c
index ab7893debf07..c03ff6a5a7f6 100644
--- a/fs/btrfs/tree-log.c
+++ b/fs/btrfs/tree-log.c
@@ -7491,8 +7491,11 @@ void btrfs_log_new_name(struct btrfs_trans_handle *trans,
* not fail, but if it does, it's not serious, just bail out and
* mark the log for a full commit.
*/
- if (WARN_ON_ONCE(ret < 0))
+ if (WARN_ON_ONCE(ret < 0)) {
+ fscrypt_free_filename(&fname);
goto out;
+ }
+
log_pinned = true;
path = btrfs_alloc_path();