Re: [PATCH V4 0/4] blk-mq: fix request UAF related with iterating over tagset requests

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, May 05, 2021 at 12:19:21PM +0100, John Garry wrote:
> On 04/05/2021 12:43, Ming Lei wrote:
> > >           */
> > > -       if (rq && rq->q == hctx->queue && rq->mq_hctx == hctx)
> > > -               return iter_data->fn(hctx, rq, iter_data->data, reserved);
> > > +       if (rq) {
> > > +               mdelay(50);
> > > +               if (rq->q == hctx->queue && rq->mq_hctx == hctx)
> > > +   		  return iter_data->fn(hctx, rq, iter_data->data, reserved);
> > > +       }
> > >          return true;
> > >   }
> > hammmm, forget to cover bt_iter(), please test the following delta
> > patch:
> > 
> > 
> > diff --git a/block/blk-mq-tag.c b/block/blk-mq-tag.c
> > index a3be267212b9..27815114ee3f 100644
> > --- a/block/blk-mq-tag.c
> > +++ b/block/blk-mq-tag.c
> > @@ -206,18 +206,28 @@ static bool bt_iter(struct sbitmap *bitmap, unsigned int bitnr, void *data)
> >   	struct blk_mq_tags *tags = hctx->tags;
> >   	bool reserved = iter_data->reserved;
> >   	struct request *rq;
> > +	unsigned long flags;
> > +	bool ret = true;
> >   	if (!reserved)
> >   		bitnr += tags->nr_reserved_tags;
> > -	rq = tags->rqs[bitnr];
> > +	spin_lock_irqsave(&tags->lock, flags);
> > +	rq = tags->rqs[bitnr];
> >   	/*
> >   	 * We can hit rq == NULL here, because the tagging functions
> >   	 * test and set the bit before assigning ->rqs[].
> >   	 */
> > -	if (rq && rq->q == hctx->queue && rq->mq_hctx == hctx)
> > -		return iter_data->fn(hctx, rq, iter_data->data, reserved);
> > -	return true;
> > +	if (!rq || !refcount_inc_not_zero(&rq->ref)) {
> > +		spin_unlock_irqrestore(&tags->lock, flags);
> > +		return true;
> > +	}
> > +	spin_unlock_irqrestore(&tags->lock, flags);
> > +
> > +	if (rq->q == hctx->queue && rq->mq_hctx == hctx)
> > +		ret = iter_data->fn(hctx, rq, iter_data->data, reserved);
> > +	blk_mq_put_rq_ref(rq);
> > +	return ret;
> >   }
> 
> 
> This looks to work ok from my testing.

OK, thanks for your test, and will add your tested-by in V4.

Thanks,
Ming




[Index of Archives]     [Linux RAID]     [Linux SCSI]     [Linux ATA RAID]     [IDE]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Device Mapper]

  Powered by Linux