Darrick J. Wong
b13d8f52b8
xfs: prevent creating negative-sized file via INSERT_RANGE
...
commit 7d83fb1425 upstream.
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 >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2018-05-09 09:50:21 +02:00
..
2017-11-30 08:39:05 +00:00
2016-10-10 20:16:43 -07:00
2016-10-10 20:16:43 -07:00
2017-12-20 10:07:25 +01:00
2018-04-24 09:34:18 +02:00
2016-10-15 12:09:13 -07:00
2016-10-10 23:02:51 -04:00
2018-04-13 19:47:58 +02:00
2016-10-10 20:16:43 -07:00
2018-04-08 12:12:42 +02:00
2018-04-29 11:31:55 +02:00
2017-11-24 08:33:42 +01:00
2017-06-24 07:11:12 +02:00
2016-05-09 11:41:14 -04:00
2017-11-30 08:39:11 +00:00
2017-08-06 18:59:43 -07:00
2016-10-10 20:16:43 -07:00
2017-09-09 17:39:40 +02:00
2017-11-30 08:39:03 +00:00
2016-10-10 20:16:43 -07:00
2016-05-20 17:58:30 -07:00
2016-10-27 18:43:43 -07:00
2016-10-06 09:07:44 -04:00
2017-07-27 15:08:02 -07:00
2018-05-01 15:13:03 -07:00
2018-03-22 09:17:45 +01:00
2017-03-15 10:02:52 +08:00
2016-06-13 10:20:39 +02:00
2017-10-27 10:38:11 +02:00
2017-11-02 09:49:13 +01:00
2017-12-20 10:07:30 +01:00
2016-10-10 20:16:43 -07:00
2017-07-27 15:08:07 -07:00
2016-10-10 20:16:43 -07:00
2016-10-10 20:16:43 -07:00
2017-10-08 10:26:09 +02:00
2017-11-30 08:39:04 +00:00
2018-05-01 15:13:03 -07:00
2018-04-24 09:34:17 +02:00
2017-08-06 18:59:39 -07:00
2018-02-17 13:21:15 +01:00
2018-04-13 19:47:53 +02:00
2016-10-10 20:16:43 -07:00
2016-10-10 20:16:43 -07:00
2018-03-28 18:39:23 +02:00
2018-04-13 19:48:05 +02:00
2018-02-03 17:05:38 +01:00
2018-03-28 18:39:21 +02:00
2017-11-30 08:39:03 +00:00
2018-04-24 09:34:18 +02:00
2016-10-30 13:09:42 -04:00
2018-02-22 15:43:52 +01:00
2016-10-10 20:16:43 -07:00
2016-09-27 21:06:21 -04:00
2018-04-24 09:34:17 +02:00
2018-04-13 19:48:12 +02:00
2018-02-17 13:21:18 +01:00
2017-08-06 18:59:43 -07:00
2016-05-09 11:41:14 -04:00
2016-05-09 11:41:14 -04:00
2018-02-03 17:05:39 +01:00
2016-10-10 20:16:43 -07:00
2018-04-24 09:34:09 +02:00
2017-06-17 06:41:56 +02:00
2016-10-07 21:48:36 -04:00
2017-04-12 12:41:11 +02:00
2016-10-10 20:16:43 -07:00
2016-09-27 21:06:21 -04:00
2018-04-24 09:34:08 +02:00
2018-04-24 09:34:17 +02:00
2017-06-14 15:06:01 +02:00
2018-05-09 09:50:21 +02:00
2018-03-22 09:18:00 +01:00
2016-10-10 20:16:43 -07:00
2017-01-09 08:32:24 +01:00
2016-05-28 16:34:59 -07:00
2016-07-25 16:51:49 +10:00
2017-07-21 07:42:21 +02:00
2016-08-02 19:35:15 -04:00
2016-07-28 13:29:12 +10:00
2016-09-27 21:06:22 -04:00
2017-10-18 09:35:39 +02:00
2017-06-14 15:06:00 +02:00
2016-08-23 22:58:51 -07:00
2018-02-25 11:05:55 +01:00
2018-04-08 12:12:44 +02:00
2016-09-27 21:20:53 -04:00
2017-07-05 14:40:26 +02:00
2018-02-28 10:18:33 +01:00
2018-04-13 19:48:09 +02:00
2017-10-18 09:35:41 +02:00
2017-09-07 08:35:41 +02:00
2017-07-21 07:42:22 +02:00
2018-01-31 12:55:52 +01:00
2016-09-27 18:47:38 -04:00
2018-04-24 09:34:18 +02:00
2017-09-20 08:20:01 +02:00
2017-09-20 08:20:01 +02:00
2016-09-15 13:29:52 -07:00
2017-09-20 08:19:59 +02:00
2016-10-07 18:46:29 -07:00
2016-08-12 16:47:05 +01:00
2017-12-09 22:01:51 +01:00
2016-10-18 12:21:28 +02:00
2016-06-21 09:23:11 +10:00
2018-02-22 15:43:48 +01:00
2017-07-21 07:42:22 +02:00
2017-10-18 09:35:39 +02:00
2018-04-20 08:21:07 +02:00
2018-04-24 09:34:18 +02:00
2018-02-17 13:21:15 +01:00
2017-07-12 15:01:02 +02:00
2018-02-17 13:21:18 +01:00
2017-07-21 07:42:22 +02:00
2017-03-15 10:02:43 +08:00
2017-01-26 08:24:37 +01:00
2017-10-12 11:51:26 +02:00
2016-05-26 00:13:25 -04:00
2016-10-11 15:06:30 -07:00
2016-10-07 18:46:30 -07:00
2017-02-23 17:44:35 +01:00
2017-06-14 15:06:01 +02:00
2018-03-03 10:23:21 +01:00
2016-04-04 10:41:08 -07:00
2017-05-08 07:47:54 +02:00
2017-12-20 10:07:18 +01:00
2016-10-08 11:06:08 -04:00
2017-10-12 11:51:19 +02:00