]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.18-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Jun 2017 09:45:20 +0000 (11:45 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 15 Jun 2017 09:45:20 +0000 (11:45 +0200)
added patches:
log2-make-order_base_2-behave-correctly-on-const-input-value-zero.patch

queue-3.18/log2-make-order_base_2-behave-correctly-on-const-input-value-zero.patch [new file with mode: 0644]
queue-3.18/series

diff --git a/queue-3.18/log2-make-order_base_2-behave-correctly-on-const-input-value-zero.patch b/queue-3.18/log2-make-order_base_2-behave-correctly-on-const-input-value-zero.patch
new file mode 100644 (file)
index 0000000..238f028
--- /dev/null
@@ -0,0 +1,59 @@
+From 29905b52fad0854351f57bab867647e4982285bf Mon Sep 17 00:00:00 2001
+From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Date: Thu, 2 Feb 2017 18:05:26 +0000
+Subject: log2: make order_base_2() behave correctly on const input value zero
+
+From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+
+commit 29905b52fad0854351f57bab867647e4982285bf upstream.
+
+The function order_base_2() is defined (according to the comment block)
+as returning zero on input zero, but subsequently passes the input into
+roundup_pow_of_two(), which is explicitly undefined for input zero.
+
+This has gone unnoticed until now, but optimization passes in GCC 7 may
+produce constant folded function instances where a constant value of
+zero is passed into order_base_2(), resulting in link errors against the
+deliberately undefined '____ilog2_NaN'.
+
+So update order_base_2() to adhere to its own documented interface.
+
+[ See
+
+     http://marc.info/?l=linux-kernel&m=147672952517795&w=2
+
+  and follow-up discussion for more background. The gcc "optimization
+  pass" is really just broken, but now the GCC trunk problem seems to
+  have escaped out of just specially built daily images, so we need to
+  work around it in mainline.    - Linus ]
+
+Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/log2.h |   13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+--- a/include/linux/log2.h
++++ b/include/linux/log2.h
+@@ -194,6 +194,17 @@ unsigned long __rounddown_pow_of_two(uns
+  *  ... and so on.
+  */
+-#define order_base_2(n) ilog2(roundup_pow_of_two(n))
++static inline __attribute_const__
++int __order_base_2(unsigned long n)
++{
++      return n > 1 ? ilog2(n - 1) + 1 : 0;
++}
++#define order_base_2(n)                               \
++(                                             \
++      __builtin_constant_p(n) ? (             \
++              ((n) == 0 || (n) == 1) ? 0 :    \
++              ilog2((n) - 1) + 1) :           \
++      __order_base_2(n)                       \
++)
+ #endif /* _LINUX_LOG2_H */
index ce13f581415d045fa17bbbfd89c8933165661746..6105826d88793cdb925004b2cf3fa042d1edd62a 100644 (file)
@@ -5,3 +5,4 @@ net-xilinx_emaclite-fix-freezes-due-to-unordered-i-o.patch
 net-xilinx_emaclite-fix-receive-buffer-overflow.patch
 ipv6-handle-ipv4-mapped-src-to-in6addr_any-dst.patch
 ipv6-inhibit-ipv4-mapped-src-address-on-the-wire.patch
+log2-make-order_base_2-behave-correctly-on-const-input-value-zero.patch