Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp5617242imu; Mon, 26 Nov 2018 03:04:23 -0800 (PST) X-Google-Smtp-Source: AFSGD/XolJJNIhVDDx+URkytnvxmuQOxc7R0nh3/BSklSUnF3zS6rexEbjly1ap8yHUohisA5kU1 X-Received: by 2002:a17:902:108a:: with SMTP id c10mr18085918pla.131.1543230263186; Mon, 26 Nov 2018 03:04:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1543230263; cv=none; d=google.com; s=arc-20160816; b=P2Aa45dprcFzNUlz2MNhZEgZ1WGkM0gyZ1nyuFAl3J+m24cFYF1e36yDL+i9JPXc27 vrNsaFlwkuHz/cUNE0av1MOWFQ0GvAMXzkB49KgQ46FVz5NR9VOCeLEPlcq/TyQHYu4g cg6M110b34WEq6Ea+7QgHhnSq72nEXdi7EcpchOQV+jC/2UozEJNtO+zIDudO2d3zyph aAlmKpPv/0tDfWxMBA8DI7KhqCLPE99CrRv9XnxPDOuQBRWDTZ6sFoyiZhKh1A0jLe4s 2NOzU2YhFnMgYAmzp9I+qTrhWyebKuFudmv/zfGpFE2uuQ4seH3mkj0yL/wksDjZ0DQN ULhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=mffGzMnHJtNPEX9v/SHQKD56ek76I8K3da6TJbJ/ji0=; b=QofcTHw0M1fBH5kd2JiZOK7Ih9LFAQkXJtAX4Akan0P4n/SQi+vgHmpQO56bI6EuEb 7TRQV5ictRZO2xo+JHG2ufetj2h+e+6Nx0qlwTSOPGyJyW9nDx/ixqAV9WSNgtoyFxaE Ak+WZDFHHBY73AoUczKasr+EVYA1wKWRVvp7uUm56NWEj4eXtQG1hvVEFp3g9AxvOYAy u6an1P6d3mG4bq28LBiBb5bFpXVXiqHUZNIVkhk1IOz85pz58SkElLDEAvKdQxseoWfy o98d2Hjqewo4265YdbxASbHZ2Hy1ws0N3EEeE2XK05FlczgCCorHdMmztJixSN83fN7V FByw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DlTLSOZt; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g7-v6si31286399plp.130.2018.11.26.03.04.07; Mon, 26 Nov 2018 03:04:23 -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=@kernel.org header.s=default header.b=DlTLSOZt; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730655AbeKZV4v (ORCPT + 99 others); Mon, 26 Nov 2018 16:56:51 -0500 Received: from mail.kernel.org ([198.145.29.99]:40468 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729290AbeKZV4u (ORCPT ); Mon, 26 Nov 2018 16:56:50 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 8505B20817; Mon, 26 Nov 2018 11:03:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1543230185; bh=NbGA7DvdooPg20XQwCj1rEC53F0m/U8+Q4c/c0Op3jk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DlTLSOZt7gUcYMdSeDB3X6jLBinh30yt4O+WTpGxHMWyHSJopUVh/uIc05b0eEDdE lqjmx2kt7Dy0e7mZg/cBT0YnQ20pVl9M/l403pcQzpAd3WEAJuE9kqVEkEEkqoF8eZ t9H2ajRuXCkRTkmWKR89AdlN5KqLtvsXiTrmRqlk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, syzbot+3701447012fe951dabb2@syzkaller.appspotmail.com, Ming Lei , Jens Axboe , Sasha Levin Subject: [PATCH 4.19 006/118] block: brd: associate with queue until adding disk Date: Mon, 26 Nov 2018 11:50:00 +0100 Message-Id: <20181126105100.093855271@linuxfoundation.org> X-Mailer: git-send-email 2.19.2 In-Reply-To: <20181126105059.832485122@linuxfoundation.org> References: <20181126105059.832485122@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 153fcd5f6d93b8e1e4040b1337f564a10f8d93af ] brd_free() may be called in failure path on one brd instance which disk isn't added yet, so release handler of gendisk may free the associated request_queue early and causes the following use-after-free[1]. This patch fixes this issue by associating gendisk with request_queue just before adding disk. [1] KASAN: use-after-free Read in del_timer_syncNon-volatile memory driver v1.3 Linux agpgart interface v0.103 [drm] Initialized vgem 1.0.0 20120112 for virtual device on minor 0 usbcore: registered new interface driver udl ================================================================== BUG: KASAN: use-after-free in __lock_acquire+0x36d9/0x4c20 kernel/locking/lockdep.c:3218 Read of size 8 at addr ffff8801d1b6b540 by task swapper/0/1 CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.19.0+ #88 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011 Call Trace: __dump_stack lib/dump_stack.c:77 [inline] dump_stack+0x244/0x39d lib/dump_stack.c:113 print_address_description.cold.7+0x9/0x1ff mm/kasan/report.c:256 kasan_report_error mm/kasan/report.c:354 [inline] kasan_report.cold.8+0x242/0x309 mm/kasan/report.c:412 __asan_report_load8_noabort+0x14/0x20 mm/kasan/report.c:433 __lock_acquire+0x36d9/0x4c20 kernel/locking/lockdep.c:3218 lock_acquire+0x1ed/0x520 kernel/locking/lockdep.c:3844 del_timer_sync+0xb7/0x270 kernel/time/timer.c:1283 blk_cleanup_queue+0x413/0x710 block/blk-core.c:809 brd_free+0x5d/0x71 drivers/block/brd.c:422 brd_init+0x2eb/0x393 drivers/block/brd.c:518 do_one_initcall+0x145/0x957 init/main.c:890 do_initcall_level init/main.c:958 [inline] do_initcalls init/main.c:966 [inline] do_basic_setup init/main.c:984 [inline] kernel_init_freeable+0x5c6/0x6b9 init/main.c:1148 kernel_init+0x11/0x1ae init/main.c:1068 ret_from_fork+0x3a/0x50 arch/x86/entry/entry_64.S:350 Reported-by: syzbot+3701447012fe951dabb2@syzkaller.appspotmail.com Signed-off-by: Ming Lei Signed-off-by: Jens Axboe Signed-off-by: Sasha Levin --- drivers/block/brd.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/block/brd.c b/drivers/block/brd.c index df8103dd40ac..c18586fccb6f 100644 --- a/drivers/block/brd.c +++ b/drivers/block/brd.c @@ -396,15 +396,14 @@ static struct brd_device *brd_alloc(int i) disk->first_minor = i * max_part; disk->fops = &brd_fops; disk->private_data = brd; - disk->queue = brd->brd_queue; disk->flags = GENHD_FL_EXT_DEVT; sprintf(disk->disk_name, "ram%d", i); set_capacity(disk, rd_size * 2); - disk->queue->backing_dev_info->capabilities |= BDI_CAP_SYNCHRONOUS_IO; + brd->brd_queue->backing_dev_info->capabilities |= BDI_CAP_SYNCHRONOUS_IO; /* Tell the block layer that this is not a rotational device */ - blk_queue_flag_set(QUEUE_FLAG_NONROT, disk->queue); - blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, disk->queue); + blk_queue_flag_set(QUEUE_FLAG_NONROT, brd->brd_queue); + blk_queue_flag_clear(QUEUE_FLAG_ADD_RANDOM, brd->brd_queue); return brd; @@ -436,6 +435,7 @@ static struct brd_device *brd_init_one(int i, bool *new) brd = brd_alloc(i); if (brd) { + brd->brd_disk->queue = brd->brd_queue; add_disk(brd->brd_disk); list_add_tail(&brd->brd_list, &brd_devices); } @@ -503,8 +503,14 @@ static int __init brd_init(void) /* point of no return */ - list_for_each_entry(brd, &brd_devices, brd_list) + list_for_each_entry(brd, &brd_devices, brd_list) { + /* + * associate with queue just before adding disk for + * avoiding to mess up failure path + */ + brd->brd_disk->queue = brd->brd_queue; add_disk(brd->brd_disk); + } blk_register_region(MKDEV(RAMDISK_MAJOR, 0), 1UL << MINORBITS, THIS_MODULE, brd_probe, NULL, NULL); -- 2.17.1