]> git.proxmox.com Git - mirror_zfs.git/commit
sysmacros: Make P2ROUNDUP not trigger int overflow
authorJason Zaman <jason@perfinion.com>
Sat, 24 Oct 2015 06:01:08 +0000 (14:01 +0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 17 Nov 2015 00:10:07 +0000 (16:10 -0800)
commit5c790678f1a5231b75be174eb8a02e15dfe9b4d5
tree8b24f0f99ddc34ac640b6aca8711cdeb496d0a7b
parent27a19a0d5a5297f399eaa6eca86dc4047e484078
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
lib/libspl/include/sys/sysmacros.h