f2fs: restrict setting up inode.i_advise
In order to give advise to f2fs to recognize hot/cold file, it is possible that we can set specific bit in inode.i_advise through setxattr(), but there are several bits which are used internally, such as encrypt_bit, keep_size_bit, they should never be changed through setxattr(). So that this patch 1) adds FADVISE_MODIFIABLE_BITS to filter modifiable bits user given, 2) supports to clear {hot,cold}_file bits. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
Este commit está contenido en:
@@ -94,12 +94,22 @@ static int f2fs_xattr_advise_set(const struct xattr_handler *handler,
|
||||
const char *name, const void *value,
|
||||
size_t size, int flags)
|
||||
{
|
||||
unsigned char old_advise = F2FS_I(inode)->i_advise;
|
||||
unsigned char new_advise;
|
||||
|
||||
if (!inode_owner_or_capable(inode))
|
||||
return -EPERM;
|
||||
if (value == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
F2FS_I(inode)->i_advise |= *(char *)value;
|
||||
new_advise = *(char *)value;
|
||||
if (new_advise & ~FADVISE_MODIFIABLE_BITS)
|
||||
return -EINVAL;
|
||||
|
||||
new_advise = new_advise & FADVISE_MODIFIABLE_BITS;
|
||||
new_advise |= old_advise & ~FADVISE_MODIFIABLE_BITS;
|
||||
|
||||
F2FS_I(inode)->i_advise = new_advise;
|
||||
f2fs_mark_inode_dirty_sync(inode, true);
|
||||
return 0;
|
||||
}
|
||||
|
Referencia en una nueva incidencia
Block a user