From: Luis Chamberlain <mcgrof@kernel.org> To: Christoph Hellwig <hch@infradead.org>, Jan Kara <jack@suse.cz> Cc: axboe@kernel.dk, viro@zeniv.linux.org.uk, bvanassche@acm.org, gregkh@linuxfoundation.org, rostedt@goodmis.org, mingo@redhat.com, ming.lei@redhat.com, nstange@suse.de, akpm@linux-foundation.org, mhocko@suse.com, yukuai3@huawei.com, martin.petersen@oracle.com, jejb@linux.ibm.com, linux-block@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, linux-kernel@vger.kernel.org, Omar Sandoval <osandov@fb.com>, Hannes Reinecke <hare@suse.com>, Michal Hocko <mhocko@kernel.org>, syzbot+603294af2d01acfdd6da@syzkaller.appspotmail.com Subject: Re: [PATCH v6 6/6] blktrace: fix debugfs use after free Date: Tue, 9 Jun 2020 17:29:22 +0000 [thread overview] Message-ID: <20200609172922.GP11244@42.do-not-panic.com> (raw) In-Reply-To: <20200609150602.GA7111@infradead.org> I like this, more below. On Tue, Jun 09, 2020 at 08:06:02AM -0700, Christoph Hellwig wrote: > diff --git a/kernel/trace/blktrace.c b/kernel/trace/blktrace.c > index 432fa60e7f8808..44239f603379d5 100644 > --- a/kernel/trace/blktrace.c > +++ b/kernel/trace/blktrace.c > @@ -492,34 +493,23 @@ static int do_blk_trace_setup(struct request_queue *q, char *name, dev_t dev, > */ > strreplace(buts->name, '/', '_'); > > - /* > - * We have to use a partition directory if a partition is being worked > - * on. The same request_queue is shared between all partitions. > - */ > - if (bdev && bdev != bdev->bd_contains) { > - dir = bdev->bd_part->debugfs_dir; > - } else if (IS_ENABLED(CONFIG_CHR_DEV_SG) && > - MAJOR(dev) == SCSI_GENERIC_MAJOR) { > + bt = kzalloc(sizeof(*bt), GFP_KERNEL); > + if (!bt) > + return -ENOMEM; > + > + if (unlikely(!bdev)) { > /* > - * scsi-generic exposes the request_queue through the /dev/sg* > - * interface but since that uses a different path than whatever > - * the respective scsi driver device name may expose and use > - * for the request_queue debugfs_dir. We have a dedicated > - * dentry for scsi-generic then. > + * When tracing something that is not a block device (e.g. the > + * /dev/sg nodes), create debugfs directory on demand. This > + * directory will be remove when stopping the trace. Is scsi-generic is the only unwanted ugly child blktrace has to deal with? For some reason I thought drivers/md/md.c was one but it seems like it is not. Do we have an easy way to search for these? I think this would just affect how we express the comment only. > */ > - dir = q->sg_debugfs_dir; > + dir = debugfs_create_dir(buts->name, blk_debugfs_root); > + bt->dir = dir; The other chicken and egg problem to consider at least in the comments is that the debugfs directory for these types of devices *have* an exposed path, but the data structure is rather opaque to the device and even blktrace. Fortunately given the recent set of changes around the q->blk_trace and clarifications around its use we have made it clear now that so long as hold the q->blk_trace_mutex *and* check q->blk_trace we *should* not race against two separate creations of debugfs directories, so I think this is safe, so long as these indpendent drivers don't end up re-using the same path for some other things later in the future, and since we have control over what goes under debugfsroot block / I think we should be good. But I think that the concern for race on names may still be worth explaining a bit here. Luis
next prev parent reply other threads:[~2020-06-09 17:29 UTC|newest] Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-06-08 17:01 [PATCH v6 0/8] block: fix blktrace " Luis Chamberlain 2020-06-08 17:01 ` [PATCH v6 1/6] block: add docs for gendisk / request_queue refcount helpers Luis Chamberlain 2020-06-08 17:01 ` [PATCH v6 2/6] block: clarify context for refcount increment helpers Luis Chamberlain 2020-06-08 17:01 ` [PATCH v6 3/6] block: revert back to synchronous request_queue removal Luis Chamberlain 2020-06-13 1:53 ` Bart Van Assche 2020-06-19 20:23 ` Luis Chamberlain 2020-06-08 17:01 ` [PATCH v6 4/6] blktrace: annotate required lock on do_blk_trace_setup() Luis Chamberlain 2020-06-09 14:18 ` Christoph Hellwig 2020-06-13 1:54 ` Bart Van Assche 2020-06-08 17:01 ` [PATCH v6 5/6] loop: be paranoid on exit and prevent new additions / removals Luis Chamberlain 2020-06-08 17:01 ` [PATCH v6 6/6] blktrace: fix debugfs use after free Luis Chamberlain 2020-06-09 15:06 ` Christoph Hellwig 2020-06-09 17:29 ` Luis Chamberlain [this message] 2020-06-09 17:32 ` Christoph Hellwig 2020-06-09 17:53 ` Luis Chamberlain 2020-06-10 6:42 ` Christoph Hellwig 2020-06-10 21:09 ` Luis Chamberlain 2020-06-10 21:52 ` Luis Chamberlain 2020-06-10 23:31 ` Luis Chamberlain 2020-06-11 5:40 ` Christoph Hellwig 2020-06-13 2:42 ` Bart Van Assche 2020-06-19 15:36 ` Luis Chamberlain
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200609172922.GP11244@42.do-not-panic.com \ --to=mcgrof@kernel.org \ --cc=akpm@linux-foundation.org \ --cc=axboe@kernel.dk \ --cc=bvanassche@acm.org \ --cc=gregkh@linuxfoundation.org \ --cc=hare@suse.com \ --cc=hch@infradead.org \ --cc=jack@suse.cz \ --cc=jejb@linux.ibm.com \ --cc=linux-block@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=martin.petersen@oracle.com \ --cc=mhocko@kernel.org \ --cc=mhocko@suse.com \ --cc=ming.lei@redhat.com \ --cc=mingo@redhat.com \ --cc=nstange@suse.de \ --cc=osandov@fb.com \ --cc=rostedt@goodmis.org \ --cc=syzbot+603294af2d01acfdd6da@syzkaller.appspotmail.com \ --cc=viro@zeniv.linux.org.uk \ --cc=yukuai3@huawei.com \ --subject='Re: [PATCH v6 6/6] blktrace: fix debugfs use after free' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).