lkml.org 
[lkml]   [2022]   [Jun]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.18 730/879] bfq: Update cgroup information before merging bio
    Date
    From: Jan Kara <jack@suse.cz>

    commit ea591cd4eb270393810e7be01feb8fde6a34fbbe upstream.

    When the process is migrated to a different cgroup (or in case of
    writeback just starts submitting bios associated with a different
    cgroup) bfq_merge_bio() can operate with stale cgroup information in
    bic. Thus the bio can be merged to a request from a different cgroup or
    it can result in merging of bfqqs for different cgroups or bfqqs of
    already dead cgroups and causing possible use-after-free issues. Fix the
    problem by updating cgroup information in bfq_merge_bio().

    CC: stable@vger.kernel.org
    Fixes: e21b7a0b9887 ("block, bfq: add full hierarchical scheduling and cgroups support")
    Tested-by: "yukuai (C)" <yukuai3@huawei.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Link: https://lore.kernel.org/r/20220401102752.8599-4-jack@suse.cz
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    block/bfq-iosched.c | 11 +++++++++--
    1 file changed, 9 insertions(+), 2 deletions(-)

    --- a/block/bfq-iosched.c
    +++ b/block/bfq-iosched.c
    @@ -2461,10 +2461,17 @@ static bool bfq_bio_merge(struct request

    spin_lock_irq(&bfqd->lock);

    - if (bic)
    + if (bic) {
    + /*
    + * Make sure cgroup info is uptodate for current process before
    + * considering the merge.
    + */
    + bfq_bic_update_cgroup(bic, bio);
    +
    bfqd->bio_bfqq = bic_to_bfqq(bic, op_is_sync(bio->bi_opf));
    - else
    + } else {
    bfqd->bio_bfqq = NULL;
    + }
    bfqd->bio_bic = bic;

    ret = blk_mq_sched_try_merge(q, bio, nr_segs, &free);

    \
     
     \ /
      Last update: 2022-06-08 03:40    [W:3.725 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site