Alexei Starovoitov
af86ca4e30
bpf: Prevent memory disambiguation attack
Detect code patterns where malicious 'speculative store bypass' can be used
and sanitize such patterns.
39: (bf) r3 = r10
40: (07) r3 += -216
41: (79) r8 = *(u64 *)(r7 +0) // slow read
42: (7a) *(u64 *)(r10 -72) = 0 // verifier inserts this instruction
43: (7b) *(u64 *)(r8 +0) = r3 // this store becomes slow due to r8
44: (79) r1 = *(u64 *)(r6 +0) // cpu speculatively executes this load
45: (71) r2 = *(u8 *)(r1 +0) // speculatively arbitrary 'load byte'
// is now sanitized
Above code after x86 JIT becomes:
e5: mov %rbp,%rdx
e8: add $0xffffffffffffff28,%rdx
ef: mov 0x0(%r13),%r14
f3: movq $0x0,-0x48(%rbp)
fb: mov %rdx,0x0(%r14)
ff: mov 0x0(%rbx),%rdi
103: movzbq 0x0(%rdi),%rsi
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2018-05-19 20:44:24 +02:00
..
2018-05-19 20:44:24 +02:00
2018-04-03 18:00:13 -07:00
2018-02-10 13:16:35 -08:00
2018-04-12 10:21:19 -07:00
2018-04-17 09:47:40 -03:00
2017-11-02 11:10:55 +01:00
2018-04-06 12:19:51 +02:00
2018-04-17 13:42:48 +02:00
2018-03-31 07:30:50 +02:00
2018-04-09 13:49:40 +02:00
2018-04-10 11:27:30 -07:00
2018-02-23 15:15:41 -08:00
2018-04-15 12:43:30 -07:00
2018-04-26 14:53:32 +02:00
2018-04-29 09:03:25 -07:00
2018-01-04 16:45:09 -08:00
2018-02-06 18:32:44 -08:00
2018-02-23 11:22:22 -05:00
2017-08-16 16:48:34 -07:00
2018-04-06 15:01:25 -07:00
2018-02-23 11:22:22 -05:00
2018-02-15 14:36:29 -05:00
2018-02-15 14:40:25 -05:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-04-02 20:15:32 +02:00
2017-07-31 13:09:49 +02:00
2018-03-15 20:34:40 +01:00
2018-04-13 17:10:27 -07:00
2018-01-16 03:29:36 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-02-22 14:28:50 -05:00
2018-04-02 20:14:51 +02:00
2018-02-21 16:54:06 +01:00
2018-03-12 16:16:00 +01:00
2018-04-20 17:18:35 -07:00
2017-11-02 11:10:55 +01:00
2018-02-06 18:32:46 -08:00
2017-12-14 16:00:49 -08:00
2018-01-08 19:43:15 +01:00
2018-03-20 08:57:17 +01:00
2018-02-01 13:36:15 -08:00
2017-11-02 11:10:55 +01:00
2018-02-06 18:32:46 -08:00
2017-07-18 11:38:04 +02:00
2018-04-13 17:10:28 -07:00
2017-11-02 11:10:55 +01:00
2018-04-02 20:15:01 +02:00
2017-09-08 18:26:51 -07:00
2018-04-25 10:27:56 -04:00
2017-07-12 16:25:59 -07:00
2017-11-21 16:35:54 -08:00
2018-01-12 17:33:38 -08:00
2018-03-06 10:58:54 -08:00
2018-04-18 22:59:46 +02:00
2018-01-05 18:43:00 +11:00
2018-04-11 10:28:35 -07:00
2018-04-11 10:28:37 -07:00
2018-04-03 19:15:32 -07:00
2018-04-11 10:28:39 -07:00
2018-02-06 18:32:46 -08:00
2017-11-02 11:10:55 +01:00
2017-11-17 16:10:04 -08:00
2018-02-21 15:35:43 -08:00
2018-04-13 17:10:27 -07:00
2018-05-05 00:51:44 +02:00
2018-04-07 11:11:41 -07:00
2017-11-08 11:13:50 +01:00
2017-10-04 10:53:54 +02:00
2017-11-02 11:10:55 +01:00
2018-03-09 11:50:55 +01:00
2018-04-05 16:59:38 +02:00
2018-05-03 13:55:51 +02:00
2018-04-16 11:26:49 +02:00
2018-04-11 10:28:38 -07:00
2017-12-17 13:57:15 +01:00
2018-02-06 18:32:46 -08:00
2017-10-20 11:02:54 +02:00
2017-12-11 09:18:30 -08:00
2017-12-04 10:52:56 -08:00
2018-04-05 21:36:27 -07:00
2018-04-02 20:15:59 +02:00
2018-04-02 20:15:30 +02:00
2018-04-02 20:14:51 +02:00
2017-08-29 15:14:38 +02:00
2017-11-16 12:20:15 -08:00
2018-02-22 10:21:02 -08:00
2018-04-11 10:28:35 -07:00
2017-11-04 08:53:04 +01:00
2017-11-08 10:17:15 +01:00
2017-11-06 12:26:49 -08:00
2018-04-03 18:00:13 -07:00