lkml.org 
[lkml]   [2010]   [Jul]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[090/200] x86/amd-iommu: Fix crash when request_mem_region fails
    2.6.34-stable review patch.  If anyone has any objections, please let me know.

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

    From: Joerg Roedel <joerg.roedel@amd.com>

    commit e82752d8b5a7e0a5e4d607fd8713549e2a4e2741 upstream.

    When request_mem_region fails the error path tries to
    disable the IOMMUs. This accesses the mmio-region which was
    not allocated leading to a kernel crash. This patch fixes
    the issue.

    Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    arch/x86/kernel/amd_iommu_init.c | 11 ++++++++---
    1 file changed, 8 insertions(+), 3 deletions(-)

    --- a/arch/x86/kernel/amd_iommu_init.c
    +++ b/arch/x86/kernel/amd_iommu_init.c
    @@ -286,8 +286,12 @@ static u8 * __init iommu_map_mmio_space(
    {
    u8 *ret;

    - if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu"))
    + if (!request_mem_region(address, MMIO_REGION_LENGTH, "amd_iommu")) {
    + pr_err("AMD-Vi: Can not reserve memory region %llx for mmio\n",
    + address);
    + pr_err("AMD-Vi: This is a BIOS bug. Please contact your hardware vendor\n");
    return NULL;
    + }

    ret = ioremap_nocache(address, MMIO_REGION_LENGTH);
    if (ret != NULL)
    @@ -1313,7 +1317,7 @@ static int __init amd_iommu_init(void)
    ret = amd_iommu_init_dma_ops();

    if (ret)
    - goto free;
    + goto free_disable;

    amd_iommu_init_api();

    @@ -1331,9 +1335,10 @@ static int __init amd_iommu_init(void)
    out:
    return ret;

    -free:
    +free_disable:
    disable_iommus();

    +free:
    amd_iommu_uninit_devices();

    free_pages((unsigned long)amd_iommu_pd_alloc_bitmap,



    \
     
     \ /
      Last update: 2010-07-01 23:19    [W:4.052 / U:0.616 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site