posix-timers: Prevent UB from shifting negative signed value
authorNick Desaulniers <nick.desaulniers@gmail.com>
Fri, 29 Dec 2017 03:11:36 +0000 (22:11 -0500)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 4 Jan 2018 13:57:10 +0000 (14:57 +0100)
commit29f1b2b0fecfae69e31833836f1da3136696eee5
tree4c299cbdc55a3cc3236e8ef3cc80e6af51ee4a57
parent00a5ae218d57741088068799b810416ac249a9ce
posix-timers: Prevent UB from shifting negative signed value

Shifting a negative signed number is undefined behavior. Looking at the
macros MAKE_PROCESS_CPUCLOCK and FD_TO_CLOCKID, it seems that the
subexpression:

(~(clockid_t) (pid) << 3)

where clockid_t resolves to a signed int, which once negated, is
undefined behavior to shift the value of if the results thus far are
negative.

It was further suggested to make these macros into inline functions.

Suggested-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Nick Desaulniers <nick.desaulniers@gmail.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Dimitri Sivanich <sivanich@hpe.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-kselftest@vger.kernel.org
Cc: Shuah Khan <shuah@kernel.org>
Cc: Deepa Dinamani <deepa.kernel@gmail.com>
Link: https://lkml.kernel.org/r/1514517100-18051-1-git-send-email-nick.desaulniers@gmail.com
include/linux/posix-timers.h
kernel/time/posix-clock.c
kernel/time/posix-cpu-timers.c
tools/testing/selftests/ptp/testptp.c