FAILED: patch "[PATCH] ubifs: report correct st_size for encrypted symlinks" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 064c734986011390b4d111f1a99372b7f26c3850 Mon Sep 17 00:00:00 2001
From: Eric Biggers <[email protected]>
Date: Thu, 1 Jul 2021 23:53:49 -0700
Subject: [PATCH] ubifs: report correct st_size for encrypted symlinks
The stat() family of syscalls report the wrong size for encrypted symlinks, which has caused breakage in several userspace programs.
Fix this by calling fscrypt_symlink_getattr() after ubifs_getattr() for encrypted symlinks. This function computes the correct size by reading and decrypting the symlink target (if it's not already cached).
For more details, see the commit which added fscrypt_symlink_getattr().
fs/ubifs/file.c +12 -1
@@ -1630,6 +1630,17 @@ static const char *ubifs_get_link(struct dentry *dentry,return fscrypt_get_symlink (inode, ui->data, ui->data_len, done); } +static int ubifs_symlink_getattr (struct user_namespace *mnt_userns, +const struct path *path,struct kstat *stat, +u32 request_mask,unsigned int query_flags) +{ +ubifs_getattr (mnt_userns, path, stat, request_mask, query_flags); + +if (IS_ENCRYPTED (d_inode (path->dentry))) +return fscrypt_symlink_getattr (path, stat); +return 0 ; +} +const struct address_space_operations ubifs_file_address_operations = { .readpage = ubifs_readpage, .writepage = ubifs_writepage,
@@ -1655,7 +1666,7 @@ const struct inode_operations ubifs_file_inode_operations = {const struct inode_operations ubifs_symlink_inode_operations = { .get_link = ubifs_get_link, .setattr = ubifs_setattr, - .getattr = ubifs_getattr, + .getattr = ubifs_symlink_getattr, .listxattr = ubifs_listxattr, .update_time = ubifs_update_time, };