David Sterba 9dcbeed4d7 btrfs: fix signed overflows in btrfs_sync_file
The calculation of range length in btrfs_sync_file leads to signed
overflow. This was caught by PaX gcc SIZE_OVERFLOW plugin.

https://forums.grsecurity.net/viewtopic.php?f=1&t=4284

The fsync call passes 0 and LLONG_MAX, the range length does not fit to
loff_t and overflows, but the value is converted to u64 so it silently
works as expected.

The minimal fix is a typecast to u64, switching functions to take
(start, end) instead of (start, len) would be more intrusive.

Coccinelle script found that there's one more opencoded calculation of
the length.

<smpl>
@@
loff_t start, end;
@@
* end - start
</smpl>

CC: stable@vger.kernel.org
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Chris Mason <clm@fb.com>
2015-11-25 05:19:50 -08:00
..
2015-06-30 19:44:57 -07:00
2015-06-23 18:02:01 -04:00
2015-10-03 16:54:17 -05:00
2015-09-03 12:57:48 -07:00
2015-06-25 17:00:42 -07:00
2015-09-08 15:35:28 -07:00
2015-08-16 12:35:44 -07:00
2015-09-11 12:23:51 -07:00
2015-08-13 12:32:04 -06:00
2015-09-07 14:02:24 -07:00
2015-08-13 12:32:04 -06:00
2015-04-11 22:29:40 -04:00
2015-09-08 15:35:28 -07:00
2015-07-09 11:42:21 -07:00
2015-08-13 12:32:04 -06:00
2015-07-23 20:59:40 +02:00
2015-08-12 15:28:45 -05:00
2015-08-31 16:27:25 -04:00
2015-09-04 16:54:41 -07:00
2015-08-13 12:32:04 -06:00