Received: by 10.223.164.202 with SMTP id h10csp3425613wrb; Tue, 28 Nov 2017 11:05:08 -0800 (PST) X-Google-Smtp-Source: AGs4zMbSLutOo4oJMPZj0yRCRcqKh/9xh4pb6TmcajktLnFaTlZ3+OS5I1F+O2z4amGVYKOH3bTx X-Received: by 10.98.71.144 with SMTP id p16mr165124pfi.15.1511895907896; Tue, 28 Nov 2017 11:05:07 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511895907; cv=none; d=google.com; s=arc-20160816; b=MCXa5RL1qWDEQVoepTSOXGc4JJSRp/fb+LcK81oEqi5McZkUXjFBA5Dei1VP70ldDi CT5gIaJpZeDqhNzc5+v6qwxNUUmJTedvFReNq4XI2LRJCOBbW3sardVEgP9QQV4oolsG J+FKXuB1WDmjuXBgYy8r5mmxPn81PHNkHQrd1maRWEUumQsY33Pakx2b5BrFbys4WU8E E4OIcpZ8XStZtogY4SiS0edYQz32+W3bPuGaImYcuneDlIazt09cR1cuAhYZGhGxADkR SzEiW2KKFMSJ8fopG7zwggYgdMAL2sHRODhjzeyUFEvVcc1q0SRJDBD5hKNO7jKfRnsG NjEA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=I9PMkt3iP8rTpFHWaFfewV422xh+aOYz/5SDGFw2oDM=; b=SHX8JUT+R2J6UfaGytjpITBk9CDpoyMFYGL6w5InRu3smfYfiXSTHS/y1i3jfOHHHq fmfe86f1qzC2gAA5NDP9C5y3LnKoJIzSuA9VfnkbzwFLfqNcFlv67TKQ4l1cZE5TaFqx ccHd7u3SKrng1rxydw0/Fn0aNYaViZiIEylcSp04vHlT65X81aM+bhmmy+D863J2fpqk 1707MyZ0MSK1BCzjclRSNU3T5ngpZlOFIPLuw30K8OpYDefaKR5hiA30X3ZJERLjOSeu uBP/Nkb/He+DfMZNOkthdLojIeSXrdWuKgQIivvfXBjkTEerqbeVdPiGeORfXrIAn9Wy UHHQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e3si199259pgt.608.2017.11.28.11.04.56; Tue, 28 Nov 2017 11:05: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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754056AbdK1TCx (ORCPT + 72 others); Tue, 28 Nov 2017 14:02:53 -0500 Received: from mx1.redhat.com ([209.132.183.28]:59448 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751701AbdK1TCt (ORCPT ); Tue, 28 Nov 2017 14:02:49 -0500 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id A4AFBC0587C2; Tue, 28 Nov 2017 19:02:49 +0000 (UTC) Received: from localhost (unknown [10.18.25.149]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5D3B85C1AB; Tue, 28 Nov 2017 19:02:44 +0000 (UTC) Date: Tue, 28 Nov 2017 14:02:43 -0500 From: Mike Snitzer To: "Reshetova, Elena" Cc: Alasdair G Kergon , "dm-devel@redhat.com" , "keescook@chromium.org" , "peterz@infradead.org" , "shli@kernel.org" , "koverstreet@google.com" , "linux-kernel@vger.kernel.org" , "linux-raid@vger.kernel.org" , "linux-bcache@vger.kernel.org" , "ejt@redhat.com" , "kent.overstreet@gmail.com" , Zdenek Kabelac Subject: Re: [PATCH 3/4] dm: convert dm_dev_internal.count from atomic_t to refcount_t Message-ID: <20171128190225.GA32559@redhat.com> References: <1508485059-21881-1-git-send-email-elena.reshetova@intel.com> <1508485059-21881-4-git-send-email-elena.reshetova@intel.com> <20171123154941.GA15790@agk-dp.fab.redhat.com> <2236FBA76BA1254E88B949DDB74E612B802C1F07@IRSMSX102.ger.corp.intel.com> <2236FBA76BA1254E88B949DDB74E612B802C3EDA@IRSMSX102.ger.corp.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <2236FBA76BA1254E88B949DDB74E612B802C3EDA@IRSMSX102.ger.corp.intel.com> User-Agent: Mutt/1.5.21 (2010-09-15) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.32]); Tue, 28 Nov 2017 19:02:49 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 28 2017 at 5:07am -0500, Reshetova, Elena wrote: > > > On Fri, Nov 24, 2017 at 2:36 AM, Reshetova, Elena > > wrote: > > >> On Fri, Oct 20, 2017 at 10:37:38AM +0300, Elena Reshetova wrote: > > >> > } else if (dd->dm_dev->mode != (mode | dd->dm_dev->mode)) { > > >> > r = upgrade_mode(dd, mode, t->md); > > >> > if (r) > > >> > return r; > > >> > + refcount_inc(&dd->count); > > >> > } > > >> > > >> Missing here: > > >> > > >> else > > >> refcount_inc(&dd->count); > > >> > > >> ? > > > > > > Oh, yes, thanks for catching this! I think this got unnoticed so far and patch was > > merged, so I am going to send a followup patch now. > > > > I pushed this fix and will send to Linus next week: > > https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux- > > dm.git/commit/?h=dm-4.15&id=d908af82d06cc420f9581c97c6db941cb87e4434 > > > I guess you mean this commit: > https://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=for-next&id=c2318d07ead871f058dda62e942ed7b6b1c1cfcf > > Unfortunately it is not correct: > > diff --git a/drivers/md/dm-table.c b/drivers/md/dm-table.c > index 88130b5..f6d32ee 100644 > --- a/drivers/md/dm-table.c > +++ b/drivers/md/dm-table.c > @@ -451,15 +451,15 @@ int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode, > return r; > } > > - refcount_set(&dd->count, 1); > + refcount_set(&dd->count, 0); > list_add(&dd->list, &t->devices); > > } else if (dd->dm_dev->mode != (mode | dd->dm_dev->mode)) { > r = upgrade_mode(dd, mode, t->md); > if (r) > return r; > - refcount_inc(&dd->count); > } > + refcount_inc(&dd->count); > > Problem will be here if you hit this refcount_inc() after the refcount_set(&dd->count, 0) earlier. > refcount_inc() does not increment on zero value *ever* for security reasons and instead people > should initialize refcounters to 1 always and do increments from there if needed. include/linux/refcount.h:refcount_inc() definitely doesn't avoid incrementing zero value. Neither does lib/refcount.c:refcount_inc() but it does spew a WARN_ON by assuming a zero value means use-after-free. > This was the reason for the initial change I did, my mistake was just to forget to increment it also > in case condition (dd->dm_dev->mode != (mode | dd->dm_dev->mode)) fails. > > I have issues with my intel smpt server for sending patches (I will get it fixed tomorrow from internal network), > so I am attaching the patch I did end of last week to this thread instead (or alternatively can properly send it tomorrow after fix). > Sorry for the delay! I was tempted to revert your original commits that switch DM code to using refcount_t. Already proved more trouble than it is worth. But I'll drop my commit and take your fix. Mike From 1585304567137969812@xxx Tue Nov 28 10:17:29 +0000 2017 X-GM-THRID: 1581761449867113637 X-Gmail-Labels: Inbox,Category Forums,HistoricalUnread