diff options
author | Jesper Juhl <jesper.juhl@gmail.com> | 2008-03-21 19:07:13 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-04-21 00:47:08 -0400 |
commit | 029c3c133ba2c3e0e48fdfacc08324bb3fa2a571 (patch) | |
tree | 704a03f0695be7df8d6437ec5a739d2943455875 /drivers/pci | |
parent | 884525655d07fdee9245716b998ecdc45cdd8007 (diff) |
PCI: Hotplug: Fix leaks in IBM Hot Plug Controller Driver - ibmphp_init_devno()
In drivers/pci/hotplug/ibmphp_core.c::ibmphp_init_devno() we allocate
space dynamically for a PCI irq routing table by calling
pcibios_get_irq_routing_table(), but we never free the allocated space.
This patch frees the allocated space at the function exit points.
Spotted by the Coverity checker. Compile tested only.
Please consider applying.
Signed-off-by: Jesper Juhl <jesper.juhl@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/pci')
-rw-r--r-- | drivers/pci/hotplug/ibmphp_core.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c index 87b6b8b280e6..81d009229188 100644 --- a/drivers/pci/hotplug/ibmphp_core.c +++ b/drivers/pci/hotplug/ibmphp_core.c | |||
@@ -148,8 +148,10 @@ int ibmphp_init_devno(struct slot **cur_slot) | |||
148 | len = (rtable->size - sizeof(struct irq_routing_table)) / | 148 | len = (rtable->size - sizeof(struct irq_routing_table)) / |
149 | sizeof(struct irq_info); | 149 | sizeof(struct irq_info); |
150 | 150 | ||
151 | if (!len) | 151 | if (!len) { |
152 | kfree(rtable); | ||
152 | return -1; | 153 | return -1; |
154 | } | ||
153 | for (loop = 0; loop < len; loop++) { | 155 | for (loop = 0; loop < len; loop++) { |
154 | if ((*cur_slot)->number == rtable->slots[loop].slot) { | 156 | if ((*cur_slot)->number == rtable->slots[loop].slot) { |
155 | if ((*cur_slot)->bus == rtable->slots[loop].bus) { | 157 | if ((*cur_slot)->bus == rtable->slots[loop].bus) { |
@@ -187,11 +189,13 @@ int ibmphp_init_devno(struct slot **cur_slot) | |||
187 | debug("rtable->slots[loop].irq[3].link = %x\n", | 189 | debug("rtable->slots[loop].irq[3].link = %x\n", |
188 | rtable->slots[loop].irq[3].link); | 190 | rtable->slots[loop].irq[3].link); |
189 | debug("end of init_devno\n"); | 191 | debug("end of init_devno\n"); |
192 | kfree(rtable); | ||
190 | return 0; | 193 | return 0; |
191 | } | 194 | } |
192 | } | 195 | } |
193 | } | 196 | } |
194 | 197 | ||
198 | kfree(rtable); | ||
195 | return -1; | 199 | return -1; |
196 | } | 200 | } |
197 | 201 | ||