]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Jan 2020 14:05:40 +0000 (15:05 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 15 Jan 2020 14:05:40 +0000 (15:05 +0100)
added patches:
ethtool-reduce-stack-usage-with-clang.patch
fs-select-avoid-clang-stack-usage-warning.patch

queue-4.19/ethtool-reduce-stack-usage-with-clang.patch [new file with mode: 0644]
queue-4.19/fs-select-avoid-clang-stack-usage-warning.patch [new file with mode: 0644]
queue-4.19/series

diff --git a/queue-4.19/ethtool-reduce-stack-usage-with-clang.patch b/queue-4.19/ethtool-reduce-stack-usage-with-clang.patch
new file mode 100644 (file)
index 0000000..a54d8fc
--- /dev/null
@@ -0,0 +1,66 @@
+From 3499e87ea0413ee5b2cc028f4c8ed4d424bc7f98 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Thu, 7 Mar 2019 16:58:35 +0100
+Subject: ethtool: reduce stack usage with clang
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit 3499e87ea0413ee5b2cc028f4c8ed4d424bc7f98 upstream.
+
+clang inlines the dev_ethtool() more aggressively than gcc does, leading
+to a larger amount of used stack space:
+
+net/core/ethtool.c:2536:24: error: stack frame size of 1216 bytes in function 'dev_ethtool' [-Werror,-Wframe-larger-than=]
+
+Marking the sub-functions that require the most stack space as
+noinline_for_stack gives us reasonable behavior on all compilers.
+
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Reviewed-by: Michal Kubecek <mkubecek@suse.cz>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Miles Chen <miles.chen@mediatek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/core/ethtool.c |   16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+--- a/net/core/ethtool.c
++++ b/net/core/ethtool.c
+@@ -2413,9 +2413,10 @@ static int ethtool_set_tunable(struct ne
+       return ret;
+ }
+-static int ethtool_get_per_queue_coalesce(struct net_device *dev,
+-                                        void __user *useraddr,
+-                                        struct ethtool_per_queue_op *per_queue_opt)
++static noinline_for_stack int
++ethtool_get_per_queue_coalesce(struct net_device *dev,
++                             void __user *useraddr,
++                             struct ethtool_per_queue_op *per_queue_opt)
+ {
+       u32 bit;
+       int ret;
+@@ -2443,9 +2444,10 @@ static int ethtool_get_per_queue_coalesc
+       return 0;
+ }
+-static int ethtool_set_per_queue_coalesce(struct net_device *dev,
+-                                        void __user *useraddr,
+-                                        struct ethtool_per_queue_op *per_queue_opt)
++static noinline_for_stack int
++ethtool_set_per_queue_coalesce(struct net_device *dev,
++                             void __user *useraddr,
++                             struct ethtool_per_queue_op *per_queue_opt)
+ {
+       u32 bit;
+       int i, ret = 0;
+@@ -2499,7 +2501,7 @@ roll_back:
+       return ret;
+ }
+-static int ethtool_set_per_queue(struct net_device *dev,
++static int noinline_for_stack ethtool_set_per_queue(struct net_device *dev,
+                                void __user *useraddr, u32 sub_cmd)
+ {
+       struct ethtool_per_queue_op per_queue_opt;
diff --git a/queue-4.19/fs-select-avoid-clang-stack-usage-warning.patch b/queue-4.19/fs-select-avoid-clang-stack-usage-warning.patch
new file mode 100644 (file)
index 0000000..2c97899
--- /dev/null
@@ -0,0 +1,54 @@
+From ad312f95d41c9de19313c51e388c4984451c010f Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Tue, 14 May 2019 15:41:42 -0700
+Subject: fs/select: avoid clang stack usage warning
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit ad312f95d41c9de19313c51e388c4984451c010f upstream.
+
+The select() implementation is carefully tuned to put a sensible amount
+of data on the stack for holding a copy of the user space fd_set, but
+not too large to risk overflowing the kernel stack.
+
+When building a 32-bit kernel with clang, we need a little more space
+than with gcc, which often triggers a warning:
+
+  fs/select.c:619:5: error: stack frame size of 1048 bytes in function 'core_sys_select' [-Werror,-Wframe-larger-than=]
+  int core_sys_select(int n, fd_set __user *inp, fd_set __user *outp,
+
+I experimentally found that for 32-bit ARM, reducing the maximum stack
+usage by 64 bytes keeps us reliably under the warning limit again.
+
+Link: http://lkml.kernel.org/r/20190307090146.1874906-1-arnd@arndb.de
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Reviewed-by: Andi Kleen <ak@linux.intel.com>
+Cc: Nick Desaulniers <ndesaulniers@google.com>
+Cc: Alexander Viro <viro@zeniv.linux.org.uk>
+Cc: Christoph Hellwig <hch@lst.de>
+Cc: Eric Dumazet <edumazet@google.com>
+Cc: "Darrick J. Wong" <darrick.wong@oracle.com>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Miles Chen <miles.chen@mediatek.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/poll.h |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- a/include/linux/poll.h
++++ b/include/linux/poll.h
+@@ -16,7 +16,11 @@
+ extern struct ctl_table epoll_table[]; /* for sysctl */
+ /* ~832 bytes of stack space used max in sys_select/sys_poll before allocating
+    additional memory. */
++#ifdef __clang__
++#define MAX_STACK_ALLOC 768
++#else
+ #define MAX_STACK_ALLOC 832
++#endif
+ #define FRONTEND_STACK_ALLOC  256
+ #define SELECT_STACK_ALLOC    FRONTEND_STACK_ALLOC
+ #define POLL_STACK_ALLOC      FRONTEND_STACK_ALLOC
index 4d1cfae346e4193c7534810c8dd66d80dc311cd9..15de0a098eb3bf1ecec918b06950453ace1657c9 100644 (file)
@@ -1,3 +1,5 @@
 hidraw-return-epollout-from-hidraw_poll.patch
 hid-hidraw-fix-returning-epollout-from-hidraw_poll.patch
 hid-hidraw-uhid-always-report-epollout.patch
+ethtool-reduce-stack-usage-with-clang.patch
+fs-select-avoid-clang-stack-usage-warning.patch