History

fs/minix: don't allow getting deleted inodes

If an inode has no links, we need to mark it bad rather than allowing it to be accessed. This avoids WARNINGs in inc_nlink() and drop_nlink() when doing directory operations on a fuzzed filesystem.

Eric Biggers committed 6 years ago

Commit facb03d1 parent da27e0a1 file · +14 −0Browse files

Unified · Split

fs/minix/inode.c+14−0
@@ -468,6 +468,13 @@ static struct inode *V1_minix_iget(struct inode *inode) · 467 unmodified lines
468468 iget_failed(inode);
469469 return ERR_PTR(-EIO);
470470 }
471+ if (raw_inode->i_nlinks == 0) {
472+ printk("MINIX-fs: deleted inode referenced: %lu\n",
473+ inode->i_ino);
474+ brelse(bh);
475+ iget_failed(inode);
476+ return ERR_PTR(-ESTALE);
477+ }
471478 inode->i_mode = raw_inode->i_mode;
472479 i_uid_write(inode, raw_inode->i_uid);
473480 i_gid_write(inode, raw_inode->i_gid);
@@ -501,6 +508,13 @@ static struct inode *V2_minix_iget(struct inode *inode) · 27 unmodified lines
501508 iget_failed(inode);
502509 return ERR_PTR(-EIO);
503510 }
511+ if (raw_inode->i_nlinks == 0) {
512+ printk("MINIX-fs: deleted inode referenced: %lu\n",
513+ inode->i_ino);
514+ brelse(bh);
515+ iget_failed(inode);
516+ return ERR_PTR(-ESTALE);
517+ }
504518 inode->i_mode = raw_inode->i_mode;
505519 i_uid_write(inode, raw_inode->i_uid);
506520 i_gid_write(inode, raw_inode->i_gid);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t