lkml.org 
[lkml]   [2013]   [Jul]   [3]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[030/141] drivers/block/brd.c: fix brd_lookup_page() race
    3.6.11.6 stable review patch.
    If anyone has any objections, please let me know.

    ------------------

    From: Brian Behlendorf <behlendorf1@llnl.gov>

    [ Upstream commit dfd20b2b174d3a9b258ea3b7a35ead33576587b1 ]

    The index on the page must be set before it is inserted in the radix
    tree. Otherwise there is a small race which can occur during lookup
    where the page can be found with the incorrect index. This will trigger
    the BUG_ON() in brd_lookup_page().

    Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
    Reported-by: Chris Wedgwood <cw@f00f.org>
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    ---
    drivers/block/brd.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/drivers/block/brd.c b/drivers/block/brd.c
    index 531ceb3..4e8213a 100644
    --- a/drivers/block/brd.c
    +++ b/drivers/block/brd.c
    @@ -117,13 +117,13 @@ static struct page *brd_insert_page(struct brd_device *brd, sector_t sector)

    spin_lock(&brd->brd_lock);
    idx = sector >> PAGE_SECTORS_SHIFT;
    + page->index = idx;
    if (radix_tree_insert(&brd->brd_pages, idx, page)) {
    __free_page(page);
    page = radix_tree_lookup(&brd->brd_pages, idx);
    BUG_ON(!page);
    BUG_ON(page->index != idx);
    - } else
    - page->index = idx;
    + }
    spin_unlock(&brd->brd_lock);

    radix_tree_preload_end();
    --
    1.7.10.4



    \
     
     \ /
      Last update: 2013-07-03 22:01    [W:3.375 / U:0.060 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site