On Wed, 2019-05-22 at 11:50 +0200, Jan Kara wrote: > On Wed 22-05-19 16:28:46, Chengguang Xu wrote: > > Actually maximum length of a valid entry value is not > > ->s_blocksize because header, last entry and entry > > name will also occupy some spaces. This patch > > strengthens the value length check and return -ERANGE > > when the length is larger than allowed maximum length. > > > > Signed-off-by: Chengguang Xu <cgxu519@xxxxxxxxxxx> > > Thanks for the patch! But what's the point of this change? We would return > ERANGE instead of ENOSPC? I don't think that's serious enough to warrant > changing existing behavior... Hi Jan, Thanks for the review. The motivation is seprating error situations of ENOSPC/ERANGE because ENOSPC is giving a hint that we can save an EA entry (name+value > allowed maximum length) by deleting some existing entries. However, as you has pointed out, I also think the difference is not so important because some EA entries (like security index) is invisible for user... Thanks, Chengguang > > > @@ -423,7 +423,10 @@ ext2_xattr_set(struct inode *inode, int name_index, > > const char *name, > > if (name == NULL) > > return -EINVAL; > > name_len = strlen(name); > > - if (name_len > 255 || value_len > sb->s_blocksize) > > + max_len = sb->s_blocksize - sizeof(struct ext2_xattr_header) > > + - sizeof(__u32); > > + if (name_len > 255 || > > + EXT2_XATTR_LEN(name_len) + EXT2_XATTR_SIZE(value_len) > max_len) > > return -ERANGE; > > down_write(&EXT2_I(inode)->xattr_sem); > > if (EXT2_I(inode)->i_file_acl) { > > Honza >