All of lore.kernel.org
 help / color / mirror / Atom feed
From: Shaohua Li <shli@kernel.org>
To: "Reshetova, Elena" <elena.reshetova@intel.com>
Cc: "gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"linux-raid@vger.kernel.org" <linux-raid@vger.kernel.org>,
	Hans Liljestrand <ishkamiel@gmail.com>,
	Kees Cook <keescook@chromium.org>,
	David Windsor <dwindsor@gmail.com>
Subject: Re: [PATCH 10/29] drivers, md: convert stripe_head.count from atomic_t to refcount_t
Date: Thu, 9 Mar 2017 09:18:29 -0800	[thread overview]
Message-ID: <20170309171829.33z7z6czwdivztp4@kernel.org> (raw)
In-Reply-To: <2236FBA76BA1254E88B949DDB74E612B41C56050@IRSMSX102.ger.corp.intel.com>

On Wed, Mar 08, 2017 at 09:39:30AM +0000, Reshetova, Elena wrote:
> > On Mon, Mar 06, 2017 at 04:20:57PM +0200, Elena Reshetova wrote:
> > > refcount_t type and corresponding API should be
> > > used instead of atomic_t when the variable is used as
> > > a reference counter. This allows to avoid accidental
> > > refcounter overflows that might lead to use-after-free
> > > situations.
> > >
> > > Signed-off-by: Elena Reshetova <elena.reshetova@intel.com>
> > > Signed-off-by: Hans Liljestrand <ishkamiel@gmail.com>
> > > Signed-off-by: Kees Cook <keescook@chromium.org>
> > > Signed-off-by: David Windsor <dwindsor@gmail.com>
> > > ---
> > >  drivers/md/raid5-cache.c |  8 +++---
> > >  drivers/md/raid5.c       | 66 ++++++++++++++++++++++++------------------------
> > >  drivers/md/raid5.h       |  3 ++-
> > >  3 files changed, 39 insertions(+), 38 deletions(-)
> > >
> > > diff --git a/drivers/md/raid5-cache.c b/drivers/md/raid5-cache.c
> > > index 3f307be..6c05e12 100644
> > > --- a/drivers/md/raid5-cache.c
> > > +++ b/drivers/md/raid5-cache.c
> > 
> > snip
> > >  	       sh->check_state, sh->reconstruct_state);
> > >
> > >  	analyse_stripe(sh, &s);
> > > @@ -4924,7 +4924,7 @@ static void activate_bit_delay(struct r5conf *conf,
> > >  		struct stripe_head *sh = list_entry(head.next, struct
> > stripe_head, lru);
> > >  		int hash;
> > >  		list_del_init(&sh->lru);
> > > -		atomic_inc(&sh->count);
> > > +		refcount_inc(&sh->count);
> > >  		hash = sh->hash_lock_index;
> > >  		__release_stripe(conf, sh,
> > &temp_inactive_list[hash]);
> > >  	}
> > > @@ -5240,7 +5240,7 @@ static struct stripe_head *__get_priority_stripe(struct
> > r5conf *conf, int group)
> > >  		sh->group = NULL;
> > >  	}
> > >  	list_del_init(&sh->lru);
> > > -	BUG_ON(atomic_inc_return(&sh->count) != 1);
> > > +	BUG_ON(refcount_inc_not_zero(&sh->count));
> > 
> > This changes the behavior. refcount_inc_not_zero doesn't inc if original value is 0
> 
> Hm.. So, you want to inc here in any case and BUG if the end result differs from 1. 
> So essentially you want to only increment here from zero to one under normal conditions... This is a challenge for refcount_t and against the design.
> Is it ok just to maybe do this here:
> 
> -	BUG_ON(atomic_inc_return(&sh->count) != 1);
> +	BUG_ON(refcount_read(&sh->count) != 0);
> +	refcount_set((&sh->count, 1);

this looks ok


> Do we have an issue with locking in this case? Or maybe it is then better to leave this one to be atomic_t without protection since it isn't a real refcounter as it turns out. 

There is no lock issue, the count should be 0 in the list. It's a refcounter actually, so good to do the convert.

Thanks,
Shaohua

  reply	other threads:[~2017-03-09 17:18 UTC|newest]

Thread overview: 219+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-06 14:20 [PATCH 00/29] drivers, mics refcount conversions Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 01/29] drivers, block: convert xen_blkif.refcnt from atomic_t to refcount_t Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 02/29] drivers, firewire: convert fw_node.ref_count " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 03/29] drivers, char: convert vma_data.refcnt " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 04/29] drivers, connector: convert cn_callback_entry.refcnt " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 05/29] drivers, md, bcache: convert cached_dev.count " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 06/29] drivers, md: convert dm_cache_metadata.ref_count " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 07/29] drivers, md: convert dm_dev_internal.count " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 08/29] drivers, md: convert mddev.active " Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-07 19:04   ` Shaohua Li
2017-03-07 19:04   ` Shaohua Li
2017-03-07 19:04     ` Shaohua Li
2017-03-08  9:42     ` Reshetova, Elena
     [not found]     ` <20170307190449.baceyzzngsz776x7-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-03-08  9:42       ` Reshetova, Elena
2017-03-08  9:42         ` Reshetova, Elena
2017-03-08  9:42         ` Reshetova, Elena
2017-03-08 10:19         ` gregkh
2017-03-08 10:19         ` gregkh
2017-03-08 10:19           ` gregkh
2017-03-08 10:19           ` gregkh
2017-03-08 10:19           ` gregkh
2017-03-09 17:11           ` Shaohua Li
2017-03-14 12:11   ` Michael Ellerman
2017-03-14 12:11   ` Michael Ellerman
2017-03-14 12:11     ` Michael Ellerman
2017-03-14 12:29     ` Reshetova, Elena
2017-03-14 12:29     ` Reshetova, Elena
2017-03-14 12:29       ` Reshetova, Elena
2017-03-14 12:29       ` Reshetova, Elena
2017-03-14 12:29       ` Reshetova, Elena
2017-03-14 12:29       ` Reshetova, Elena
2017-03-14 14:58       ` James Bottomley
2017-03-14 14:58         ` James Bottomley
2017-03-14 14:58         ` James Bottomley
2017-03-14 14:58         ` James Bottomley
2017-03-14 14:58         ` James Bottomley
2017-03-16 18:00         ` Reshetova, Elena
     [not found]         ` <1489503539.3214.17.camel-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk@public.gmane.org>
2017-03-16 18:00           ` Reshetova, Elena
2017-03-16 18:00             ` Reshetova, Elena
2017-03-16 18:00             ` Reshetova, Elena
2017-03-16 18:00             ` Reshetova, Elena
2017-03-14 14:58       ` James Bottomley
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 09/29] drivers, md: convert table_device.count " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 10/29] drivers, md: convert stripe_head.count " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-07 19:07   ` Shaohua Li
2017-03-07 19:07   ` Shaohua Li
2017-03-07 19:07     ` Shaohua Li
2017-03-08  9:39     ` Reshetova, Elena
     [not found]     ` <20170307190759.jnrq66kfpkr4m7zl-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-03-08  9:39       ` Reshetova, Elena
