Received: by 10.223.164.202 with SMTP id h10csp949237wrb; Tue, 7 Nov 2017 18:16:07 -0800 (PST) X-Google-Smtp-Source: ABhQp+QR7YudRI74RLDbE52qKwX68g4y16V09GaDc6HtheMZGV2Uj1e3JxphvYl4NtS25Vt7GnNo X-Received: by 10.84.168.35 with SMTP id e32mr711533plb.122.1510107367725; Tue, 07 Nov 2017 18:16:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1510107367; cv=none; d=google.com; s=arc-20160816; b=NMmqpzv6pjsyFOybg9fgo7Kb8ZOTb/8skQuI83WZOI3rYv2NfQkH93WHIHi3pmwr4+ eke/e+oUyk8XCcY4/tFDKVY9EUS8lzmc6jqe6ZNdWRUmQN2DrQiIc2Dl4+cyizsyL4UL Zo9NRJfsG/Ply+Znluv93XKuy9JhGpFDzbv8GGAAJjMnwtg+XJg0EQhmdf4ANcW+stru 1krhnG3RYcFD2oH49rMfw4Ygwsq/OkX2aZVDpdWVY0OteXF2xyp9nX65s37UmSw/pHWD fGk3MvmLEYABxTKzRnneb+CSWdk0qtYrEkn/4NzSjGPPuPr7cHST8HinjiKQWK/rTZps oR/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:dkim-signature :arc-authentication-results; bh=BR5MvYX2/GWVhCBIea2eUbBZ2xusSWqvJMGWrFdn90s=; b=x7oHzCnLXntYoppr4wKX/RanbsDmPcFMxCMPMC0GFh1vU4+KY42WjBcZ+1DmwBzSqB C1eSzFncUcm7JQH3srOEnWqU/cp0v3E2VPwS5G1DryTiphDJ8gloBG9tEg3TT5GpkFU7 Qa+mvweSAPxqu2cHVJ2KDQ8ukiyRVWS7duiUolKTPVoSc4oaD9C7J62+XbeftXFtW9GE 0GSO316MPoUmHdPP/v5DgrP4eZgaw3545E0PbFT6qVt84LT3P6scn2sqM09kLszrAGUz UXON1YELxEC9laNYE9IoFNwg4Y7XujNEwO6Ap8iD5cJREj21YIm/luioN5ejUJTmpmlK SGCw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=nsEzQWzV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t123si2430758pgc.151.2017.11.07.18.15.55; Tue, 07 Nov 2017 18:16:07 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=nsEzQWzV; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754627AbdKGSHD (ORCPT + 91 others); Tue, 7 Nov 2017 13:07:03 -0500 Received: from mail-io0-f194.google.com ([209.85.223.194]:44957 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754568AbdKGSHA (ORCPT ); Tue, 7 Nov 2017 13:07:00 -0500 Received: by mail-io0-f194.google.com with SMTP id m16so3096334iod.1 for ; Tue, 07 Nov 2017 10:07:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=BR5MvYX2/GWVhCBIea2eUbBZ2xusSWqvJMGWrFdn90s=; b=nsEzQWzVsOsST6wDY+QKzsUuwB+7IpADQKOTk1ybwAtecg7XRZh+oC601GRVgXyYiZ BYlQILJGQ2xEq+G9cnamiwfow/COSlTBS9ReePgBiSK2NyNgMB7fIWA27HGyJAlyJvK3 peJgFjmUJTL1B/NT+NHo/rwbtGXWUmfaIVLmaNJDgGe0DtyaT1dsx7AMUco20B1V6HXW vsiWYYMYP5SL+IkknqcA5rdSNe0UksQcYbeTgl6QIaI1fJLbSLPddQAo7vqG4sqq+M7O jf63+oApHctLwwIvxUG+fMsDYRrQ9L2u6w+NubZvkXCxKgy8ELlmSjLP22+rMSl5pitV y2/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=BR5MvYX2/GWVhCBIea2eUbBZ2xusSWqvJMGWrFdn90s=; b=PpRorwkQa36fPlP95soC2ISquszF5/4gRfiRAm3FomZpLibzzG/Xd09KGiqzBGENBV i/3ly/E0cEVSkwEE+l7C9b7P+88/qdLZQo86U0jiN09eluHAy0KoYgZdoA9hnO/1/3u9 Mz23gEWyooiK/bVsrQJFkcjUISOuJa52Bgwd8d0tHhGeWAjeNocO4vw1YjdVytFNjz8w nLOCAg7Lu/E9ot3t58ZmC0tJxOgiwfEc+/1sF4HW9zsF7cvrECIgRzINupLQqo67Pj8k hMIN2JeFBTJkoHqOncoYR6vc+dH2Lh1FgEV1mzNAGRpzjF6NVBgZN7fv+0w/do4iteVy P1eQ== X-Gm-Message-State: AMCzsaX14O3PYZwtzxx5bAgH0tmPbsWebZ9lVQPdjYU22/dD/pxY7lQd WEOdFzQzJ9ffBUyzX1e9V/oqvceKs5OXTJRFfsxmzA== X-Received: by 10.107.135.202 with SMTP id r71mr24088694ioi.26.1510078019169; Tue, 07 Nov 2017 10:06:59 -0800 (PST) MIME-Version: 1.0 Received: by 10.2.155.231 with HTTP; Tue, 7 Nov 2017 10:06:38 -0800 (PST) In-Reply-To: References: <001a114089d6731471055d37cb25@google.com> From: Dmitry Vyukov Date: Tue, 7 Nov 2017 19:06:38 +0100 Message-ID: Subject: Re: WARNING in tracepoint_probe_unregister To: Jens Axboe Cc: syzbot , Steven Rostedt , Mathieu Desnoyers , LKML , Ingo Molnar , syzkaller-bugs@googlegroups.com Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Sun, Nov 5, 2017 at 4:47 PM, Jens Axboe wrote: > On 11/05/2017 01:09 AM, Dmitry Vyukov wrote: >> On Sun, Nov 5, 2017 at 11:05 AM, syzbot >> >> wrote: >>> Hello, >>> >>> syzkaller hit the following crash on >>> 36ef71cae353f88fd6e095e2aaa3e5953af1685d >>> git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/master >>> compiler: gcc (GCC) 7.1.1 20170620 >>> .config is attached >>> Raw console output is attached. >>> C reproducer is attached >>> syzkaller reproducer is attached. See https://goo.gl/kgGztJ >>> for information about syzkaller reproducers >>> >>> >>> WARNING: CPU: 1 PID: 2992 at kernel/tracepoint.c:243 tracepoint_remove_func >>> kernel/tracepoint.c:243 [inline] >>> WARNING: CPU: 1 PID: 2992 at kernel/tracepoint.c:243 >>> tracepoint_probe_unregister+0x6b3/0x870 kernel/tracepoint.c:324 >>> Kernel panic - not syncing: panic_on_warn set ... >>> >>> CPU: 1 PID: 2992 Comm: syzkaller812809 Not tainted 4.14.0-rc5-next-20171018+ >>> #8 >>> Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011 >>> Call Trace: >>> __dump_stack lib/dump_stack.c:16 [inline] >>> dump_stack+0x194/0x257 lib/dump_stack.c:52 >>> panic+0x1e4/0x41c kernel/panic.c:183 >>> __warn+0x1c4/0x1e0 kernel/panic.c:546 >>> report_bug+0x211/0x2d0 lib/bug.c:183 >>> fixup_bug+0x40/0x90 arch/x86/kernel/traps.c:177 >>> do_trap_no_signal arch/x86/kernel/traps.c:211 [inline] >>> do_trap+0x260/0x390 arch/x86/kernel/traps.c:260 >>> do_error_trap+0x120/0x390 arch/x86/kernel/traps.c:297 >>> do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:310 >>> invalid_op+0x18/0x20 arch/x86/entry/entry_64.S:905 >>> RIP: 0010:tracepoint_remove_func kernel/tracepoint.c:243 [inline] >>> RIP: 0010:tracepoint_probe_unregister+0x6b3/0x870 kernel/tracepoint.c:324 >>> RSP: 0018:ffff8800397df890 EFLAGS: 00010293 >>> RAX: ffff88003982e8c0 RBX: 00000000fffffffe RCX: ffffffff81710233 >>> RDX: 0000000000000000 RSI: ffffffff85b679c0 RDI: 0000000000000282 >>> RBP: ffff8800397df9a8 R08: 0000000000000001 R09: 1ffff100072fbe6e >>> R10: ffff8800397df880 R11: 0000000000000001 R12: ffffffff8175b5e0 >>> R13: dffffc0000000000 R14: 0000000000000000 R15: ffff8800397df980 >>> unregister_trace_block_rq_remap include/trace/events/block.h:602 [inline] >>> blk_unregister_tracepoints+0x1e/0x160 kernel/trace/blktrace.c:1079 >>> blk_trace_cleanup+0x28/0x30 kernel/trace/blktrace.c:336 >>> blk_trace_remove+0x55/0x80 kernel/trace/blktrace.c:348 >>> sg_ioctl+0x5eb/0x2d90 drivers/scsi/sg.c:1098 >>> vfs_ioctl fs/ioctl.c:45 [inline] >>> do_vfs_ioctl+0x1b1/0x1520 fs/ioctl.c:685 >>> SYSC_ioctl fs/ioctl.c:700 [inline] >>> SyS_ioctl+0x8f/0xc0 fs/ioctl.c:691 >>> entry_SYSCALL_64_fastpath+0x1f/0xbe >>> RIP: 0033:0x4396a9 >>> RSP: 002b:00007ffd4d3facb8 EFLAGS: 00000206 ORIG_RAX: 0000000000000010 >>> RAX: ffffffffffffffda RBX: 00000000006ccac0 RCX: 00000000004396a9 >>> RDX: 000000002002d000 RSI: 4000000000001276 RDI: 0000000000000004 >>> RBP: 0000000000000082 R08: 00000000000000fe R09: 0000000000000000 >>> R10: 0000000000000000 R11: 0000000000000206 R12: 0000000000000038 >>> R13: ffffffffffffffff R14: 0000000000401eb0 R15: 0000000000000000 >>> Dumping ftrace buffer: >>> (ftrace buffer empty) >>> Kernel Offset: disabled >>> Rebooting in 86400 seconds.. >> >> >> Jens, this has the same root cause as "WARNING in >> tracepoint_probe_register_prio": >> https://groups.google.com/forum/#!msg/syzkaller-bugs/9IolqTA_NUk/LgLFZ6hQAQAJ >> right? > > Yep, it is - can/did you check the patch I sent out yesterday for this? > Here it is again. I re-run the attached reproducer and it does not trigger the warning with the patch: Tested-by: Dmitry Vyukov > diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c > index 45a3928544ce..206e0e2ace53 100644 > --- a/kernel/trace/blktrace.c > +++ b/kernel/trace/blktrace.c > @@ -66,7 +66,8 @@ static struct tracer_flags blk_tracer_flags = { > }; > > /* Global reference count of probes */ > -static atomic_t blk_probes_ref = ATOMIC_INIT(0); > +static DEFINE_MUTEX(blk_probe_mutex); > +static int blk_probes_ref; > > static void blk_register_tracepoints(void); > static void blk_unregister_tracepoints(void); > @@ -329,14 +330,29 @@ static void blk_trace_free(struct blk_trace *bt) > kfree(bt); > } > > +static void get_probe_ref(void) > +{ > + mutex_lock(&blk_probe_mutex); > + if (++blk_probes_ref == 1) > + blk_register_tracepoints(); > + mutex_unlock(&blk_probe_mutex); > +} > + > +static void put_probe_ref(void) > +{ > + mutex_lock(&blk_probe_mutex); > + if (!--blk_probes_ref) > + blk_unregister_tracepoints(); > + mutex_unlock(&blk_probe_mutex); > +} > + > static void blk_trace_cleanup(struct blk_trace *bt) > { > blk_trace_free(bt); > - if (atomic_dec_and_test(&blk_probes_ref)) > - blk_unregister_tracepoints(); > + put_probe_ref(); > } > > -int blk_trace_remove(struct request_queue *q) > +static int __blk_trace_remove(struct request_queue *q) > { > struct blk_trace *bt; > > @@ -349,6 +365,17 @@ int blk_trace_remove(struct request_queue *q) > > return 0; > } > + > +int blk_trace_remove(struct request_queue *q) > +{ > + int ret; > + > + mutex_lock(&q->blk_trace_mutex); > + ret = __blk_trace_remove(q); > + mutex_unlock(&q->blk_trace_mutex); > + > + return ret; > +} > EXPORT_SYMBOL_GPL(blk_trace_remove); > > static ssize_t blk_dropped_read(struct file *filp, char __user *buffer, > @@ -538,8 +565,7 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > if (cmpxchg(&q->blk_trace, NULL, bt)) > goto err; > > - if (atomic_inc_return(&blk_probes_ref) == 1) > - blk_register_tracepoints(); > + get_probe_ref(); > > ret = 0; > err: > @@ -550,9 +576,8 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > return ret; > } > > -int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > - struct block_device *bdev, > - char __user *arg) > +static int __blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > + struct block_device *bdev, char __user *arg) > { > struct blk_user_trace_setup buts; > int ret; > @@ -571,6 +596,19 @@ int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > } > return 0; > } > + > +int blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > + struct block_device *bdev, > + char __user *arg) > +{ > + int ret; > + > + mutex_lock(&q->blk_trace_mutex); > + ret = __blk_trace_setup(q, name, dev, bdev, arg); > + mutex_unlock(&q->blk_trace_mutex); > + > + return ret; > +} > EXPORT_SYMBOL_GPL(blk_trace_setup); > > #if defined(CONFIG_COMPAT) && defined(CONFIG_X86_64) > @@ -607,7 +645,7 @@ static int compat_blk_trace_setup(struct request_queue *q, char *name, > } > #endif > > -int blk_trace_startstop(struct request_queue *q, int start) > +static int __blk_trace_startstop(struct request_queue *q, int start) > { > int ret; > struct blk_trace *bt = q->blk_trace; > @@ -646,6 +684,17 @@ int blk_trace_startstop(struct request_queue *q, int start) > > return ret; > } > + > +int blk_trace_startstop(struct request_queue *q, int start) > +{ > + int ret; > + > + mutex_lock(&q->blk_trace_mutex); > + ret = __blk_trace_startstop(q, start); > + mutex_unlock(&q->blk_trace_mutex); > + > + return ret; > +} > EXPORT_SYMBOL_GPL(blk_trace_startstop); > > /* > @@ -676,7 +725,7 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg) > switch (cmd) { > case BLKTRACESETUP: > bdevname(bdev, b); > - ret = blk_trace_setup(q, b, bdev->bd_dev, bdev, arg); > + ret = __blk_trace_setup(q, b, bdev->bd_dev, bdev, arg); > break; > #if defined(CONFIG_COMPAT) && defined(CONFIG_X86_64) > case BLKTRACESETUP32: > @@ -687,10 +736,10 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg) > case BLKTRACESTART: > start = 1; > case BLKTRACESTOP: > - ret = blk_trace_startstop(q, start); > + ret = __blk_trace_startstop(q, start); > break; > case BLKTRACETEARDOWN: > - ret = blk_trace_remove(q); > + ret = __blk_trace_remove(q); > break; > default: > ret = -ENOTTY; > @@ -708,10 +757,14 @@ int blk_trace_ioctl(struct block_device *bdev, unsigned cmd, char __user *arg) > **/ > void blk_trace_shutdown(struct request_queue *q) > { > + mutex_lock(&q->blk_trace_mutex); > + > if (q->blk_trace) { > - blk_trace_startstop(q, 0); > - blk_trace_remove(q); > + __blk_trace_startstop(q, 0); > + __blk_trace_remove(q); > } > + > + mutex_unlock(&q->blk_trace_mutex); > } > > #ifdef CONFIG_BLK_CGROUP > @@ -1558,9 +1611,7 @@ static int blk_trace_remove_queue(struct request_queue *q) > if (bt == NULL) > return -EINVAL; > > - if (atomic_dec_and_test(&blk_probes_ref)) > - blk_unregister_tracepoints(); > - > + put_probe_ref(); > blk_trace_free(bt); > return 0; > } > @@ -1591,8 +1642,7 @@ static int blk_trace_setup_queue(struct request_queue *q, > if (cmpxchg(&q->blk_trace, NULL, bt)) > goto free_bt; > > - if (atomic_inc_return(&blk_probes_ref) == 1) > - blk_register_tracepoints(); > + get_probe_ref(); > return 0; > > free_bt: > > -- > Jens Axboe > From 1583462333081509248@xxx Wed Nov 08 02:15:58 +0000 2017 X-GM-THRID: 1583212569083978762 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread