mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2025-10-25 17:35:00 +03:00
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 |
||
|---|---|---|
| .. | ||
| ia32 | ||
| rpc | ||
| sys | ||
| util | ||
| assert.h | ||
| atomic.h | ||
| attr.h | ||
| devid.h | ||
| libdevinfo.h | ||
| libgen.h | ||
| libshare.h | ||
| limits.h | ||
| locale.h | ||
| Makefile.am | ||
| note.h | ||
| priv.h | ||
| statcommon.h | ||
| stdio.h | ||
| stdlib.h | ||
| string.h | ||
| strings.h | ||
| stropts.h | ||
| synch.h | ||
| thread.h | ||
| tzfile.h | ||
| ucred.h | ||
| umem.h | ||
| unistd.h | ||
| zone.h | ||