Roman Gushchin
df2a419677
mm: fix null pointer dereference in mem_cgroup_protected
...
Shakeel reported a crash in mem_cgroup_protected(), which can be triggered
by memcg reclaim if the legacy cgroup v1 use_hierarchy=0 mode is used:
BUG: unable to handle kernel NULL pointer dereference at 0000000000000120
PGD 8000001ff55da067 P4D 8000001ff55da067 PUD 1fdc7df067 PMD 0
Oops: 0000 [#4 ] SMP PTI
CPU: 0 PID: 15581 Comm: bash Tainted: G D 4.17.0-smp-clean #5
Hardware name: ...
RIP: 0010:mem_cgroup_protected+0x54/0x130
Code: 4c 8b 8e 00 01 00 00 4c 8b 86 08 01 00 00 48 8d 8a 08 ff ff ff 48 85 d2 ba 00 00 00 00 48 0f 44 ca 48 39 c8 0f 84 cf 00 00 00 <48> 8b 81 20 01 00 00 4d 89 ca 4c 39 c8 4c 0f 46 d0 4d 85 d2 74 05
RSP: 0000:ffffabe64dfafa58 EFLAGS: 00010286
RAX: ffff9fb6ff03d000 RBX: ffff9fb6f5b1b000 RCX: 0000000000000000
RDX: 0000000000000000 RSI: ffff9fb6f5b1b000 RDI: ffff9fb6f5b1b000
RBP: ffffabe64dfafb08 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 000000000000c800 R12: ffffabe64dfafb88
R13: ffff9fb6f5b1b000 R14: ffffabe64dfafb88 R15: ffff9fb77fffe000
FS: 00007fed1f8ac700(0000) GS:ffff9fb6ff400000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000120 CR3: 0000001fdcf86003 CR4: 00000000001606f0
Call Trace:
? shrink_node+0x194/0x510
do_try_to_free_pages+0xfd/0x390
try_to_free_mem_cgroup_pages+0x123/0x210
try_charge+0x19e/0x700
mem_cgroup_try_charge+0x10b/0x1a0
wp_page_copy+0x134/0x5b0
do_wp_page+0x90/0x460
__handle_mm_fault+0x8e3/0xf30
handle_mm_fault+0xfe/0x220
__do_page_fault+0x262/0x500
do_page_fault+0x28/0xd0
? page_fault+0x8/0x30
page_fault+0x1e/0x30
RIP: 0033:0x485b72
The problem happens because parent_mem_cgroup() returns a NULL pointer,
which is dereferenced later without a check.
As cgroup v1 has no memory guarantee support, let's make
mem_cgroup_protected() immediately return MEMCG_PROT_NONE, if the given
cgroup has no parent (non-hierarchical mode is used).
Link: http://lkml.kernel.org/r/20180611175418.7007-2-guro@fb.com
Fixes: bf8d5d52ffe8 ("memcg: introduce memory.min")
Signed-off-by: Roman Gushchin <guro@fb.com>
Reported-by: Shakeel Butt <shakeelb@google.com>
Tested-by: Shakeel Butt <shakeelb@google.com>
Tested-by: John Stultz <john.stultz@linaro.org>
Acked-by: Johannes Weiner <hannes@cmpxchg.org>
Acked-by: Michal Hocko <mhocko@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2018-06-15 07:55:23 +09:00
..
2018-05-25 18:12:11 -07:00
2018-06-07 17:34:36 -07:00
2017-11-14 23:57:38 +02:00
2018-02-06 18:32:48 -08:00
2018-04-16 14:18:15 -06:00
2017-11-02 11:10:55 +01:00
2018-05-24 10:07:50 -07:00
2017-11-02 11:10:55 +01:00
2018-05-24 10:07:50 -07:00
2017-11-02 11:10:55 +01:00
2018-01-04 16:45:09 -08:00
2017-02-27 18:43:47 -08:00
2017-12-11 14:54:44 +01:00
2018-04-02 20:16:10 +02:00
2018-04-05 21:36:26 -07:00
2018-06-07 17:34:36 -07:00
2017-12-14 16:00:48 -08:00
2018-04-16 14:18:15 -06:00
2018-06-12 16:19:22 -07:00
2018-06-08 17:21:52 -07:00
2017-11-02 11:10:55 +01:00
2018-05-22 06:59:39 -07:00
2018-06-12 16:19:22 -07:00
2018-06-07 17:34:35 -07:00
2018-06-12 16:19:22 -07:00
2018-01-23 12:17:42 -06:00
2018-06-07 17:34:34 -07:00
2018-06-05 13:24:20 -07:00
2018-01-31 17:18:37 -08:00
2018-06-08 17:21:52 -07:00
2017-11-15 18:21:05 -08:00
2018-04-11 10:28:39 -07:00
2016-03-17 15:09:34 -07:00
2018-04-05 21:36:27 -07:00
2018-06-15 07:55:23 +09:00
2018-04-05 21:36:27 -07:00
2018-02-06 18:32:48 -08:00
2018-01-23 12:17:42 -06:00
2018-06-07 17:34:35 -07:00
2018-06-07 17:34:36 -07:00
2018-06-15 07:55:23 +09:00
2018-06-07 17:34:35 -07:00
2018-06-07 17:34:36 -07:00
2018-04-11 10:28:32 -07:00
2018-06-07 18:39:37 -07:00
2018-04-11 10:28:32 -07:00
2018-05-14 13:14:23 -06:00
2017-11-02 11:10:55 +01:00
2018-05-11 17:28:45 -07:00
2017-11-02 11:10:55 +01:00
2018-02-21 15:35:42 -08:00
2016-03-17 15:09:34 -07:00
2018-06-07 17:34:36 -07:00
2017-03-02 08:42:38 +01:00
2018-01-31 17:18:38 -08:00
2017-11-02 11:10:55 +01:00
2018-04-11 10:28:31 -07:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2017-11-02 11:10:55 +01:00
2018-06-07 17:34:36 -07:00
2018-06-07 17:34:35 -07:00
2018-06-07 17:34:38 -07:00
2018-06-07 17:34:36 -07:00
2018-01-31 17:18:39 -08:00
2018-04-05 21:36:25 -07:00
2018-01-06 09:18:00 -07:00
2018-04-11 10:28:32 -07:00
2018-04-05 21:36:26 -07:00
2018-04-05 21:36:26 -07:00
2018-01-22 12:15:57 -08:00
2018-04-20 17:18:35 -07:00
2018-04-05 21:36:27 -07:00
2017-11-02 11:10:55 +01:00
2018-02-18 05:33:01 -08:00
2018-06-12 16:19:22 -07:00
2018-02-18 05:33:01 -08:00
2018-04-02 20:20:12 -07:00
2018-01-31 17:18:38 -08:00
2018-02-06 18:32:48 -08:00
2017-11-02 11:10:55 +01:00
2018-06-01 18:37:32 -07:00
2018-04-27 17:13:20 -06:00
2017-10-03 17:54:24 -07:00
2018-06-07 17:34:38 -07:00
2018-04-05 21:36:26 -07:00
2018-06-12 16:19:22 -07:00
2018-04-05 21:36:24 -07:00
2018-06-07 17:34:34 -07:00
2018-06-12 16:19:22 -07:00
2018-01-08 11:46:23 -08:00
2018-06-07 17:34:35 -07:00
2017-11-02 11:10:55 +01:00
2018-06-12 16:19:22 -07:00
2018-06-12 16:19:22 -07:00
2018-05-22 06:59:39 -07:00
2018-06-12 16:19:22 -07:00
2018-04-11 10:28:39 -07:00
2018-01-15 12:07:48 -08:00
2018-06-07 17:34:38 -07:00
2018-06-07 17:34:38 -07:00
2017-11-02 11:10:55 +01:00
2018-06-07 17:34:35 -07:00
2018-06-07 17:34:36 -07:00
2018-06-07 17:34:36 -07:00
2018-05-16 07:23:35 +02:00
2018-04-11 10:28:39 -07:00
2018-05-11 17:28:45 -07:00
2018-02-06 18:32:48 -08:00
2018-02-21 15:35:43 -08:00
2018-04-05 21:36:27 -07:00
2018-02-21 15:35:43 -08:00