99fa8cb3c5
With the combined linux and XFS inode, we need to ensure that the combined structure is not freed before the generic code is finished with the inode. As it turns out, there is a case where the XFS inode is freed before the linux inode - when xfs_reclaim() is called from ->clear_inode() on a clean inode, the xfs inode is freed during that call. The generic code references the inode after the ->clear_inode() call, so this is a use after free situation. Fix the problem by moving the xfs_reclaim() call to ->destroy_inode() instead of in ->clear_inode(). This ensures the combined inode structure is not freed until after the generic code has finished with it. SGI-PV: 988141 SGI-Modid: xfs-linux-melb:xfs-kern:32324a Signed-off-by: David Chinner <david@fromorbit.com> Signed-off-by: Lachlan McIlroy <lachlan@sgi.com> Signed-off-by: Christoph Hellwig <hch@infradead.org> |
||
---|---|---|
.. | ||
linux-2.6 | ||
quota | ||
support | ||
Kconfig | ||
Makefile | ||
xfs_acl.c | ||
xfs_acl.h | ||
xfs_ag.h | ||
xfs_alloc_btree.c | ||
xfs_alloc_btree.h | ||
xfs_alloc.c | ||
xfs_alloc.h | ||
xfs_arch.h | ||
xfs_attr_leaf.c | ||
xfs_attr_leaf.h | ||
xfs_attr_sf.h | ||
xfs_attr.c | ||
xfs_attr.h | ||
xfs_bit.c | ||
xfs_bit.h | ||
xfs_bmap_btree.c | ||
xfs_bmap_btree.h | ||
xfs_bmap.c | ||
xfs_bmap.h | ||
xfs_btree_trace.c | ||
xfs_btree_trace.h | ||
xfs_btree.c | ||
xfs_btree.h | ||
xfs_buf_item.c | ||
xfs_buf_item.h | ||
xfs_clnt.h | ||
xfs_da_btree.c | ||
xfs_da_btree.h | ||
xfs_dfrag.c | ||
xfs_dfrag.h | ||
xfs_dinode.h | ||
xfs_dir2_block.c | ||
xfs_dir2_block.h | ||
xfs_dir2_data.c | ||
xfs_dir2_data.h | ||
xfs_dir2_leaf.c | ||
xfs_dir2_leaf.h | ||
xfs_dir2_node.c | ||
xfs_dir2_node.h | ||
xfs_dir2_sf.c | ||
xfs_dir2_sf.h | ||
xfs_dir2_trace.c | ||
xfs_dir2_trace.h | ||
xfs_dir2.c | ||
xfs_dir2.h | ||
xfs_dmapi.h | ||
xfs_dmops.c | ||
xfs_error.c | ||
xfs_error.h | ||
xfs_extfree_item.c | ||
xfs_extfree_item.h | ||
xfs_filestream.c | ||
xfs_filestream.h | ||
xfs_fs.h | ||
xfs_fsops.c | ||
xfs_fsops.h | ||
xfs_ialloc_btree.c | ||
xfs_ialloc_btree.h | ||
xfs_ialloc.c | ||
xfs_ialloc.h | ||
xfs_iget.c | ||
xfs_imap.h | ||
xfs_inode_item.c | ||
xfs_inode_item.h | ||
xfs_inode.c | ||
xfs_inode.h | ||
xfs_inum.h | ||
xfs_iomap.c | ||
xfs_iomap.h | ||
xfs_itable.c | ||
xfs_itable.h | ||
xfs_log_priv.h | ||
xfs_log_recover.c | ||
xfs_log_recover.h | ||
xfs_log.c | ||
xfs_log.h | ||
xfs_mount.c | ||
xfs_mount.h | ||
xfs_mru_cache.c | ||
xfs_mru_cache.h | ||
xfs_qmops.c | ||
xfs_quota.h | ||
xfs_refcache.h | ||
xfs_rename.c | ||
xfs_rtalloc.c | ||
xfs_rtalloc.h | ||
xfs_rw.c | ||
xfs_rw.h | ||
xfs_sb.h | ||
xfs_trans_ail.c | ||
xfs_trans_buf.c | ||
xfs_trans_extfree.c | ||
xfs_trans_inode.c | ||
xfs_trans_item.c | ||
xfs_trans_priv.h | ||
xfs_trans_space.h | ||
xfs_trans.c | ||
xfs_trans.h | ||
xfs_types.h | ||
xfs_utils.c | ||
xfs_utils.h | ||
xfs_vfsops.c | ||
xfs_vfsops.h | ||
xfs_vnodeops.c | ||
xfs_vnodeops.h | ||
xfs.h |