From: Greg Kroah-Hartman Date: Wed, 15 Jan 2020 14:05:40 +0000 (+0100) Subject: 4.19-stable patches X-Git-Tag: v4.14.166~45 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2beb33c626a20b679dd15b56d3f1a2f8a8d5e7a3;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: ethtool-reduce-stack-usage-with-clang.patch fs-select-avoid-clang-stack-usage-warning.patch --- 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 index 00000000000..a54d8fcd993 --- /dev/null +++ b/queue-4.19/ethtool-reduce-stack-usage-with-clang.patch @@ -0,0 +1,66 @@ +From 3499e87ea0413ee5b2cc028f4c8ed4d424bc7f98 Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Thu, 7 Mar 2019 16:58:35 +0100 +Subject: ethtool: reduce stack usage with clang + +From: Arnd Bergmann + +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 +Reviewed-by: Michal Kubecek +Signed-off-by: David S. Miller +Signed-off-by: Miles Chen +Signed-off-by: Greg Kroah-Hartman + +--- + 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 index 00000000000..2c97899ea91 --- /dev/null +++ b/queue-4.19/fs-select-avoid-clang-stack-usage-warning.patch @@ -0,0 +1,54 @@ +From ad312f95d41c9de19313c51e388c4984451c010f Mon Sep 17 00:00:00 2001 +From: Arnd Bergmann +Date: Tue, 14 May 2019 15:41:42 -0700 +Subject: fs/select: avoid clang stack usage warning + +From: Arnd Bergmann + +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 +Reviewed-by: Andi Kleen +Cc: Nick Desaulniers +Cc: Alexander Viro +Cc: Christoph Hellwig +Cc: Eric Dumazet +Cc: "Darrick J. Wong" +Cc: Greg Kroah-Hartman +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +Signed-off-by: Miles Chen +Signed-off-by: Greg Kroah-Hartman + +--- + 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 diff --git a/queue-4.19/series b/queue-4.19/series index 4d1cfae346e..15de0a098eb 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -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