On Mon 26-12-22 11:06:05, Yu Kuai wrote: > From: Yu Kuai <yukuai3@xxxxxxxxxx> > > Commit 64dc8c732f5c ("block, bfq: fix possible uaf for 'bfqq->bic'") > will access 'bic->bfqq' in bic_set_bfqq(), however, bfq_exit_icq_bfqq() > can free bfqq first, and then call bic_set_bfqq(), which will cause uaf. > > Fix the problem by moving bfq_exit_bfqq() behind bic_set_bfqq(). > > Fixes: 64dc8c732f5c ("block, bfq: fix possible uaf for 'bfqq->bic'") > Reported-by: Yi Zhang <yi.zhang@xxxxxxxxxx> > Signed-off-by: Yu Kuai <yukuai3@xxxxxxxxxx> Thanks for the patch! Feel free to add: Reviewed-by: Jan Kara <jack@xxxxxxx> Honza > --- > block/bfq-iosched.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/block/bfq-iosched.c b/block/bfq-iosched.c > index 16f43bbc575a..ccf2204477a5 100644 > --- a/block/bfq-iosched.c > +++ b/block/bfq-iosched.c > @@ -5317,8 +5317,8 @@ static void bfq_exit_icq_bfqq(struct bfq_io_cq *bic, bool is_sync) > unsigned long flags; > > spin_lock_irqsave(&bfqd->lock, flags); > - bfq_exit_bfqq(bfqd, bfqq); > bic_set_bfqq(bic, NULL, is_sync); > + bfq_exit_bfqq(bfqd, bfqq); > spin_unlock_irqrestore(&bfqd->lock, flags); > } > } > -- > 2.31.1 > -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR