Commit Graph

1331 Commits

Author SHA1 Message Date
Greg Kroah-Hartman 46f9f7c3c3 Linux 4.9.130 2018-09-29 03:07:35 -07:00
Greg Kroah-Hartman 6ceccdf5ca Linux 4.9.129 2018-09-26 08:36:41 +02:00
Greg Kroah-Hartman 70915e25e1 Linux 4.9.128 2018-09-19 22:47:17 +02:00
Greg Kroah-Hartman 927556eb3a Linux 4.9.127 2018-09-15 09:43:07 +02:00
Greg Kroah-Hartman 66f5a871e5 Linux 4.9.126 2018-09-09 20:01:26 +02:00
Greg Kroah-Hartman 9eabacaf4c Linux 4.9.125 2018-09-05 09:20:11 +02:00
Greg Kroah-Hartman e8d49e4292 Linux 4.9.124 2018-08-24 13:12:43 +02:00
Greg Kroah-Hartman 676054232e Linux 4.9.123 2018-08-22 07:47:16 +02:00
Greg Kroah-Hartman ea101a7026 Linux 4.9.122 2018-08-18 10:47:20 +02:00
Greg Kroah-Hartman d0e3227f31 Linux 4.9.121 2018-08-17 20:59:30 +02:00
Andrey Konovalov 76b6f30f94 kasan: don't emit builtin calls when sanitization is off
commit 0e410e158e upstream.

With KASAN enabled the kernel has two different memset() functions, one
with KASAN checks (memset) and one without (__memset).  KASAN uses some
macro tricks to use the proper version where required.  For example
memset() calls in mm/slub.c are without KASAN checks, since they operate
on poisoned slab object metadata.

The issue is that clang emits memset() calls even when there is no
memset() in the source code.  They get linked with improper memset()
implementation and the kernel fails to boot due to a huge amount of KASAN
reports during early boot stages.

The solution is to add -fno-builtin flag for files with KASAN_SANITIZE :=
n marker.

Link: http://lkml.kernel.org/r/8ffecfffe04088c52c42b92739c2bd8a0bcb3f5e.1516384594.git.andreyknvl@google.com
Signed-off-by: Andrey Konovalov <andreyknvl@google.com>
Acked-by: Nick Desaulniers <ndesaulniers@google.com>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
Cc: Michal Marek <michal.lkml@markovi.net>
Cc: Andrey Ryabinin <aryabinin@virtuozzo.com>
Cc: Alexander Potapenko <glider@google.com>
Cc: Dmitry Vyukov <dvyukov@google.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
[ Sami: Backported to 4.9 avoiding c5caf21ab0 and e7c52b84fb ]
Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-08-17 20:59:29 +02:00
Greg Kroah-Hartman 93e02ae420 Linux 4.9.120 2018-08-15 18:14:55 +02:00
Greg Kroah-Hartman 8f21ecb424 Linux 4.9.119 2018-08-09 12:18:00 +02:00
Greg Kroah-Hartman e01202b36f Linux 4.9.118 2018-08-06 16:23:04 +02:00
Greg Kroah-Hartman ddd28fff50 Linux 4.9.117 2018-08-03 07:55:27 +02:00
Greg Kroah-Hartman 94c67449c7 Linux 4.9.116 2018-07-28 07:49:14 +02:00
Arnd Bergmann b1a1d9bdb1 turn off -Wattribute-alias
Starting with gcc-8.1, we get a warning about all system call definitions,
which use an alias between functions with incompatible prototypes, e.g.:

In file included from ../mm/process_vm_access.c:19:
../include/linux/syscalls.h:211:18: warning: 'sys_process_vm_readv' alias between functions of incompatible types 'long int(pid_t,  const struct iovec *, long unsigned int,  const struct iovec *, long unsigned int,  long unsigned int)' {aka 'long int(int,  const struct iovec *, long unsigned int,  const struct iovec *, long unsigned int,  long unsigned int)'} and 'long int(long int,  long int,  long int,  long int,  long int,  long int)' [-Wattribute-alias]
  asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \
                  ^~~
../include/linux/syscalls.h:207:2: note: in expansion of macro '__SYSCALL_DEFINEx'
  __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
  ^~~~~~~~~~~~~~~~~
../include/linux/syscalls.h:201:36: note: in expansion of macro 'SYSCALL_DEFINEx'
 #define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
                                    ^~~~~~~~~~~~~~~
../mm/process_vm_access.c:300:1: note: in expansion of macro 'SYSCALL_DEFINE6'
 SYSCALL_DEFINE6(process_vm_readv, pid_t, pid, const struct iovec __user *, lvec,
 ^~~~~~~~~~~~~~~
../include/linux/syscalls.h:215:18: note: aliased declaration here
  asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \
                  ^~~
../include/linux/syscalls.h:207:2: note: in expansion of macro '__SYSCALL_DEFINEx'
  __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
  ^~~~~~~~~~~~~~~~~
../include/linux/syscalls.h:201:36: note: in expansion of macro 'SYSCALL_DEFINEx'
 #define SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, _##name, __VA_ARGS__)
                                    ^~~~~~~~~~~~~~~
../mm/process_vm_access.c:300:1: note: in expansion of macro 'SYSCALL_DEFINE6'
 SYSCALL_DEFINE6(process_vm_readv, pid_t, pid, const struct iovec __user *, lvec,

This is really noisy and does not indicate a real problem. In the latest
mainline kernel, this was addressed by commit bee2003177 ("disable
-Wattribute-alias warning for SYSCALL_DEFINEx()"), which seems too invasive
to backport.

This takes a much simpler approach and just disables the warning across the
kernel.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-07-28 07:49:13 +02:00
Greg Kroah-Hartman dbcdf42bab Linux 4.9.115 2018-07-25 11:24:03 +02:00
Greg Kroah-Hartman 19e5f4da12 Linux 4.9.114 2018-07-22 14:27:43 +02:00
Greg Kroah-Hartman f77982e691 Linux 4.9.113 2018-07-17 11:37:54 +02:00
Greg Kroah-Hartman 060744011e Linux 4.9.112 2018-07-11 16:26:46 +02:00
Greg Kroah-Hartman e692f66fab Linux 4.9.111 2018-07-03 11:23:18 +02:00
Greg Kroah-Hartman c806e08569 Linux 4.9.110 2018-06-26 08:08:09 +08:00
Greg Kroah-Hartman 8e52b94e19 Linux 4.9.109 2018-06-16 09:52:35 +02:00
Greg Kroah-Hartman 4f42dc62be Linux 4.9.108 2018-06-13 16:16:44 +02:00
Greg Kroah-Hartman 3c3d05fc6e Linux 4.9.107 2018-06-06 16:44:39 +02:00
Greg Kroah-Hartman 2460c23c35 Linux 4.9.106 2018-06-05 10:28:58 +02:00
Greg Kroah-Hartman 3762b3e2aa Linux 4.9.105 2018-05-30 22:25:17 +02:00
Greg Kroah-Hartman 5b90d559d4 Linux 4.9.104 2018-05-30 07:50:52 +02:00
Greg Kroah-Hartman aa4b4ace9c Linux 4.9.103 2018-05-25 16:13:16 +02:00
Greg Kroah-Hartman 2272cdd5d5 Linux 4.9.102 2018-05-22 16:58:04 +02:00
Greg Kroah-Hartman 6ba89b52ba Linux 4.9.101 2018-05-19 10:27:01 +02:00
Greg Kroah-Hartman 872e1aead3 Linux 4.9.100 2018-05-16 10:08:45 +02:00
Greg Kroah-Hartman 04cd74a759 Linux 4.9.99 2018-05-09 09:50:24 +02:00
Greg Kroah-Hartman eff40cb190 Linux 4.9.98 2018-05-01 15:13:10 -07:00
Greg Kroah-Hartman ba3cd57962 Linux 4.9.97 2018-04-29 11:32:03 +02:00
Greg Kroah-Hartman 5cd35f3eb5 Linux 4.9.96 2018-04-24 09:34:18 +02:00
Greg Kroah-Hartman eedaf21fb3 Linux 4.9.95 2018-04-20 08:21:08 +02:00
Greg Kroah-Hartman cc0eb4dd50 Linux 4.9.94 2018-04-13 19:48:37 +02:00
Greg Kroah-Hartman d32da5bd9f Linux 4.9.93 2018-04-08 12:13:01 +02:00
Greg Kroah-Hartman f080bba272 Linux 4.9.92 2018-03-31 18:11:36 +02:00
Greg Kroah-Hartman c44cfe06df Linux 4.9.91 2018-03-28 18:39:26 +02:00
Daniel Borkmann 733a4e1af8 kbuild: disable clang's default use of -fmerge-all-constants
commit 87e0d4f0f3 upstream.

Prasad reported that he has seen crashes in BPF subsystem with netd
on Android with arm64 in the form of (note, the taint is unrelated):

  [ 4134.721483] Unable to handle kernel paging request at virtual address 800000001
  [ 4134.820925] Mem abort info:
  [ 4134.901283]   Exception class = DABT (current EL), IL = 32 bits
  [ 4135.016736]   SET = 0, FnV = 0
  [ 4135.119820]   EA = 0, S1PTW = 0
  [ 4135.201431] Data abort info:
  [ 4135.301388]   ISV = 0, ISS = 0x00000021
  [ 4135.359599]   CM = 0, WnR = 0
  [ 4135.470873] user pgtable: 4k pages, 39-bit VAs, pgd = ffffffe39b946000
  [ 4135.499757] [0000000800000001] *pgd=0000000000000000, *pud=0000000000000000
  [ 4135.660725] Internal error: Oops: 96000021 [#1] PREEMPT SMP
  [ 4135.674610] Modules linked in:
  [ 4135.682883] CPU: 5 PID: 1260 Comm: netd Tainted: G S      W       4.14.19+ #1
  [ 4135.716188] task: ffffffe39f4aa380 task.stack: ffffff801d4e0000
  [ 4135.731599] PC is at bpf_prog_add+0x20/0x68
  [ 4135.741746] LR is at bpf_prog_inc+0x20/0x2c
  [ 4135.751788] pc : [<ffffff94ab7ad584>] lr : [<ffffff94ab7ad638>] pstate: 60400145
  [ 4135.769062] sp : ffffff801d4e3ce0
  [...]
  [ 4136.258315] Process netd (pid: 1260, stack limit = 0xffffff801d4e0000)
  [ 4136.273746] Call trace:
  [...]
  [ 4136.442494] 3ca0: ffffff94ab7ad584 0000000060400145 ffffffe3a01bf8f8 0000000000000006
  [ 4136.460936] 3cc0: 0000008000000000 ffffff94ab844204 ffffff801d4e3cf0 ffffff94ab7ad584
  [ 4136.479241] [<ffffff94ab7ad584>] bpf_prog_add+0x20/0x68
  [ 4136.491767] [<ffffff94ab7ad638>] bpf_prog_inc+0x20/0x2c
  [ 4136.504536] [<ffffff94ab7b5d08>] bpf_obj_get_user+0x204/0x22c
  [ 4136.518746] [<ffffff94ab7ade68>] SyS_bpf+0x5a8/0x1a88

Android's netd was basically pinning the uid cookie BPF map in BPF
fs (/sys/fs/bpf/traffic_cookie_uid_map) and later on retrieving it
again resulting in above panic. Issue is that the map was wrongly
identified as a prog! Above kernel was compiled with clang 4.0,
and it turns out that clang decided to merge the bpf_prog_iops and
bpf_map_iops into a single memory location, such that the two i_ops
could then not be distinguished anymore.

Reason for this miscompilation is that clang has the more aggressive
-fmerge-all-constants enabled by default. In fact, clang source code
has a comment about it in lib/AST/ExprConstant.cpp on why it is okay
to do so:

  Pointers with different bases cannot represent the same object.
  (Note that clang defaults to -fmerge-all-constants, which can
  lead to inconsistent results for comparisons involving the address
  of a constant; this generally doesn't matter in practice.)

The issue never appeared with gcc however, since gcc does not enable
-fmerge-all-constants by default and even *explicitly* states in
it's option description that using this flag results in non-conforming
behavior, quote from man gcc:

  Languages like C or C++ require each variable, including multiple
  instances of the same variable in recursive calls, to have distinct
  locations, so using this option results in non-conforming behavior.

There are also various clang bug reports open on that matter [1],
where clang developers acknowledge the non-conforming behavior,
and refer to disabling it with -fno-merge-all-constants. But even
if this gets fixed in clang today, there are already users out there
that triggered this. Thus, fix this issue by explicitly adding
-fno-merge-all-constants to the kernel's Makefile to generically
disable this optimization, since potentially other places in the
kernel could subtly break as well.

Note, there is also a flag called -fmerge-constants (not supported
by clang), which is more conservative and only applies to strings
and it's enabled in gcc's -O/-O2/-O3/-Os optimization levels. In
gcc's code, the two flags -fmerge-{all-,}constants share the same
variable internally, so when disabling it via -fno-merge-all-constants,
then we really don't merge any const data (e.g. strings), and text
size increases with gcc (14,927,214 -> 14,942,646 for vmlinux.o).

  $ gcc -fverbose-asm -O2 foo.c -S -o foo.S
    -> foo.S lists -fmerge-constants under options enabled
  $ gcc -fverbose-asm -O2 -fno-merge-all-constants foo.c -S -o foo.S
    -> foo.S doesn't list -fmerge-constants under options enabled
  $ gcc -fverbose-asm -O2 -fno-merge-all-constants -fmerge-constants foo.c -S -o foo.S
    -> foo.S lists -fmerge-constants under options enabled

Thus, as a workaround we need to set both -fno-merge-all-constants
*and* -fmerge-constants in the Makefile in order for text size to
stay as is.

  [1] https://bugs.llvm.org/show_bug.cgi?id=18538

Reported-by: Prasad Sodagudi <psodagud@codeaurora.org>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Chenbo Feng <fengc@google.com>
Cc: Richard Smith <richard-llvm@metafoo.co.uk>
Cc: Chandler Carruth <chandlerc@gmail.com>
Cc: linux-kernel@vger.kernel.org
Tested-by: Prasad Sodagudi <psodagud@codeaurora.org>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2018-03-28 18:39:26 +02:00
Greg Kroah-Hartman 24f70aa804 Linux 4.9.90 2018-03-24 11:00:27 +01:00
Greg Kroah-Hartman a779add58a Linux 4.9.89 2018-03-22 09:18:01 +01:00
Greg Kroah-Hartman 46e076f0da Linux 4.9.88 2018-03-18 11:18:56 +01:00
Greg Kroah-Hartman b67416226a Linux 4.9.87 2018-03-11 16:21:35 +01:00
Greg Kroah-Hartman 6a83eb2354 Linux 4.9.86 2018-03-03 10:23:29 +01:00
Greg Kroah-Hartman c426a717c3 Linux 4.9.85 2018-02-28 10:18:34 +01:00
Greg Kroah-Hartman 19c04ca5b2 Linux 4.9.84 2018-02-25 11:05:56 +01:00