block/bfq-iosched.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
From: Yu Kuai <yukuai3@huawei.com>
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@redhat.com>
Signed-off-by: Yu Kuai <yukuai3@huawei.com>
---
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
On Mon 26-12-22 11:06:05, Yu Kuai wrote: > From: Yu Kuai <yukuai3@huawei.com> > > 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@redhat.com> > Signed-off-by: Yu Kuai <yukuai3@huawei.com> Thanks for the patch! Feel free to add: Reviewed-by: Jan Kara <jack@suse.cz> 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@suse.com> SUSE Labs, CR
On Mon, 26 Dec 2022 11:06:05 +0800, Yu Kuai wrote: > 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(). > > > [...] Applied, thanks! [1/1] block, bfq: fix uaf for bfqq in bfq_exit_icq_bfqq commit: 246cf66e300b76099b5dbd3fdd39e9a5dbc53f02 Best regards, -- Jens Axboe
© 2016 - 2025 Red Hat, Inc.