Skip to content

Commit c1ad35d

Browse files
committed
udf: Avoid using stale lengthOfImpUse
udf_write_fi() uses lengthOfImpUse of the entry it is writing to. However this field has not yet been initialized so it either contains completely bogus value or value from last directory entry at that place. In either case this is wrong and can lead to filesystem corruption or kernel crashes. Reported-by: butt3rflyh4ck <[email protected]> CC: [email protected] Fixes: 979a6e2 ("udf: Get rid of 0-length arrays in struct fileIdentDesc") Signed-off-by: Jan Kara <[email protected]>
1 parent 846a335 commit c1ad35d

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

fs/udf/namei.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi,
7575

7676
if (fileident) {
7777
if (adinicb || (offset + lfi < 0)) {
78-
memcpy(udf_get_fi_ident(sfi), fileident, lfi);
78+
memcpy(sfi->impUse + liu, fileident, lfi);
7979
} else if (offset >= 0) {
8080
memcpy(fibh->ebh->b_data + offset, fileident, lfi);
8181
} else {
82-
memcpy(udf_get_fi_ident(sfi), fileident, -offset);
82+
memcpy(sfi->impUse + liu, fileident, -offset);
8383
memcpy(fibh->ebh->b_data, fileident - offset,
8484
lfi + offset);
8585
}
@@ -88,11 +88,11 @@ int udf_write_fi(struct inode *inode, struct fileIdentDesc *cfi,
8888
offset += lfi;
8989

9090
if (adinicb || (offset + padlen < 0)) {
91-
memset(udf_get_fi_ident(sfi) + lfi, 0x00, padlen);
91+
memset(sfi->impUse + liu + lfi, 0x00, padlen);
9292
} else if (offset >= 0) {
9393
memset(fibh->ebh->b_data + offset, 0x00, padlen);
9494
} else {
95-
memset(udf_get_fi_ident(sfi) + lfi, 0x00, -offset);
95+
memset(sfi->impUse + liu + lfi, 0x00, -offset);
9696
memset(fibh->ebh->b_data, 0x00, padlen + offset);
9797
}
9898

0 commit comments

Comments
 (0)