lkml.org 
[lkml]   [2020]   [Sep]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    SubjectRe: [PATCH] nvme: fix use-after-free during booting
    From
    Date
    Hi Christoph,
    I modified the patch a bit and now it works.
    Best,
    - Tong

    ---
    block/genhd.c | 7 +++++--
    include/linux/genhd.h | 1 +
    2 files changed, 6 insertions(+), 2 deletions(-)

    diff --git a/block/genhd.c b/block/genhd.c
    index 99c64641c314..8c432e5f97ea 100644
    --- a/block/genhd.c
    +++ b/block/genhd.c
    @@ -835,7 +835,10 @@ static void __device_add_disk(struct device *parent, struct gendisk *disk,
    * Take an extra ref on queue which will be put on disk_release()
    * so that it sticks around as long as @disk is there.
    */
    - WARN_ON_ONCE(!blk_get_queue(disk->queue));
    + if (blk_get_queue(disk->queue))
    + disk->flags |= GENHD_FL_QUEUE_REF;
    + else
    + WARN_ON_ONCE(1);

    disk_add_events(disk);
    blk_integrity_add(disk);
    @@ -1567,7 +1570,7 @@ static void disk_release(struct device *dev)
    kfree(disk->random);
    disk_replace_part_tbl(disk, NULL);
    hd_free_part(&disk->part0);
    - if (disk->queue)
    + if (disk->flags & GENHD_FL_QUEUE_REF)
    blk_put_queue(disk->queue);
    kfree(disk);
    }
    diff --git a/include/linux/genhd.h b/include/linux/genhd.h
    index 4ab853461dff..9441077ee103 100644
    --- a/include/linux/genhd.h
    +++ b/include/linux/genhd.h
    @@ -135,6 +135,7 @@ struct hd_struct {
    #define GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE 0x0100
    #define GENHD_FL_NO_PART_SCAN 0x0200
    #define GENHD_FL_HIDDEN 0x0400
    +#define GENHD_FL_QUEUE_REF 0x0800

    enum {
    DISK_EVENT_MEDIA_CHANGE = 1 << 0, /* media changed */
    --
    2.25.1

    > On Sep 22, 2020, at 12:41 PM, Christoph Hellwig <hch@lst.de> wrote:
    >
    > On Tue, Sep 22, 2020 at 12:19:06PM -0400, Tong Zhang wrote:
    >> Thank you Christoph for providing the patch.
    >> However, the test shows that the issue still persists even with the new patch.
    >> The call trace is the same as in my first email.
    >
    > Weird. What baseline did you test? You need to use the patch on top of
    > the latest for-next or for-5.10/block tree from Jens for full effect.
    >
    > If that still feels can you send me a longer dmesg that also shows what
    > happens before the sniplet you sent?

    \
     
     \ /
      Last update: 2020-09-22 22:35    [W:5.599 / U:0.316 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site