summaryrefslogtreecommitdiffstats
path: root/drivers/firewire/fw-topology.c
diff options
context:
space:
mode:
authorStefan Richter <stefanr@s5r6.in-berlin.de>2008-02-24 18:57:23 +0100
committerStefan Richter <stefanr@s5r6.in-berlin.de>2008-03-02 12:35:46 +0100
commit15803478fdea964e5f76079851fcd13068208d5d (patch)
tree153bc372845c2223ec798ff4c0f3896221fe4e97 /drivers/firewire/fw-topology.c
parentfirewire: fw-sbp2: better fix for NULL pointer dereference in scsi_remove_device (diff)
downloadlinux-15803478fdea964e5f76079851fcd13068208d5d.tar.xz
linux-15803478fdea964e5f76079851fcd13068208d5d.zip
firewire: potentially invalid pointers used in fw_card_bm_work
The bus management workqueue job was in danger to dereference NULL pointers. Also, after having temporarily lifted card->lock, a few node pointers and a device pointer may have become invalid. Add NULL pointer checks and get the necessary references. Also, move card->local_node out of fw_card_bm_work's sight during shutdown of the card. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: Jarod Wilson <jwilson@redhat.com>
Diffstat (limited to 'drivers/firewire/fw-topology.c')
-rw-r--r--drivers/firewire/fw-topology.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/firewire/fw-topology.c b/drivers/firewire/fw-topology.c
index 172c1867e9aa..e47bb040197a 100644
--- a/drivers/firewire/fw-topology.c
+++ b/drivers/firewire/fw-topology.c
@@ -383,6 +383,7 @@ void fw_destroy_nodes(struct fw_card *card)
card->color++;
if (card->local_node != NULL)
for_each_fw_node(card, card->local_node, report_lost_node);
+ card->local_node = NULL;
spin_unlock_irqrestore(&card->lock, flags);
}