[Bluetooth] Fix double frees on error paths of btusb and bpa10x drivers
The transfer buffer of an URB will be automatically freed when using the URB_FREE_BUFFER transfer_flag. So the extra calls to kfree() will cause a double free. Reported-by: Justin Mattock <justinmattock@gmail.com> Signed-off-by: Rabin Vincent <rabin@rab.in> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
@@ -256,7 +256,6 @@ static inline int bpa10x_submit_intr_urb(struct hci_dev *hdev)
|
|||||||
BT_ERR("%s urb %p submission failed (%d)",
|
BT_ERR("%s urb %p submission failed (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
kfree(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
@@ -298,7 +297,6 @@ static inline int bpa10x_submit_bulk_urb(struct hci_dev *hdev)
|
|||||||
BT_ERR("%s urb %p submission failed (%d)",
|
BT_ERR("%s urb %p submission failed (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
kfree(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
|
@@ -271,7 +271,6 @@ static int btusb_submit_intr_urb(struct hci_dev *hdev)
|
|||||||
BT_ERR("%s urb %p submission failed (%d)",
|
BT_ERR("%s urb %p submission failed (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
kfree(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
@@ -354,7 +353,6 @@ static int btusb_submit_bulk_urb(struct hci_dev *hdev)
|
|||||||
BT_ERR("%s urb %p submission failed (%d)",
|
BT_ERR("%s urb %p submission failed (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
kfree(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
@@ -475,7 +473,6 @@ static int btusb_submit_isoc_urb(struct hci_dev *hdev)
|
|||||||
BT_ERR("%s urb %p submission failed (%d)",
|
BT_ERR("%s urb %p submission failed (%d)",
|
||||||
hdev->name, urb, -err);
|
hdev->name, urb, -err);
|
||||||
usb_unanchor_urb(urb);
|
usb_unanchor_urb(urb);
|
||||||
kfree(buf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
usb_free_urb(urb);
|
usb_free_urb(urb);
|
||||||
|
Reference in New Issue
Block a user