linux/fs/xfs
Eric Sandeen e6da7c9fed xfs: fix overflow in xfs_growfs_data_private
In the case where growing a filesystem would leave the last AG
too small, the fixup code has an overflow in the calculation
of the new size with one fewer ag, because "nagcount" is a 32
bit number.  If the new filesystem has > 2^32 blocks in it
this causes a problem resulting in an EINVAL return from growfs:

 # xfs_io -f -c "truncate 19998630180864" fsfile
 # mkfs.xfs -f -bsize=4096 -dagsize=76288719b,size=3905982455b fsfile
 # mount -o loop fsfile /mnt
 # xfs_growfs /mnt

meta-data=/dev/loop0             isize=256    agcount=52,
agsize=76288719 blks
         =                       sectsz=512   attr=2
data     =                       bsize=4096   blocks=3905982455, imaxpct=5
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0
log      =internal               bsize=4096   blocks=32768, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=0
realtime =none                   extsz=4096   blocks=0, rtextents=0
xfs_growfs: XFS_IOC_FSGROWFSDATA xfsctl failed: Invalid argument

Reported-by: richard.ems@cape-horn-eng.com
Signed-off-by: Eric Sandeen <sandeen@sandeen.net>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Felix Blyakher <felixb@sgi.com>
Signed-off-by: Felix Blyakher <felixb@sgi.com>
2009-06-01 22:59:38 -05:00
..
linux-2.6 Merge branch 'master' into for-linus 2009-04-09 14:12:07 -05:00
quota xfs: kill mutex_t typedef 2009-03-29 09:51:00 +02:00
support xfs: cleanup uuid handling 2009-03-30 10:21:31 +02:00
Kconfig xfs: fix dentry aliasing issues in open_by_handle 2009-01-19 14:43:18 +11:00
Makefile xfs: get rid of indirections in the quotaops implementation 2009-02-09 08:47:34 +01:00
xfs_acl.c CRED: Wrap task credential accesses in the XFS filesystem 2008-11-14 10:39:04 +11:00
xfs_acl.h Revert "xfs: increase the maximum number of supported ACL entries" 2009-03-31 00:23:37 -05:00
xfs_ag.h xfs: remove uchar_t/ushort_t/uint_t/ulong_t types 2009-02-09 08:37:39 +01:00
xfs_alloc_btree.c [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_alloc_btree.h [XFS] Always use struct xfs_btree_block instead of short / longform 2008-10-30 17:14:34 +11:00
xfs_alloc.c xfs: factor out code to find the longest free extent in the AG 2009-03-16 08:29:46 +01:00
xfs_alloc.h xfs: factor out code to find the longest free extent in the AG 2009-03-16 08:29:46 +01:00
xfs_arch.h [XFS] Sync up kernel and user-space headers 2008-10-30 17:05:38 +11:00
xfs_attr_leaf.c xfs: remove m_attroffset 2009-03-29 19:26:46 +02:00
xfs_attr_leaf.h [XFS] Remove macro-to-function indirections in attr code 2009-01-09 15:46:44 +11:00
xfs_attr_sf.h [XFS] 2008-07-28 16:58:35 +10:00
xfs_attr.c [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_attr.h [XFS] Move attr log alloc size calculator to another function. 2008-08-13 16:03:35 +10:00
xfs_bit.c [XFS] Use the generic bitops rather than implementing them ourselves. 2008-08-13 15:41:12 +10:00
xfs_bit.h [XFS] Remove macro-to-function indirections in the mask code 2009-01-09 15:53:54 +11:00
xfs_bmap_btree.c [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_bmap_btree.h [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_bmap.c xfs: fix getbmap vs mmap deadlock 2009-04-30 00:29:02 -05:00
xfs_bmap.h xfs: remove m_attroffset 2009-03-29 19:26:46 +02:00
xfs_btree_trace.c [XFS] make btree tracing generic 2008-10-30 16:58:50 +11:00
xfs_btree_trace.h [XFS] make btree tracing generic 2008-10-30 16:58:50 +11:00
xfs_btree.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_btree.h xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_buf_item.c [XFS] Remove XFS_BUF_SHUT() and friends 2008-12-22 17:52:58 +11:00
xfs_buf_item.h [XFS] Fix up sparse warnings. 2008-02-07 18:14:38 +11:00
xfs_da_btree.c xfs: remove uchar_t/ushort_t/uint_t/ulong_t types 2009-02-09 08:37:39 +01:00
xfs_da_btree.h xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_dfrag.c xfs: fix double unlock in xfs_swap_extents() 2009-06-01 22:59:29 -05:00
xfs_dfrag.h [XFS] Move copy_from_user calls out of ioctl helpers into ioctl switch. 2008-12-02 17:08:01 +11:00
xfs_dinode.h xfs: remove m_litino 2009-03-29 09:51:14 +02:00
xfs_dir2_block.c xfs: kill ino64 mount option 2009-03-29 09:51:08 +02:00
xfs_dir2_block.h [XFS] use filldir internally 2007-10-15 16:49:49 +10:00
xfs_dir2_data.c [XFS] Name operation vector for hash and compare 2008-07-28 16:58:36 +10:00
xfs_dir2_data.h xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_dir2_leaf.c xfs: kill ino64 mount option 2009-03-29 09:51:08 +02:00
xfs_dir2_leaf.h [XFS] use filldir internally 2007-10-15 16:49:49 +10:00
xfs_dir2_node.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_dir2_node.h
xfs_dir2_sf.c xfs: kill ino64 mount option 2009-03-29 09:51:08 +02:00
xfs_dir2_sf.h [XFS] kill xfs_dinode_core_t 2008-12-01 11:37:35 +11:00
xfs_dir2_trace.c [XFS] Add op_flags field and helpers to xfs_da_args 2008-07-28 16:58:37 +10:00
xfs_dir2_trace.h
xfs_dir2.c xfs: move declaration to header file 2009-03-06 17:20:15 -06:00
xfs_dir2.h [XFS] Return case-insensitive match for dentry cache 2008-07-28 16:58:40 +10:00
xfs_dmapi.h removed unused #include <linux/version.h>'s 2008-08-23 12:14:12 -07:00
xfs_dmops.c [XFS] kill struct xfs_mount_args 2008-10-30 17:53:24 +11:00
xfs_error.c [XFS] avoid memory allocations in xfs_fs_vcmn_err 2008-12-22 18:02:01 +11:00
xfs_error.h [XFS] avoid memory allocations in xfs_fs_vcmn_err 2008-12-22 18:02:01 +11:00
xfs_extfree_item.c [XFS] Finish removing the mount pointer from the AIL API 2008-10-30 17:39:58 +11:00
xfs_extfree_item.h [XFS] remove always-true #ifndef HAVE_FORMAT32 tests 2009-01-22 14:07:31 +11:00
xfs_filestream.c xfs: factor out code to find the longest free extent in the AG 2009-03-16 08:29:46 +01:00
xfs_filestream.h
xfs_fs.h filesystem freeze: remove XFS specific ioctl interfaces for freeze feature 2009-01-09 16:54:42 -08:00
xfs_fsops.c xfs: fix overflow in xfs_growfs_data_private 2009-06-01 22:59:38 -05:00
xfs_fsops.h filesystem freeze: add error handling of write_super_lockfs/unlockfs 2009-01-09 16:54:42 -08:00
xfs_ialloc_btree.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_ialloc_btree.h xfs: remove superflous inobt macros 2009-02-09 08:37:14 +01:00
xfs_ialloc.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_ialloc.h [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_iget.c xfs: fix double free of inode 2009-04-06 18:40:17 +02:00
xfs_inode_item.c [XFS] embededd struct xfs_imap into xfs_inode 2008-12-01 11:38:08 +11:00
xfs_inode_item.h [XFS] remove always-true #ifndef HAVE_FORMAT32 tests 2009-01-22 14:07:31 +11:00
xfs_inode.c xfs_file_last_byte() needs to acquire ilock 2009-04-30 00:25:25 -05:00
xfs_inode.h xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_inum.h
xfs_iomap.c xfs: remove xfs_flush_space 2009-04-06 18:49:12 +02:00
xfs_iomap.h xfs: remove xfs_flush_space 2009-04-06 18:49:12 +02:00
xfs_itable.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_itable.h [XFS] Fix xfs_bulkstat_one size checks & error handling 2008-12-02 17:16:03 +11:00
xfs_log_priv.h xfs: cleanup xlog_bread 2009-03-16 08:24:13 +01:00
xfs_log_recover.c xfs: cleanup xlog_bread 2009-03-16 08:24:13 +01:00
xfs_log_recover.h
xfs_log.c xfs: inform the xfsaild of the push target before sleeping 2009-04-06 18:42:59 +02:00
xfs_log.h xfs: cleanup log unmount handling 2009-03-16 08:19:29 +01:00
xfs_mount.c xfs: add more checks to superblock validation 2009-04-30 00:26:14 -05:00
xfs_mount.h xfs: use xfs_sync_inodes() for device flushing 2009-04-06 18:44:54 +02:00
xfs_mru_cache.c [XFS] streamline init/exit path 2008-07-28 16:59:25 +10:00
xfs_mru_cache.h [XFS] On-demand reaping of the MRU cache 2007-09-17 16:42:02 +10:00
xfs_qmops.c xfs: get rid of indirections in the quotaops implementation 2009-02-09 08:47:34 +01:00
xfs_quota.h xfs: get rid of indirections in the quotaops implementation 2009-02-09 08:47:34 +01:00
xfs_refcache.h
xfs_rename.c [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_rtalloc.c xfs: make sure to free the real-time inodes in the mount error path 2009-02-04 09:33:58 +01:00
xfs_rtalloc.h xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_rw.c [XFS] replace b_fspriv with b_mount 2008-12-11 13:13:33 +11:00
xfs_rw.h [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_sb.h [XFS] Remove the rest of the macro-to-function indirections. 2009-01-19 14:45:55 +11:00
xfs_trans_ail.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_trans_buf.c [XFS] Finish removing the mount pointer from the AIL API 2008-10-30 17:39:58 +11:00
xfs_trans_extfree.c [XFS] Radix tree based inode caching 2007-10-15 16:50:50 +10:00
xfs_trans_inode.c use xfs_trans_ijoin in xfs_trans_iget 2008-12-04 15:39:23 +11:00
xfs_trans_item.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_trans_priv.h [XFS] Finish removing the mount pointer from the AIL API 2008-10-30 17:39:58 +11:00
xfs_trans_space.h xfs: remove superflous inobt macros 2009-02-09 08:37:14 +01:00
xfs_trans.c [XFS] Fix double free of log tickets 2008-11-17 17:37:10 +11:00
xfs_trans.h xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_types.h xfs: remove uchar_t/ushort_t/uint_t/ulong_t types 2009-02-09 08:37:39 +01:00
xfs_utils.c xfs: fix various typos 2009-03-29 09:55:42 +02:00
xfs_utils.h [XFS] implement IHOLD/IRELE directly 2008-08-13 16:13:45 +10:00
xfs_vnodeops.c xfs: flush delayed allcoation blocks on ENOSPC in create 2009-04-06 18:48:30 +02:00
xfs_vnodeops.h xfs: merge xfs_mkdir into xfs_create 2009-02-09 08:38:02 +01:00
xfs.h [XFS] make btree tracing generic 2008-10-30 16:55:13 +11:00