Properly calculate the last used logical block of a file when checking
inodes that reference directories. While here tighten the check for comparing the last logical block with the end of the file. Reported by: Peter Holm Tested by: Peter Holm Sponsored by: Netflix
This commit is contained in:
parent
886e9f061c
commit
72ef1cb896
@ -127,9 +127,9 @@ ckinode(union dinode *dp, struct inodesc *idesc)
|
||||
ret = iblock(idesc, i + 1, remsize, BT_LEVEL1 + i);
|
||||
if (ret & STOP)
|
||||
return (ret);
|
||||
} else {
|
||||
} else if (remsize > 0) {
|
||||
idesc->id_lbn += sizepb / sblock.fs_bsize;
|
||||
if (idesc->id_type == DATA && remsize > 0) {
|
||||
if (idesc->id_type == DATA) {
|
||||
/* An empty block in a directory XXX */
|
||||
getpathname(pathbuf, idesc->id_number,
|
||||
idesc->id_number);
|
||||
|
@ -439,7 +439,7 @@ checkinode(ino_t inumber, struct inodesc *idesc, int rebuildcg)
|
||||
* at its end.
|
||||
*/
|
||||
if (DIP(dp, di_size) > UFS_NDADDR * sblock.fs_bsize &&
|
||||
idesc->id_lballoc != lblkno(&sblock, DIP(dp, di_size) - 1)) {
|
||||
idesc->id_lballoc < lblkno(&sblock, DIP(dp, di_size) - 1)) {
|
||||
fixsize = lblktosize(&sblock, idesc->id_lballoc + 1);
|
||||
pwarn("INODE %lu: FILE SIZE %ju BEYOND END OF ALLOCATED FILE, "
|
||||
"SIZE SHOULD BE %ju", (u_long)inumber,
|
||||
|
Loading…
Reference in New Issue
Block a user