• Clemens Ladisch's avatar
    firewire: ohci: fix race in AR split packet handling · a1f805e5
    Clemens Ladisch authored
    When handling an AR buffer that has been completely filled, we assumed
    that its descriptor will not be read by the controller and can be
    overwritten.  However, when the last received packet happens to end at
    the end of the buffer, the controller might not yet have moved on to the
    next buffer and might read the branch address later.  If we overwrite
    and free the page before that, the DMA context will either go dead
    because of an invalid Z value, or go off into some random memory.
    
    To fix this, ensure that the descriptor does not get overwritten by
    using only the actual buffer instead of the entire page for reassembling
    the split packet.  Furthermore, to avoid freeing the page too early,
    move on to the next buffer only when some data in it guarantees that the
    controller has moved on.
    
    This should eliminate the remaining firewire-net problems.
    Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
    Cc: 2.6.22-2.6.36 <stable@kernel.org>
    Tested-by: default avatarMaxim Levitsky <maximlevitsky@gmail.com>
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    a1f805e5
ohci.c 85.8 KB