aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesper Juhl <jesper.juhl@gmail.com>2008-03-21 19:07:13 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2008-04-21 00:47:08 -0400
commit029c3c133ba2c3e0e48fdfacc08324bb3fa2a571 (patch)
tree704a03f0695be7df8d6437ec5a739d2943455875
parent884525655d07fdee9245716b998ecdc45cdd8007 (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>
-rw-r--r--drivers/pci/hotplug/ibmphp_core.c6
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