Jan Kara
473d7f5ed7
blktrace: Protect q->blk_trace with RCU
...
commit c780e86dd48ef6467a1146cf7d0fe1e05a635039 upstream.
KASAN is reporting that __blk_add_trace() has a use-after-free issue
when accessing q->blk_trace. Indeed the switching of block tracing (and
thus eventual freeing of q->blk_trace) is completely unsynchronized with
the currently running tracing and thus it can happen that the blk_trace
structure is being freed just while __blk_add_trace() works on it.
Protect accesses to q->blk_trace by RCU during tracing and make sure we
wait for the end of RCU grace period when shutting down tracing. Luckily
that is rare enough event that we can afford that. Note that postponing
the freeing of blk_trace to an RCU callback should better be avoided as
it could have unexpected user visible side-effects as debugfs files
would be still existing for a short while block tracing has been shut
down.
Link: https://bugzilla.kernel.org/show_bug.cgi?id=205711
CC: stable@vger.kernel.org
Reviewed-by: Chaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
Reviewed-by: Ming Lei <ming.lei@redhat.com>
Tested-by: Ming Lei <ming.lei@redhat.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reported-by: Tristan Madani <tristmd@gmail.com>
Signed-off-by: Jan Kara <jack@suse.cz>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
[bwh: Backported to 4.19: adjust context]
Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2020-04-29 16:31:17 +02:00
..
bpf
bpf: fix buggy r0 retval refinement for tracing helpers
2020-04-23 10:30:24 +02:00
cgroup
cgroup1: don't call release_agent when it is ""
2020-04-02 15:28:14 +02:00
configs
kconfig: tinyconfig: remove stale stack protector fixups
2018-06-15 07:15:28 +09:00
debug
kdb: do a sanity check on the cpu in kdb_per_cpu()
2020-01-27 14:50:48 +01:00
dma
dma-debug: add a schedule point in debug_dma_dump_mappings()
2020-01-04 19:12:43 +01:00
events
perf/core: Disable page faults when getting phys address
2020-04-29 16:31:14 +02:00
gcov
kernel/gcov/fs.c: gcov_seq_next() should increase position index
2020-04-29 16:31:12 +02:00
irq
genirq/irqdomain: Check pointer in irq_domain_alloc_irqs_hierarchy()
2020-04-17 10:48:41 +02:00
livepatch
livepatch: Nullify obj->mod in klp_module_coming()'s error path
2019-10-07 18:57:10 +02:00
locking
locktorture: Print ratio of acquisitions, not failures
2020-04-23 10:30:23 +02:00
power
PM / hibernate: memory_bm_find_bit(): Tighten node optimisation
2020-01-09 10:18:58 +01:00
printk
printk: fix exclusive_console replaying
2020-02-11 04:33:51 -08:00
rcu
rcu: Avoid data-race in rcu_gp_fqs_check_wake()
2020-02-11 04:33:55 -08:00
sched
sched: Avoid scale real weight down to zero
2020-04-17 10:48:40 +02:00
time
clocksource: Prevent double add_timer_on() for watchdog_timer
2020-02-11 04:34:18 -08:00
trace
blktrace: Protect q->blk_trace with RCU
2020-04-29 16:31:17 +02:00
.gitignore
acct.c
acct_on(): don't mess with freeze protection
2019-05-31 06:46:05 -07:00
async.c
kernel/async.c: revert "async: simplify lowest_in_progress()"
2018-02-06 18:32:44 -08:00
audit.c
audit: always check the netlink payload length in audit_receive_msg()
2020-03-05 16:42:23 +01:00
audit.h
audit: track the owner of the command mutex ourselves
2018-02-23 11:22:22 -05:00
audit_fsnotify.c
fsnotify: add fsnotify_add_inode_mark() wrappers
2018-05-18 14:58:22 +02:00
audit_tree.c
audit: Embed key into chunk
2019-12-13 08:51:11 +01:00
audit_watch.c
audit_get_nd(): don't unlock parent too early
2019-12-13 08:51:02 +01:00
auditfilter.c
audit: fix error handling in audit_data_to_entry()
2020-03-05 16:42:17 +01:00
auditsc.c
audit: print empty EXECVE args
2019-12-01 09:17:17 +01:00
backtracetest.c
bounds.c
kbuild: fix kernel/bounds.c 'W=1' warning
2018-11-13 11:08:47 -08:00
capability.c
LSM: generalize flag passing to security_capable
2020-01-23 08:21:29 +01:00
compat.c
time: Enable get/put_compat_itimerspec64 always
2018-06-24 14:39:47 +02:00
configs.c
context_tracking.c
cpu.c
x86/speculation: Remove redundant arch_smt_update() invocation
2020-04-17 10:48:50 +02:00
cpu_pm.c
crash_core.c
kernel/crash_core.c: print timestamp using time64_t
2018-08-22 10:52:47 -07:00
crash_dump.c
cred.c
memcg: account security cred as well to kmemcg
2020-01-09 10:19:00 +01:00
delayacct.c
delayacct: Use raw_spinlocks
2018-04-27 14:34:51 +02:00
dma.c
proc: introduce proc_create_single{,_data}
2018-05-16 07:23:35 +02:00
elfcore.c
kernel/elfcore.c: include proper prototypes
2019-10-11 18:21:23 +02:00
exec_domain.c
proc: introduce proc_create_single{,_data}
2018-05-16 07:23:35 +02:00
exit.c
exit: panic before exit_mm() on global init exit
2020-01-09 10:19:02 +01:00
extable.c
extable: Make init_kernel_text() global
2018-02-21 16:54:06 +01:00
fail_function.c
bpf/error-inject/kprobes: Clear current_kprobe and enable preempt in kprobe
2018-06-21 12:33:19 +02:00
fork.c
fork,memcg: alloc_thread_stack_node needs to set tsk->stack
2020-01-27 14:50:58 +01:00
freezer.c
PM / reboot: Eliminate race between reboot and suspend
2018-08-06 12:35:20 +02:00
futex.c
futex: Unbreak futex hashing
2020-03-25 08:06:14 +01:00
groups.c
hung_task.c
kernel: hung_task.c: disable on suspend
2019-04-20 09:16:02 +02:00
iomem.c
memremap: split devm_memremap_pages() and memremap() infrastructure
2018-05-15 23:08:33 -07:00
irq_work.c
irq_work: Do not raise an IPI when queueing work on the local CPU
2019-05-31 06:46:19 -07:00
jump_label.c
jump_label: move 'asm goto' support test to Kconfig
2019-06-04 08:02:34 +02:00
kallsyms.c
kallsyms: Don't let kallsyms_lookup_size_offset() fail on retrieving the first symbol
2019-09-21 07:17:02 +02:00
kcmp.c
Kconfig.freezer
Kconfig.hz
Kconfig.locks
Kconfig.preempt
kconfig: include kernel/Kconfig.preempt from init/Kconfig
2018-08-02 08:06:54 +09:00
kcov.c
kernel/kcov.c: mark write_comp_data() as notrace
2019-02-12 19:47:20 +01:00
kexec.c
kexec: add call to LSM hook in original kexec_load syscall
2018-07-16 12:31:57 -07:00
kexec_core.c
kexec: Allocate decrypted control pages for kdump if SME is enabled
2019-11-24 08:20:29 +01:00
kexec_file.c
treewide: Use array_size() in vzalloc()
2018-06-12 16:19:22 -07:00
kexec_internal.h
kmod.c
kmod: make request_module() return an error when autoloading is disabled
2020-04-17 10:48:52 +02:00
kprobes.c
kprobes: Fix optimize_kprobe()/unoptimize_kprobe() cancellation logic
2020-03-11 14:14:47 +01:00
ksysfs.c
kthread.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-08-13 11:25:07 -07:00
latencytop.c
Makefile
y2038: futex: Move compat implementation into futex.c
2019-12-01 09:17:38 +01:00
memremap.c
mm/memory_hotplug: shrink zones when offlining memory
2020-01-29 16:43:27 +01:00
module-internal.h
modsign: log module name in the event of an error
2018-07-02 11:36:17 +02:00
module.c
module: avoid setting info->name early in case we can fall back to info->mod->name
2020-02-24 08:34:49 +01:00
module_signing.c
modsign: log module name in the event of an error
2018-07-02 11:36:17 +02:00
notifier.c
x86/mm: split vmalloc_sync_all()
2020-03-25 08:06:13 +01:00
nsproxy.c
padata.c
padata: always acquire cpu_hotplug_lock before pinst->lock
2020-04-13 10:45:05 +02:00
panic.c
kernel/panic.c: do not append newline to the stack protector panic string
2019-12-01 09:17:10 +01:00
params.c
kernel/params.c: downgrade warning for unsafe parameters
2018-04-11 10:28:37 -07:00
pid.c
Fix failure path in alloc_pid()
2019-01-13 09:51:06 +01:00
pid_namespace.c
signal/pid_namespace: Fix reboot_pid_ns to use send_sig not force_sig
2019-07-26 09:14:01 +02:00
profile.c
ptrace.c
ptrace: reintroduce usage of subjective credentials in ptrace_has_cap()
2020-01-23 08:21:29 +01:00
range.c
reboot.c
PM / reboot: Eliminate race between reboot and suspend
2018-08-06 12:35:20 +02:00
relay.c
relay: check return of create_buf_file() properly
2019-03-13 14:02:35 -07:00
resource.c
resource: fix locking in find_next_iomem_res()
2019-09-16 08:22:20 +02:00
rseq.c
rseq: uapi: Declare rseq_cs field as union, update includes
2018-07-10 22:18:52 +02:00
seccomp.c
LSM: generalize flag passing to security_capable
2020-01-23 08:21:29 +01:00
signal.c
signal: Extend exec_id to 64bits
2020-04-17 10:48:47 +02:00
smp.c
cpu/hotplug: Fix "SMT disabled by BIOS" detection for KVM
2019-02-12 19:47:25 +01:00
smpboot.c
smpboot: Remove cpumask from the API
2018-07-03 09:20:44 +02:00
smpboot.h
softirq.c
nohz: Fix missing tick reprogram when interrupting an inline softirq
2018-08-03 15:52:10 +02:00
stacktrace.c
stop_machine.c
Merge branch 'sched-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-08-13 11:25:07 -07:00
sys.c
kernel/sys.c: prctl: fix false positive in validate_prctl_map()
2019-06-15 11:54:01 +02:00
sys_ni.c
Merge branch 'core-rseq-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
2018-06-10 10:17:09 -07:00
sysctl.c
kernel: sysctl: make drop_caches write-only
2020-01-04 19:13:17 +01:00
sysctl_binary.c
staging: irda: remove remaining remants of irda code removal
2018-04-16 11:26:49 +02:00
task_work.c
taskstats.c
taskstats: fix data-race
2020-01-09 10:18:59 +01:00
test_kprobes.c
kprobes: Remove jprobe API implementation
2018-06-21 12:33:05 +02:00
torture.c
torture: Keep old-school dmesg format
2018-06-25 11:30:10 -07:00
tracepoint.c
tracepoint: Fix tracepoint array element size mismatch
2018-10-17 15:35:29 -04:00
tsacct.c
ucount.c
headers: untangle kmemleak.h from mm.h
2018-04-05 21:36:27 -07:00
uid16.c
fs: add do_fchownat(), ksys_fchown() helpers and ksys_{,l}chown() wrappers
2018-04-02 20:15:59 +02:00
uid16.h
kernel: provide ksys_*() wrappers for syscalls called by kernel/uid16.c
2018-04-02 20:15:30 +02:00
umh.c
umh: fix race condition
2018-06-07 16:56:28 -04:00
up.c
user-return-notifier.c
user.c
userns: use irqsave variant of refcount_dec_and_lock()
2018-08-22 10:52:47 -07:00
user_namespace.c
userns: also map extents in the reverse map to kernel IDs
2018-11-13 11:09:00 -08:00
utsname.c
uts: create "struct uts_namespace" from kmem_cache
2018-04-11 10:28:35 -07:00
utsname_sysctl.c
sys: don't hold uts_sem while accessing userspace memory
2018-08-11 02:05:53 -05:00
watchdog.c
watchdog/softlockup: Enforce that timestamp is valid on boot
2020-02-24 08:34:49 +01:00
watchdog_hld.c
watchdog: Mark watchdog touch functions as notrace
2018-08-30 12:56:40 +02:00
workqueue.c
workqueue: don't use wq_select_unbound_cpu() for bound works
2020-03-18 07:14:20 +01:00
workqueue_internal.h
workqueue: Set worker->desc to workqueue name by default
2018-05-18 08:47:13 -07:00