lkml.org 
[lkml]   [2009]   [Dec]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[66/90] sparc64: Fix overly strict range type matching for PCI devices.
    2.6.31-stable review patch.  If anyone has any objections, please let us know.

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


    From: David S. Miller <davem@davemloft.net>

    [ Upstream commit 4230fa3b89ea1c413766bd411a8315a3d05aa6c7 ]

    When we are trying to see if a range property entry applies
    to a given address, we are overly strict about the type.

    We should only allow I/O ranges for I/O addresses, and only allow
    CONFIG space ranges for CONFIG space address.

    However for MEM ranges, they come in 32-bit and 64-bit flavors.
    And a lack of an exact match is OK if the range is 32-bit and
    the address is 64-bit. We can assign a 64-bit address properly
    into a 32-bit parent range just fine.

    So allow it.

    Reported-by: Patrick Finnegan <pat@computer-refuge.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    arch/sparc/kernel/of_device_64.c | 14 ++++++++++++--
    1 file changed, 12 insertions(+), 2 deletions(-)

    --- a/arch/sparc/kernel/of_device_64.c
    +++ b/arch/sparc/kernel/of_device_64.c
    @@ -104,9 +104,19 @@ static int of_bus_pci_map(u32 *addr, con
    int i;

    /* Check address type match */
    - if ((addr[0] ^ range[0]) & 0x03000000)
    - return -EINVAL;
    + if (!((addr[0] ^ range[0]) & 0x03000000))
    + goto type_match;
    +
    + /* Special exception, we can map a 64-bit address into
    + * a 32-bit range.
    + */
    + if ((addr[0] & 0x03000000) == 0x03000000 &&
    + (range[0] & 0x03000000) == 0x02000000)
    + goto type_match;
    +
    + return -EINVAL;

    +type_match:
    if (of_out_of_range(addr + 1, range + 1, range + na + pna,
    na - 1, ns))
    return -EINVAL;



    \
     
     \ /
      Last update: 2009-12-17 02:33    [W:0.021 / U:29.908 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site