lkml.org 
[lkml]   [2020]   [Jan]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 05/71] fs/select: avoid clang stack usage warning
    Date
    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
    @@ -15,7 +15,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

    \
     
     \ /
      Last update: 2020-01-17 00:32    [W:2.944 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site