2017-03-08  9:39         ` Reshetova, Elena
2017-03-08  9:39         ` Reshetova, Elena
2017-03-09 17:18         ` Shaohua Li [this message]
2017-03-13  9:49           ` Reshetova, Elena
2017-03-06 14:20 ` [PATCH 11/29] drivers, media: convert cx88_core.refcount " Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-06 16:26   ` Sergei Shtylyov
2017-03-06 16:26     ` Sergei Shtylyov
2017-03-07  7:52     ` Reshetova, Elena
2017-03-07  7:52     ` Reshetova, Elena
2017-03-07  7:52       ` Reshetova, Elena
2017-03-07  7:52       ` Reshetova, Elena
2017-03-07  7:52       ` Reshetova, Elena
2017-03-07  7:52       ` Reshetova, Elena
2017-03-07 10:40       ` Sergei Shtylyov
2017-03-07 10:40       ` Sergei Shtylyov
2017-03-07 10:40         ` Sergei Shtylyov
2017-03-07 10:40         ` Sergei Shtylyov
2017-03-07 10:40         ` Sergei Shtylyov
2017-03-06 16:26   ` Sergei Shtylyov
2017-03-07  8:22   ` Sakari Ailus
2017-03-07  8:22     ` Sakari Ailus
2017-03-07  8:22   ` Sakari Ailus
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20 ` [PATCH 12/29] drivers, media: convert s2255_dev.num_channels " Elena Reshetova
2017-03-06 14:20 ` Elena Reshetova
2017-03-06 14:20   ` Elena Reshetova
2017-03-07  8:30   ` Sakari Ailus
2017-03-07  8:30   ` Sakari Ailus
2017-03-07  8:30     ` Sakari Ailus
2017-03-07 14:45     ` Reshetova, Elena
     [not found]     ` <20170307083016.GG3220-S+BSfZ9RZZmRSg0ZkenSGLdO1Tsj/99ntUK59QYPAWc@public.gmane.org>
