hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
u-boot/fs/ubifs/ubifs.c
....@@ -126,6 +126,7 @@
126126 {
127127 struct ubifs_compressor *compr = ubifs_compressors[tfm->compressor];
128128 int err;
129
+ size_t tmp_len = *dlen;
129130
130131 if (compr->compr_type == UBIFS_COMPR_NONE) {
131132 memcpy(dst, src, slen);
....@@ -133,11 +134,12 @@
133134 return 0;
134135 }
135136
136
- err = compr->decompress(src, slen, dst, (size_t *)dlen);
137
+ err = compr->decompress(src, slen, dst, &tmp_len);
137138 if (err)
138139 ubifs_err(c, "cannot decompress %d bytes, compressor %s, "
139140 "error %d", slen, compr->name, err);
140141
142
+ *dlen = tmp_len;
141143 return err;
142144
143145 return 0;
....@@ -466,14 +468,10 @@
466468 dbg_gen("cannot find next direntry, error %d", err);
467469
468470 out_free:
469
- if (file->private_data)
470
- kfree(file->private_data);
471
- if (file)
472
- free(file);
473
- if (dentry)
474
- free(dentry);
475
- if (dir)
476
- free(dir);
471
+ kfree(file->private_data);
472
+ free(file);
473
+ free(dentry);
474
+ free(dir);
477475
478476 return ret;
479477 }
....@@ -801,6 +799,8 @@
801799
802800 if (last_block_size)
803801 dlen = last_block_size;
802
+ else if (ret)
803
+ dlen = UBIFS_BLOCK_SIZE;
804804 else
805805 dlen = le32_to_cpu(dn->size);
806806