zfs/lib/libspl
Jason Zaman 44f547af98 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 #3949
2015-12-23 17:29:35 -08:00
..
asm-generic Support parallel build trees (VPATH builds) 2015-07-17 13:42:51 -07:00
asm-i386 Support parallel build trees (VPATH builds) 2015-07-17 13:42:51 -07:00
asm-x86_64 Support parallel build trees (VPATH builds) 2015-07-17 13:42:51 -07:00
include sysmacros: Make P2ROUNDUP not trigger int overflow 2015-12-23 17:29:35 -08:00
Makefile.am Support parallel build trees (VPATH builds) 2015-07-17 13:42:51 -07:00
getexecname.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
gethrestime.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
gethrtime.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
getmntany.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00
list.c Add linux libspl support 2010-08-31 13:41:59 -07:00
mkdirp.c Set errno for mkdirp() called with NULL path ptr 2014-04-09 13:32:22 -07:00
strlcat.c Add linux libspl support 2010-08-31 13:41:59 -07:00
strlcpy.c Add linux libspl support 2010-08-31 13:41:59 -07:00
strnlen.c Add linux libspl support 2010-08-31 13:41:59 -07:00
timestamp.c Add linux libspl support 2010-08-31 13:41:59 -07:00
xdr.c Add linux libspl support 2010-08-31 13:41:59 -07:00
zone.c cstyle: Resolve C style issues 2013-12-18 16:46:35 -08:00