2017-03-07 14:45       ` Reshetova, Elena
2017-03-07 14:45         ` Reshetova, Elena
2017-03-07 14:45         ` Reshetova, Elena
2017-03-06 14:21 ` [PATCH 13/29] drivers, media: convert vb2_vmarea_handler.refcount " Elena Reshetova
2017-03-06 14:21 ` Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-07  8:50   ` Sakari Ailus
2017-03-07  8:50   ` Sakari Ailus
2017-03-07  8:50     ` Sakari Ailus
2017-03-07 14:48     ` Reshetova, Elena
2017-03-07 14:48       ` Reshetova, Elena
2017-03-07 14:48       ` Reshetova, Elena
2017-03-07 14:48       ` Reshetova, Elena
2017-03-07 14:48     ` Reshetova, Elena
2017-03-06 14:21 ` [PATCH 14/29] drivers, media: convert vb2_dc_buf.refcount " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 15/29] drivers, media: convert vb2_dma_sg_buf.refcount " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 16/29] drivers, media: convert vb2_vmalloc_buf.refcount " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 17/29] drivers, pci: convert hv_pci_dev.refs " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 21:38   ` Bjorn Helgaas
2017-03-07 19:58     ` Stephen Hemminger
2017-04-18 10:40       ` Reshetova, Elena
2017-04-18 10:40         ` Reshetova, Elena
2017-04-18 14:05         ` Bjorn Helgaas
2017-04-18 14:29           ` Reshetova, Elena
2017-04-18 14:29             ` Reshetova, Elena
2017-03-06 14:21 ` [PATCH 18/29] drivers, s390: convert urdev.ref_count " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 19/29] drivers, s390: convert lcs_reply.refcnt " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 20/29] drivers, s390: convert qeth_reply.refcnt " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 21/29] drivers, s390: convert fc_fcp_pkt.ref_cnt " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 15:27   ` Johannes Thumshirn
2017-03-06 15:27   ` Johannes Thumshirn
2017-03-06 16:54     ` Benjamin Block
2017-03-06 16:54     ` Benjamin Block
2017-03-06 16:54       ` Benjamin Block
2017-03-07  7:50     ` Reshetova, Elena
     [not found]     ` <536a58ba-8896-5639-cab9-bd2f13bed325-l3A5Bk7waGM@public.gmane.org>
2017-03-07  7:50       ` Reshetova, Elena
2017-03-07  7:50         ` Reshetova, Elena
2017-03-07  7:50         ` Reshetova, Elena
2017-03-08 13:48     ` Reshetova, Elena
2017-03-08 13:48       ` Reshetova, Elena
2017-03-08 13:48       ` Reshetova, Elena
2017-03-08 13:48       ` Reshetova, Elena
     [not found]       ` <2236FBA76BA1254E88B949DDB74E612B41C5615F-kPTMFJFq+rFP9JyJpTNKArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2017-03-08 14:06         ` Johannes Thumshirn
