lkml.org 
[lkml]   [2008]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/2] firewire: insist on successive self ID complete events
    The whole topology code only works if the old and new topologies which
    are compared come from immediately successive self ID complete events.

    If there happened bus resets without self ID complete events in the
    meantime, or self ID complete events with invalid selfIDs, the topology
    comparison could identify nodes wrongly, or more likely just corrupt
    kernel memory or panic right away.

    We new discard all nodes of the old topology and treat all current nodes
    as new ones if the current self ID generation is not the previous one
    plus 1. This should fix another aspect of
    http://bugzilla.kernel.org/show_bug.cgi?id=10128

    Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
    ---
    drivers/firewire/fw-topology.c | 11 +++++++++++
    1 file changed, 11 insertions(+)

    Index: linux/drivers/firewire/fw-topology.c
    ===================================================================
    --- linux.orig/drivers/firewire/fw-topology.c
    +++ linux/drivers/firewire/fw-topology.c
    @@ -518,6 +518,17 @@ fw_core_handle_bus_reset(struct fw_card
    return;
    }

    + /*
    + * If the selfID buffer is not the immediate successor of the
    + * previously processed one, we cannot reliably compare the
    + * old and new topologies.
    + */
    + if ((generation & 0xff) != ((card->generation + 1) & 0xff)) {
    + fw_notify("skipped bus generations, destroying all nodes\n");
    + fw_destroy_nodes(card);
    + card->bm_retries = 0;
    + }
    +
    spin_lock_irqsave(&card->lock, flags);

    /*
    --
    Stefan Richter
    -=====-==--- --== =--==
    http://arcgraph.de/sr/


    \
     
     \ /
      Last update: 2008-03-19 22:15    [W:0.024 / U:0.284 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site