| From stefanr@s5r6.in-berlin.de Tue Nov 4 13:57:03 2008 |
| From: Jay Fenlason <fenlason@redhat.com> |
| Date: Mon, 27 Oct 2008 23:28:14 +0100 (CET) |
| Subject: firewire: fix struct fw_node memory leak |
| To: stable@kernel.org |
| Cc: linux1394-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org |
| Message-ID: <tkrat.e499a05eaa0ec529@s5r6.in-berlin.de> |
| Content-Disposition: INLINE |
| |
| From: Jay Fenlason <fenlason@redhat.com> |
| |
| commit 77e557191701afa55ae7320d42ad6458a2ad292e upstream |
| |
| With the bus_resets patch applied, it is easy to see this memory leak |
| by repeatedly resetting the firewire bus while running slabtop in |
| another window. Just watch kmalloc-32 grow and grow... |
| |
| Signed-off-by: Jay Fenlason <fenlason@redhat.com> |
| Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> |
| |
| --- |
| drivers/firewire/fw-topology.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/firewire/fw-topology.c |
| +++ b/drivers/firewire/fw-topology.c |
| @@ -413,7 +413,7 @@ static void |
| update_tree(struct fw_card *card, struct fw_node *root) |
| { |
| struct list_head list0, list1; |
| - struct fw_node *node0, *node1; |
| + struct fw_node *node0, *node1, *next1; |
| int i, event; |
| |
| INIT_LIST_HEAD(&list0); |
| @@ -485,7 +485,9 @@ update_tree(struct fw_card *card, struct |
| } |
| |
| node0 = fw_node(node0->link.next); |
| - node1 = fw_node(node1->link.next); |
| + next1 = fw_node(node1->link.next); |
| + fw_node_put(node1); |
| + node1 = next1; |
| } |
| } |
| |