2017-03-08 14:06           ` Johannes Thumshirn
2017-03-08 14:06           ` Johannes Thumshirn
2017-03-08 14:06       ` Johannes Thumshirn
2017-03-08 13:48     ` Reshetova, Elena
2017-03-06 14:21 ` [PATCH 22/29] drivers, scsi: convert iscsi_task.refcount " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
     [not found]   ` <1488810076-3754-23-git-send-email-elena.reshetova-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-03-08 18:47     ` Chris Leech
2017-03-08 18:47       ` Chris Leech
     [not found]       ` <20170308184740.4gueok5csdkt7u62-r8IHplWLGbA5tHQWs+pTeqPFFGjUI2lm2LY78lusg7I@public.gmane.org>
2017-03-09  7:18         ` Reshetova, Elena
2017-03-09  7:18           ` Reshetova, Elena
2017-03-09  7:18           ` Reshetova, Elena
2017-03-09  8:43           ` Johannes Thumshirn
     [not found]           ` <2236FBA76BA1254E88B949DDB74E612B41C569DC-kPTMFJFq+rFP9JyJpTNKArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2017-03-09  8:43             ` Johannes Thumshirn
2017-03-09  8:43               ` Johannes Thumshirn
2017-03-09  8:43               ` Johannes Thumshirn
2017-03-09  9:26               ` Reshetova, Elena
2017-03-09  9:26                 ` Reshetova, Elena
2017-03-09  9:26                 ` Reshetova, Elena
2017-03-09  9:26                 ` Reshetova, Elena
     [not found]                 ` <2236FBA76BA1254E88B949DDB74E612B41C56ABF-kPTMFJFq+rFP9JyJpTNKArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2017-03-09  9:32                   ` Johannes Thumshirn
2017-03-09  9:32                     ` Johannes Thumshirn
2017-03-09  9:32                     ` Johannes Thumshirn
2017-03-09  9:32                 ` Johannes Thumshirn
2017-03-09  9:26               ` Reshetova, Elena
2017-03-09  7:18       ` Reshetova, Elena
2017-03-08 18:47   ` Chris Leech
2017-03-06 14:21 ` [PATCH 23/29] drivers: convert vme_user_vma_priv.refcnt " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 24/29] drivers: convert iblock_req.pending " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-08  7:37   ` Nicholas A. Bellinger
     [not found]   ` <1488810076-3754-25-git-send-email-elena.reshetova-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-03-08  7:37     ` Nicholas A. Bellinger
2017-03-08  7:37       ` Nicholas A. Bellinger
2017-03-08  7:37       ` Nicholas A. Bellinger
2017-03-21  7:18     ` Nicholas A. Bellinger
2017-03-21  7:18       ` Nicholas A. Bellinger
2017-03-21  7:18       ` Nicholas A. Bellinger
2017-03-21  7:18   ` Nicholas A. Bellinger
2017-03-06 14:21 ` [PATCH 25/29] drivers, usb: convert ffs_data.ref " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 26/29] drivers, usb: convert dev_data.count " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 27/29] drivers, usb: convert ep_data.count " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 28/29] drivers: convert sbd_duart.map_guard " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 14:21 ` [PATCH 29/29] drivers, xen: convert grant_map.users " Elena Reshetova
2017-03-06 14:21   ` Elena Reshetova
2017-03-06 16:58   ` Boris Ostrovsky
2017-03-06 16:58   ` [Xen-devel] " Boris Ostrovsky
2017-03-06 16:58     ` Boris Ostrovsky
2017-03-08 13:49     ` Reshetova, Elena
     [not found]     ` <99270126-7751-eed0-5efa-fc695ff3be25-QHcLZuEGTsvQT0dZR+AlfA@public.gmane.org>
2017-03-08 13:49       ` [Xen-devel] " Reshetova, Elena
2017-03-08 13:49         ` Reshetova, Elena
2017-03-08 13:49         ` Reshetova, Elena
2017-03-08 13:49         ` Reshetova, Elena
2017-03-08 13:49         ` Reshetova, Elena
     [not found]         ` <2236FBA76BA1254E88B949DDB74E612B41C56177-kPTMFJFq+rFP9JyJpTNKArfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2017-03-08 17:45           ` Boris Ostrovsky
2017-03-08 17:45             ` Boris Ostrovsky
2017-03-08 17:45             ` Boris Ostrovsky
2017-03-09  7:19             ` Reshetova, Elena
2017-03-09  7:19             ` [Xen-devel] " Reshetova, Elena
2017-03-09  7:19               ` Reshetova, Elena
2017-03-09  7:19               ` Reshetova, Elena
2017-03-09  7:19               ` Reshetova, Elena
2017-03-08 17:45         ` Boris Ostrovsky

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=20170309171829.33z7z6czwdivztp4@kernel.org \
    --to=shli@kernel.org \
    --cc=dwindsor@gmail.com \
    --cc=elena.reshetova@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=ishkamiel@gmail.com \
    --cc=keescook@chromium.org \
    --cc=linux-raid@vger.kernel.org \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.