Jason Zaman
8fc851b7b5
sysmacros: Make P2ROUNDUP not trigger int overflow
...
The original P2ROUNDUP and P2ROUNDUP_TYPED macros contain -x which
triggers PaX's integer overflow detection for unsigned integers.
Replace the macros with an equivalent version that does not trigger
the overflow.
Axioms:
A. (-(x)) === (~((x) - 1)) === (~(x) + 1) under two's complement.
B. ~(x & y) === ((~(x)) | (~(y))) under De Morgan's law.
C. ~(~x) === x under the law of excluded middle.
Proof:
0. (-(-(x) & -(align))) original
1. (~(-(x) & -(align)) + 1) by A
2. (((~(-(x))) | (~(-(align)))) + 1) by B
3. (((~(~((x) - 1))) | (~(~((align) - 1)))) + 1) by A
4. (((((x) - 1)) | (((align) - 1))) + 1) by C
Q.E.D.
Signed-off-by: Jason Zaman <jason@perfinion.com >
Reviewed-by: Chris Dunlop <chris@onthe.net.au >
Reviewed-by: Richard Yao <ryao@gentoo.org >
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov >
Closes zfsonlinux/zfs#2505
Closes #488
2015-11-13 15:21:52 -08:00
..
2014-10-28 09:31:48 -07:00
2014-10-28 09:31:48 -07:00
2014-10-28 09:31:48 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2014-10-17 15:11:50 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-11-04 09:49:24 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-06-10 16:36:12 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2014-10-17 15:11:51 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-06-24 14:44:47 -07:00
2013-03-04 19:09:34 -08:00
2013-10-09 13:52:55 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2014-10-17 15:11:51 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2014-04-25 15:25:32 -07:00
2013-03-04 19:09:34 -08:00
2015-10-13 09:50:40 -07:00
2015-01-16 13:55:09 -08:00
2013-03-04 19:09:34 -08:00
2013-10-25 13:41:52 -07:00
2013-03-04 19:09:34 -08:00
2015-04-24 13:02:37 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-04-03 11:32:31 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-10-02 11:21:35 -07:00
2013-10-09 14:20:46 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2014-10-17 15:07:28 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-11-13 15:21:52 -08:00
2014-04-14 09:04:41 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-07-28 13:59:03 -07:00
2014-04-09 19:17:12 -07:00
2015-01-16 13:54:35 -08:00
2014-04-14 09:32:01 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-01-16 13:55:08 -08:00
2013-03-04 19:09:34 -08:00
2015-08-24 10:10:21 -07:00
2013-03-04 19:09:34 -08:00
2015-04-24 13:02:37 -07:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2013-03-04 19:09:34 -08:00
2015-06-29 09:26:29 -07:00
2015-08-19 09:25:30 -07:00
2015-04-24 13:02:37 -07:00
2013-03-04 19:09:34 -08:00
2015-04-02 09:49:55 -07:00