PCI: hv: Don't leak buffer in hv_pci_onchannelcallback()
We don't free buffer on several code paths in hv_pci_onchannelcallback(), put kfree() to the end of the function to fix the issue. Direct { kfree(); return; } can now be replaced with a simple 'break'; Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Jake Oshins <jakeo@microsoft.com>
This commit is contained in:
parent
af8c34ce6a
commit
60fcdac813
|
@ -1661,10 +1661,8 @@ static void hv_pci_onchannelcallback(void *context)
|
||||||
* All incoming packets must be at least as large as a
|
* All incoming packets must be at least as large as a
|
||||||
* response.
|
* response.
|
||||||
*/
|
*/
|
||||||
if (bytes_recvd <= sizeof(struct pci_response)) {
|
if (bytes_recvd <= sizeof(struct pci_response))
|
||||||
kfree(buffer);
|
break;
|
||||||
return;
|
|
||||||
}
|
|
||||||
desc = (struct vmpacket_descriptor *)buffer;
|
desc = (struct vmpacket_descriptor *)buffer;
|
||||||
|
|
||||||
switch (desc->type) {
|
switch (desc->type) {
|
||||||
|
@ -1679,8 +1677,7 @@ static void hv_pci_onchannelcallback(void *context)
|
||||||
comp_packet->completion_func(comp_packet->compl_ctxt,
|
comp_packet->completion_func(comp_packet->compl_ctxt,
|
||||||
response,
|
response,
|
||||||
bytes_recvd);
|
bytes_recvd);
|
||||||
kfree(buffer);
|
break;
|
||||||
return;
|
|
||||||
|
|
||||||
case VM_PKT_DATA_INBAND:
|
case VM_PKT_DATA_INBAND:
|
||||||
|
|
||||||
|
@ -1729,6 +1726,8 @@ static void hv_pci_onchannelcallback(void *context)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
kfree(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue