Darrick J. Wong
7d83fb1425
xfs: prevent creating negative-sized file via INSERT_RANGE
...
During the "insert range" fallocate operation, i_size grows by the
specified 'len' bytes. XFS verifies that i_size + len < s_maxbytes, as
it should. But this comparison is done using the signed 'loff_t', and
'i_size + len' can wrap around to a negative value, causing the check to
incorrectly pass, resulting in an inode with "negative" i_size. This is
possible on 64-bit platforms, where XFS sets s_maxbytes = LLONG_MAX.
ext4 and f2fs don't run into this because they set a smaller s_maxbytes.
Fix it by using subtraction instead.
Reproducer:
xfs_io -f file -c "truncate $(((1<<63)-1))" -c "finsert 0 4096"
Fixes: a904b1ca57 ("xfs: Add support FALLOC_FL_INSERT_RANGE for fallocate")
Cc: <stable@vger.kernel.org > # v4.1+
Originally-From: Eric Biggers <ebiggers@google.com >
Signed-off-by: Eric Biggers <ebiggers@google.com >
Reviewed-by: Christoph Hellwig <hch@lst.de >
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com >
[darrick: fix signed integer addition overflow too]
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com >
2018-04-17 17:29:11 -07:00
..
2018-04-07 09:08:24 -07:00
2017-11-27 13:05:09 -08:00
2018-02-01 08:15:25 -05:00
2018-04-12 11:59:06 -07:00
2018-04-11 10:28:36 -07:00
2018-01-15 12:07:54 -08:00
2017-11-02 11:10:55 +01:00
2018-04-15 18:08:35 -07:00
2018-04-06 14:05:14 +01:00
2018-04-10 12:25:30 -07:00
2018-04-12 20:32:55 -05:00
2018-02-11 14:34:03 -08:00
2017-10-19 16:15:16 +02:00
2018-02-08 11:37:31 -08:00
2018-02-01 10:51:18 -05:00
2018-03-29 15:07:47 -04:00
2018-03-14 13:31:23 +01:00
2018-02-12 14:15:04 -05:00
2018-02-11 14:34:03 -08:00
2018-02-22 10:21:02 -08:00
2017-11-27 13:05:09 -08:00
2018-02-07 14:25:22 -08:00
2018-04-12 12:04:49 +02:00
2018-04-10 10:25:57 -07:00
2018-04-10 10:25:57 -07:00
2018-04-11 10:28:39 -07:00
2018-02-01 08:15:25 -05:00
2018-01-15 12:07:57 -08:00
2018-04-11 10:28:39 -07:00
2018-03-23 06:31:37 -04:00
2018-04-12 10:07:51 -07:00
2017-11-27 13:05:09 -08:00
2018-02-06 18:32:45 -08:00
2018-04-02 20:15:53 +02:00
2017-12-10 12:58:18 -08:00
2018-04-05 21:36:21 -07:00
2017-11-27 13:05:09 -08:00
2018-02-19 12:22:53 -05:00
2018-03-15 18:22:26 +01:00
2018-02-03 16:25:42 -08:00
2018-02-11 14:34:03 -08:00
2018-03-27 13:18:09 -04:00
2018-03-26 15:55:57 +02:00
2018-04-12 12:55:50 -07:00
2018-03-27 13:18:09 -04:00
2018-04-03 16:27:08 -04:00
2018-04-11 10:28:39 -07:00
2017-11-02 11:10:55 +01:00
2018-04-05 19:17:50 -07:00
2018-03-28 01:39:02 -04:00
2018-04-06 14:19:26 -07:00
2017-11-02 11:10:55 +01:00
2017-11-27 13:05:09 -08:00
2018-04-09 12:45:47 -07:00
2018-04-12 12:04:50 +02:00
2018-04-13 17:10:27 -07:00
2018-04-06 15:45:33 -07:00
2017-11-27 13:05:09 -08:00
2017-11-27 13:05:09 -08:00
2018-04-02 20:15:47 +02:00
2017-09-06 17:27:26 -07:00
2018-04-11 10:28:36 -07:00
2017-11-27 13:05:09 -08:00
2017-11-27 13:05:09 -08:00
2018-03-19 21:14:26 -04:00
2017-11-27 13:05:09 -08:00
2017-07-06 03:31:46 -04:00
2018-04-11 16:39:34 -07:00
2018-03-02 14:23:12 +01:00
2018-02-07 14:25:22 -08:00
2018-04-17 17:29:11 -07:00
2018-03-19 10:12:03 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-04-11 10:28:37 -07:00
2018-04-11 10:28:37 -07:00
2018-04-11 10:28:38 -07:00
2018-04-11 10:28:37 -07:00
2018-04-02 20:16:00 +02:00
2017-10-03 17:54:25 -07:00
2018-04-10 10:25:57 -07:00
2018-04-12 12:28:32 -07:00
2018-03-15 17:59:24 +01:00
2017-12-28 11:17:29 -05:00
2017-11-17 11:54:55 -08:00
2018-03-29 15:07:46 -04:00
2018-04-11 10:28:39 -07:00
2018-04-11 10:28:38 -07:00
2018-04-02 20:15:39 +02:00
2018-04-06 14:19:26 -07:00
2017-11-02 11:10:55 +01:00
2018-04-02 20:15:39 +02:00
2018-04-02 20:15:37 +02:00
2018-04-11 10:28:37 -07:00
2018-04-02 20:15:42 +02:00
2018-01-15 12:07:51 -08:00
2017-12-07 14:23:30 -05:00
2018-04-02 20:16:00 +02:00
2017-11-02 11:10:55 +01:00
2017-11-07 10:32:44 +01:00
2018-04-11 10:28:39 -07:00
2018-04-11 10:28:39 -07:00
2018-04-06 11:07:08 -07:00
2018-04-02 20:16:03 +02:00
2018-01-29 07:27:24 -08:00
2018-02-06 10:41:33 -08:00
2018-03-26 15:55:57 +02:00
2018-03-30 11:34:55 -07:00
2018-03-26 11:13:09 +02:00
2018-03-29 15:07:46 -04:00
2018-01-09 23:57:52 -05:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-04-09 12:48:05 -07:00
2018-04-02 20:15:48 +02:00
2018-02-15 15:34:42 -05:00
2018-04-06 11:07:08 -07:00
2018-04-02 20:15:35 +02:00
2018-01-02 19:27:28 -08:00
2018-02-11 14:34:03 -08:00
2018-04-02 20:16:09 +02:00
2018-04-02 20:16:02 +02:00
2018-04-02 20:15:42 +02:00
2018-04-11 10:28:36 -07:00
2018-04-02 20:15:43 +02:00
2018-04-02 20:15:40 +02:00
2018-04-02 20:15:34 +02:00
2017-11-27 13:05:09 -08:00
2018-04-12 12:28:32 -07:00
2018-04-04 12:44:02 -07:00
2018-02-11 14:34:03 -08:00
2018-02-11 14:34:03 -08:00
2018-04-02 20:15:44 +02:00
2017-10-04 18:03:15 +11:00