forked from Minki/linux
f2fs: 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 f2fs_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().
Fixes: cbaf042a3c
("f2fs crypto: add symlink encryption")
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20210702065350.209646-4-ebiggers@kernel.org
Signed-off-by: Eric Biggers <ebiggers@google.com>
This commit is contained in:
parent
8c4bca10ce
commit
461b43a8f9
@ -1323,9 +1323,19 @@ static const char *f2fs_encrypted_get_link(struct dentry *dentry,
|
|||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int f2fs_encrypted_symlink_getattr(struct user_namespace *mnt_userns,
|
||||||
|
const struct path *path,
|
||||||
|
struct kstat *stat, u32 request_mask,
|
||||||
|
unsigned int query_flags)
|
||||||
|
{
|
||||||
|
f2fs_getattr(mnt_userns, path, stat, request_mask, query_flags);
|
||||||
|
|
||||||
|
return fscrypt_symlink_getattr(path, stat);
|
||||||
|
}
|
||||||
|
|
||||||
const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
|
const struct inode_operations f2fs_encrypted_symlink_inode_operations = {
|
||||||
.get_link = f2fs_encrypted_get_link,
|
.get_link = f2fs_encrypted_get_link,
|
||||||
.getattr = f2fs_getattr,
|
.getattr = f2fs_encrypted_symlink_getattr,
|
||||||
.setattr = f2fs_setattr,
|
.setattr = f2fs_setattr,
|
||||||
.listxattr = f2fs_listxattr,
|
.listxattr = f2fs_listxattr,
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user