linux/fs/ext4
Theodore Ts'o e2bfb088fa ext4: don't orphan or truncate the boot loader inode
The boot loader inode (inode #5) should never be visible in the
directory hierarchy, but it's possible if the file system is corrupted
that there will be a directory entry that points at inode #5.  In
order to avoid accidentally trashing it, when such a directory inode
is opened, the inode will be marked as a bad inode, so that it's not
possible to modify (or read) the inode from userspace.

Unfortunately, when we unlink this (invalid/illegal) directory entry,
we will put the bad inode on the ophan list, and then when try to
unlink the directory, we don't actually remove the bad inode from the
orphan list before freeing in-memory inode structure.  This means the
in-memory orphan list is corrupted, leading to a kernel oops.

In addition, avoid truncating a bad inode in ext4_destroy_inode(),
since truncating the boot loader inode is not a smart thing to do.

Reported-by: Sami Liedes <sami.liedes@iki.fi>
Reviewed-by: Jan Kara <jack@suse.cz>
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Cc: stable@vger.kernel.org
2014-10-05 22:47:07 -04:00
..
acl.c ext2/3/4: use generic posix ACL infrastructure 2014-01-25 23:58:19 -05:00
acl.h ext2/3/4: use generic posix ACL infrastructure 2014-01-25 23:58:19 -05:00
balloc.c ext4: prepare to drop EXT4_STATE_DELALLOC_RESERVED 2014-09-04 18:07:25 -04:00
bitmap.c ext4: Checksum the block bitmap properly with bigalloc enabled 2012-10-22 00:34:32 -04:00
block_validity.c fs/ext4: use rbtree postorder iteration helper instead of opencoding 2014-01-23 16:37:03 -08:00
dir.c ext4: convert ext4_bread() to use the ERR_PTR convention 2014-08-29 20:52:15 -04:00
ext4_extents.h ext4: teach ext4_ext_find_extent() to realloc path if necessary 2014-09-01 14:40:09 -04:00
ext4_jbd2.c ext4: fix over-defensive complaint after journal abort 2014-10-01 22:23:15 -04:00
ext4_jbd2.h ext4: don't use MAXQUOTAS value 2014-09-11 11:15:15 -04:00
ext4.h ext4: don't use MAXQUOTAS value 2014-09-11 11:15:15 -04:00
extents_status.c ext4: track extent status tree shrinker delay statictics 2014-09-01 22:26:49 -04:00
extents_status.h ext4: track extent status tree shrinker delay statictics 2014-09-01 22:26:49 -04:00
extents.c ext4: optimize block allocation on grow indepth 2014-10-01 22:57:09 -04:00
file.c ext4: remove readpage() check in ext4_mmap_file() 2014-07-15 09:56:19 -04:00
fsync.c ext4: Fix fsync error handling after filesystem abort 2013-06-12 22:38:04 -04:00
hash.c ext4: reduce one "if" comparison in ext4_dirhash() 2013-02-01 22:33:21 -05:00
ialloc.c ext4: fix potential null pointer dereference in ext4_free_inode 2014-07-12 16:11:42 -04:00
indirect.c ext4: prepare to drop EXT4_STATE_DELALLOC_RESERVED 2014-09-04 18:07:25 -04:00
inline.c ext4: don't keep using page if inline conversion fails 2014-09-11 11:45:12 -04:00
inode.c ext4: don't orphan or truncate the boot loader inode 2014-10-05 22:47:07 -04:00
ioctl.c ext4: grab missed write_count for EXT4_IOC_SWAP_BOOT 2014-10-03 12:47:23 -04:00
Kconfig ext4: fix Kconfig documentation for CONFIG_EXT4_DEBUG 2013-04-21 20:32:03 -04:00
Makefile ext4: Remove CONFIG_EXT4_FS_XATTR 2012-12-10 16:30:43 -05:00
mballoc.c ext4: get rid of code duplication 2014-10-01 22:26:17 -04:00
mballoc.h ext4: remove unused ac_ex_scanned 2014-02-20 13:32:10 -05:00
migrate.c ext4: rename ext4_ext_find_extent() to ext4_find_extent() 2014-09-01 14:43:09 -04:00
mmp.c ext4: make local functions static 2014-05-12 10:50:23 -04:00
move_extent.c ext4: rename ext4_ext_find_extent() to ext4_find_extent() 2014-09-01 14:43:09 -04:00
namei.c ext4: don't orphan or truncate the boot loader inode 2014-10-05 22:47:07 -04:00
page-io.c Clean ups and miscellaneous bug fixes, in particular for the new 2014-06-08 13:03:35 -07:00
resize.c Clean ups and miscellaneous bug fixes, in particular for the new 2014-06-08 13:03:35 -07:00
super.c ext4: fold ext4_nojournal_sops into ext4_sops 2014-09-18 17:12:30 -04:00
symlink.c ext4: Remove CONFIG_EXT4_FS_XATTR 2012-12-10 16:30:43 -05:00
truncate.h ext4: move common truncate functions to header file 2011-06-27 19:16:04 -04:00
xattr_security.c Merge branch 'for_linus' into for_linus_merged 2012-01-10 11:54:07 -05:00
xattr_trusted.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
xattr_user.c ext2/3/4: delete unneeded includes of module.h 2012-01-09 13:52:10 +01:00
xattr.c ext4: check EA value offset when loading 2014-09-16 14:34:59 -04:00
xattr.h ext4: each filesystem creates and uses its own mb_cache 2014-03-18 19:24:49 -04:00