mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-24 13:13:57 +08:00
ext4: remove checks for e_value_block
Currently we don't support xattrs with e_value_block set. We don't allow them to pass initial xattr check so there's no point for checking for this later. Since these tests were untested, bugs were creeping in and not all places which should have checked were checking e_value_block anyway. Signed-off-by: Jan Kara <jack@suse.cz> Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
parent
2de58f1102
commit
1cba423707
@ -643,7 +643,7 @@ static size_t ext4_xattr_free_space(struct ext4_xattr_entry *last,
|
|||||||
size_t *min_offs, void *base, int *total)
|
size_t *min_offs, void *base, int *total)
|
||||||
{
|
{
|
||||||
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
||||||
if (!last->e_value_block && last->e_value_size) {
|
if (last->e_value_size) {
|
||||||
size_t offs = le16_to_cpu(last->e_value_offs);
|
size_t offs = le16_to_cpu(last->e_value_offs);
|
||||||
if (offs < *min_offs)
|
if (offs < *min_offs)
|
||||||
*min_offs = offs;
|
*min_offs = offs;
|
||||||
@ -663,7 +663,7 @@ ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
|
|||||||
/* Compute min_offs and last. */
|
/* Compute min_offs and last. */
|
||||||
last = s->first;
|
last = s->first;
|
||||||
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
||||||
if (!last->e_value_block && last->e_value_size) {
|
if (last->e_value_size) {
|
||||||
size_t offs = le16_to_cpu(last->e_value_offs);
|
size_t offs = le16_to_cpu(last->e_value_offs);
|
||||||
if (offs < min_offs)
|
if (offs < min_offs)
|
||||||
min_offs = offs;
|
min_offs = offs;
|
||||||
@ -671,7 +671,7 @@ ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
|
|||||||
}
|
}
|
||||||
free = min_offs - ((void *)last - s->base) - sizeof(__u32);
|
free = min_offs - ((void *)last - s->base) - sizeof(__u32);
|
||||||
if (!s->not_found) {
|
if (!s->not_found) {
|
||||||
if (!s->here->e_value_block && s->here->e_value_size) {
|
if (s->here->e_value_size) {
|
||||||
size_t size = le32_to_cpu(s->here->e_value_size);
|
size_t size = le32_to_cpu(s->here->e_value_size);
|
||||||
free += EXT4_XATTR_SIZE(size);
|
free += EXT4_XATTR_SIZE(size);
|
||||||
}
|
}
|
||||||
@ -693,7 +693,7 @@ ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
|
|||||||
s->here->e_name_len = name_len;
|
s->here->e_name_len = name_len;
|
||||||
memcpy(s->here->e_name, i->name, name_len);
|
memcpy(s->here->e_name, i->name, name_len);
|
||||||
} else {
|
} else {
|
||||||
if (!s->here->e_value_block && s->here->e_value_size) {
|
if (s->here->e_value_size) {
|
||||||
void *first_val = s->base + min_offs;
|
void *first_val = s->base + min_offs;
|
||||||
size_t offs = le16_to_cpu(s->here->e_value_offs);
|
size_t offs = le16_to_cpu(s->here->e_value_offs);
|
||||||
void *val = s->base + offs;
|
void *val = s->base + offs;
|
||||||
@ -727,8 +727,7 @@ ext4_xattr_set_entry(struct ext4_xattr_info *i, struct ext4_xattr_search *s)
|
|||||||
last = s->first;
|
last = s->first;
|
||||||
while (!IS_LAST_ENTRY(last)) {
|
while (!IS_LAST_ENTRY(last)) {
|
||||||
size_t o = le16_to_cpu(last->e_value_offs);
|
size_t o = le16_to_cpu(last->e_value_offs);
|
||||||
if (!last->e_value_block &&
|
if (last->e_value_size && o < offs)
|
||||||
last->e_value_size && o < offs)
|
|
||||||
last->e_value_offs =
|
last->e_value_offs =
|
||||||
cpu_to_le16(o + size);
|
cpu_to_le16(o + size);
|
||||||
last = EXT4_XATTR_NEXT(last);
|
last = EXT4_XATTR_NEXT(last);
|
||||||
@ -1327,7 +1326,7 @@ static void ext4_xattr_shift_entries(struct ext4_xattr_entry *entry,
|
|||||||
|
|
||||||
/* Adjust the value offsets of the entries */
|
/* Adjust the value offsets of the entries */
|
||||||
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
for (; !IS_LAST_ENTRY(last); last = EXT4_XATTR_NEXT(last)) {
|
||||||
if (!last->e_value_block && last->e_value_size) {
|
if (last->e_value_size) {
|
||||||
new_offs = le16_to_cpu(last->e_value_offs) +
|
new_offs = le16_to_cpu(last->e_value_offs) +
|
||||||
value_offs_shift;
|
value_offs_shift;
|
||||||
BUG_ON(new_offs + le32_to_cpu(last->e_value_size)
|
BUG_ON(new_offs + le32_to_cpu(last->e_value_size)
|
||||||
@ -1726,7 +1725,7 @@ static inline void ext4_xattr_hash_entry(struct ext4_xattr_header *header,
|
|||||||
*name++;
|
*name++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry->e_value_block == 0 && entry->e_value_size != 0) {
|
if (entry->e_value_size != 0) {
|
||||||
__le32 *value = (__le32 *)((char *)header +
|
__le32 *value = (__le32 *)((char *)header +
|
||||||
le16_to_cpu(entry->e_value_offs));
|
le16_to_cpu(entry->e_value_offs));
|
||||||
for (n = (le32_to_cpu(entry->e_value_size) +
|
for (n = (le32_to_cpu(entry->e_value_size) +
|
||||||
|
Loading…
Reference in New Issue
Block a user