Dmitry Vyukov
478cf2d41e
mm/kmemleak.c: fix check for softirq context
...
[ Upstream commit 6ef9056952532c3b746de46aa10d45b4d7797bd8 ]
in_softirq() is a wrong predicate to check if we are in a softirq
context. It also returns true if we have BH disabled, so objects are
falsely stamped with "softirq" comm. The correct predicate is
in_serving_softirq().
If user does cat from /sys/kernel/debug/kmemleak previously they would
see this, which is clearly wrong, this is system call context (see the
comm):
unreferenced object 0xffff88805bd661c0 (size 64):
comm "softirq", pid 0, jiffies 4294942959 (age 12.400s)
hex dump (first 32 bytes):
00 00 00 00 00 00 00 00 ff ff ff ff 00 00 00 00 ................
00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................
backtrace:
[<0000000007dcb30c>] kmemleak_alloc_recursive include/linux/kmemleak.h:55 [inline]
[<0000000007dcb30c>] slab_post_alloc_hook mm/slab.h:439 [inline]
[<0000000007dcb30c>] slab_alloc mm/slab.c:3326 [inline]
[<0000000007dcb30c>] kmem_cache_alloc_trace+0x13d/0x280 mm/slab.c:3553
[<00000000969722b7>] kmalloc include/linux/slab.h:547 [inline]
[<00000000969722b7>] kzalloc include/linux/slab.h:742 [inline]
[<00000000969722b7>] ip_mc_add1_src net/ipv4/igmp.c:1961 [inline]
[<00000000969722b7>] ip_mc_add_src+0x36b/0x400 net/ipv4/igmp.c:2085
[<00000000a4134b5f>] ip_mc_msfilter+0x22d/0x310 net/ipv4/igmp.c:2475
[<00000000d20248ad>] do_ip_setsockopt.isra.0+0x19fe/0x1c00 net/ipv4/ip_sockglue.c:957
[<000000003d367be7>] ip_setsockopt+0x3b/0xb0 net/ipv4/ip_sockglue.c:1246
[<000000003c7c76af>] udp_setsockopt+0x4e/0x90 net/ipv4/udp.c:2616
[<000000000c1aeb23>] sock_common_setsockopt+0x3e/0x50 net/core/sock.c:3130
[<000000000157b92b>] __sys_setsockopt+0x9e/0x120 net/socket.c:2078
[<00000000a9f3d058>] __do_sys_setsockopt net/socket.c:2089 [inline]
[<00000000a9f3d058>] __se_sys_setsockopt net/socket.c:2086 [inline]
[<00000000a9f3d058>] __x64_sys_setsockopt+0x26/0x30 net/socket.c:2086
[<000000001b8da885>] do_syscall_64+0x7c/0x1a0 arch/x86/entry/common.c:301
[<00000000ba770c62>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
now they will see this:
unreferenced object 0xffff88805413c800 (size 64):
comm "syz-executor.4", pid 8960, jiffies 4294994003 (age 14.350s)
hex dump (first 32 bytes):
00 7a 8a 57 80 88 ff ff e0 00 00 01 00 00 00 00 .z.W............
00 00 00 00 00 00 00 00 01 00 00 00 00 00 00 00 ................
backtrace:
[<00000000c5d3be64>] kmemleak_alloc_recursive include/linux/kmemleak.h:55 [inline]
[<00000000c5d3be64>] slab_post_alloc_hook mm/slab.h:439 [inline]
[<00000000c5d3be64>] slab_alloc mm/slab.c:3326 [inline]
[<00000000c5d3be64>] kmem_cache_alloc_trace+0x13d/0x280 mm/slab.c:3553
[<0000000023865be2>] kmalloc include/linux/slab.h:547 [inline]
[<0000000023865be2>] kzalloc include/linux/slab.h:742 [inline]
[<0000000023865be2>] ip_mc_add1_src net/ipv4/igmp.c:1961 [inline]
[<0000000023865be2>] ip_mc_add_src+0x36b/0x400 net/ipv4/igmp.c:2085
[<000000003029a9d4>] ip_mc_msfilter+0x22d/0x310 net/ipv4/igmp.c:2475
[<00000000ccd0a87c>] do_ip_setsockopt.isra.0+0x19fe/0x1c00 net/ipv4/ip_sockglue.c:957
[<00000000a85a3785>] ip_setsockopt+0x3b/0xb0 net/ipv4/ip_sockglue.c:1246
[<00000000ec13c18d>] udp_setsockopt+0x4e/0x90 net/ipv4/udp.c:2616
[<0000000052d748e3>] sock_common_setsockopt+0x3e/0x50 net/core/sock.c:3130
[<00000000512f1014>] __sys_setsockopt+0x9e/0x120 net/socket.c:2078
[<00000000181758bc>] __do_sys_setsockopt net/socket.c:2089 [inline]
[<00000000181758bc>] __se_sys_setsockopt net/socket.c:2086 [inline]
[<00000000181758bc>] __x64_sys_setsockopt+0x26/0x30 net/socket.c:2086
[<00000000d4b73623>] do_syscall_64+0x7c/0x1a0 arch/x86/entry/common.c:301
[<00000000c1098bec>] entry_SYSCALL_64_after_hwframe+0x44/0xa9
Link: http://lkml.kernel.org/r/20190517171507.96046-1-dvyukov@gmail.com
Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
Acked-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2019-08-04 09:33:41 +02:00
..
2019-05-08 07:19:07 +02:00
2019-05-21 18:49:01 +02:00
2016-07-26 16:19:19 -07:00
2016-10-11 15:06:33 -07:00
2016-01-27 09:09:57 -05:00
2019-06-22 08:17:12 +02:00
2019-06-22 08:17:12 +02:00
2017-01-12 11:39:32 +01:00
2016-03-17 15:09:34 -07:00
2018-09-19 22:47:17 +02:00
2016-03-17 15:09:34 -07:00
2018-02-25 11:05:49 +01:00
2018-09-15 09:42:57 +02:00
2016-03-15 16:55:16 -07:00
2018-04-24 09:34:18 +02:00
2018-11-10 07:42:52 -08:00
2016-07-26 16:19:19 -07:00
2019-06-11 12:22:45 +02:00
2016-05-19 19:12:14 -07:00
2018-12-05 19:42:36 +01:00
2016-05-20 17:58:30 -07:00
2019-06-22 08:17:12 +02:00
2017-01-06 10:40:13 +01:00
2018-01-31 12:55:53 +01:00
2018-05-22 16:57:57 +02:00
2016-09-13 02:35:27 +02:00
2018-12-05 19:42:38 +01:00
2016-03-17 15:09:34 -07:00
2016-03-17 15:09:34 -07:00
2019-08-04 09:33:41 +02:00
2018-05-30 07:50:41 +02:00
2019-06-22 08:17:18 +02:00
2016-05-22 17:21:27 -07:00
2018-10-10 08:53:20 +02:00
2016-10-12 10:23:41 -07:00
2017-08-30 10:21:47 +02:00
2018-09-05 09:20:04 +02:00
2019-03-13 14:04:58 -07:00
2019-03-23 13:19:49 +01:00
2019-02-20 10:18:34 +01:00
2019-04-05 22:29:05 +02:00
2016-07-28 16:07:41 -07:00
2019-03-13 14:04:54 -07:00
2019-05-21 18:48:58 +02:00
2019-07-10 09:55:43 +02:00
2016-03-17 15:09:34 -07:00
2019-03-05 17:57:07 +01:00
2016-04-28 11:44:19 +02:00
2016-03-17 15:09:34 -07:00
2016-05-19 19:12:14 -07:00
2018-08-15 18:14:45 +02:00
2018-10-20 09:51:31 +02:00
2017-08-24 17:12:19 -07:00
2017-01-06 10:40:13 +01:00
2019-02-12 19:45:02 +01:00
2019-06-22 08:17:12 +02:00
2015-11-05 19:34:48 -08:00
2019-04-05 22:29:06 +02:00
2019-07-10 09:55:38 +02:00
2016-10-07 18:46:29 -07:00
2016-10-07 18:46:29 -07:00
2016-10-07 18:46:27 -07:00
2016-06-03 15:06:22 -07:00
2019-01-26 09:38:35 +01:00
2017-11-24 08:33:42 +01:00
2016-03-17 15:09:34 -07:00
2019-04-27 09:34:47 +02:00
2016-03-17 15:09:34 -07:00
2016-10-18 14:13:37 -07:00
2016-03-17 15:09:34 -07:00
2016-08-26 17:39:35 -07:00
2018-11-21 09:26:03 +01:00
2019-03-23 13:19:44 +01:00
2018-12-01 09:44:19 +01:00
2019-06-22 08:17:13 +02:00
2017-03-22 12:43:38 +01:00
2017-03-22 12:43:38 +01:00
2018-10-03 17:01:50 -07:00
2016-08-02 17:31:41 -04:00
2017-10-21 17:21:36 +02:00
2017-07-05 14:40:17 +02:00
2016-10-07 18:46:28 -07:00
2016-10-07 18:46:28 -07:00
2018-08-15 18:14:45 +02:00
2018-12-08 13:05:09 +01:00
2016-09-20 16:07:39 -07:00
2016-04-04 10:41:08 -07:00
2019-01-16 22:12:32 +01:00
2018-09-19 22:47:17 +02:00
2019-04-05 22:29:06 +02:00
2017-03-12 06:41:43 +01:00
2018-09-19 22:47:12 +02:00
2019-04-27 09:34:46 +02:00
2017-04-08 09:30:36 +02:00
2016-06-03 16:02:55 -07:00
2016-01-15 11:40:52 -08:00
2015-11-06 17:50:42 -08:00
2019-02-27 10:07:03 +01:00
2018-09-05 09:20:02 +02:00