2015-08-20 01:51:33

by Nicholas Krause

[permalink] [raw]
Subject: [PATCH] bluetooth:Fix error handling in the function a2mp_getinfo_req

This fixes error handling in the function a2mp_getinfo_req by
assigning the return value of the internal call to the function
hci_send_cmd to a new variable, err and returning this value
at the end of this function's body as we need to cleanup allocated
resources used by this function before signaling to the caller
that a internal failure has occurred that is required to be handled
by the caller of the function a2mp_getinfo_req.

Signed-off-by: Nicholas Krause <[email protected]>
---
net/bluetooth/a2mp.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c
index 5a04eb1..d230a38 100644
--- a/net/bluetooth/a2mp.c
+++ b/net/bluetooth/a2mp.c
@@ -291,6 +291,7 @@ static int a2mp_getinfo_req(struct amp_mgr *mgr, struct sk_buff *skb,
{
struct a2mp_info_req *req = (void *) skb->data;
struct hci_dev *hdev;
+ int err;

if (le16_to_cpu(hdr->len) < sizeof(*req))
return -EINVAL;
@@ -311,14 +312,14 @@ static int a2mp_getinfo_req(struct amp_mgr *mgr, struct sk_buff *skb,
}

set_bit(READ_LOC_AMP_INFO, &mgr->state);
- hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
+ err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);

done:
if (hdev)
hci_dev_put(hdev);

skb_pull(skb, sizeof(*req));
- return 0;
+ return err;
}

static int a2mp_getinfo_rsp(struct amp_mgr *mgr, struct sk_buff *skb,
--
2.1.4


2015-08-24 10:12:05

by Johan Hedberg

[permalink] [raw]
Subject: Re: [PATCH] bluetooth:Fix error handling in the function a2mp_getinfo_req

Hi Nicholas,

On Wed, Aug 19, 2015, Nicholas Krause wrote:
> This fixes error handling in the function a2mp_getinfo_req by
> assigning the return value of the internal call to the function
> hci_send_cmd to a new variable, err and returning this value
> at the end of this function's body as we need to cleanup allocated
> resources used by this function before signaling to the caller
> that a internal failure has occurred that is required to be handled
> by the caller of the function a2mp_getinfo_req.
>
> Signed-off-by: Nicholas Krause <[email protected]>
> ---
> net/bluetooth/a2mp.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/net/bluetooth/a2mp.c b/net/bluetooth/a2mp.c
> index 5a04eb1..d230a38 100644
> --- a/net/bluetooth/a2mp.c
> +++ b/net/bluetooth/a2mp.c
> @@ -291,6 +291,7 @@ static int a2mp_getinfo_req(struct amp_mgr *mgr, struct sk_buff *skb,
> {
> struct a2mp_info_req *req = (void *) skb->data;
> struct hci_dev *hdev;
> + int err;
>
> if (le16_to_cpu(hdr->len) < sizeof(*req))
> return -EINVAL;
> @@ -311,14 +312,14 @@ static int a2mp_getinfo_req(struct amp_mgr *mgr, struct sk_buff *skb,
> }
>
> set_bit(READ_LOC_AMP_INFO, &mgr->state);
> - hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
> + err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
>
> done:
> if (hdev)
> hci_dev_put(hdev);
>
> skb_pull(skb, sizeof(*req));
> - return 0;
> + return err;
> }

This patch will not apply against the latest bluetooth-next tree since
there the error handling (and A2MP response sending) already seems to be
handled correctly.

Johan