Bluetooth: Add error handling for managment command handlers
authorJohan Hedberg <johan.hedberg@nokia.com>
Mon, 13 Dec 2010 19:07:03 +0000 (21:07 +0200)
committerGustavo F. Padovan <padovan@profusion.mobi>
Thu, 23 Dec 2010 00:56:56 +0000 (22:56 -0200)
The command handlers for bluetooth management messaging should be able
to report errors (such as memory allocation failures) to the higher
levels in the call stack.

Signed-off-by: Johan Hedberg <johan.hedberg@nokia.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
net/bluetooth/mgmt.c

index d15bf676c3509216e5e894385a31c29c332da57b..7ea5489e79773d36bf74bef168e737380665b04c 100644 (file)
@@ -29,7 +29,7 @@
 #include <net/bluetooth/hci_core.h>
 #include <net/bluetooth/mgmt.h>
 
-static void cmd_status(struct sock *sk, u16 cmd, u8 status)
+static int cmd_status(struct sock *sk, u16 cmd, u8 status)
 {
        struct sk_buff *skb;
        struct mgmt_hdr *hdr;
@@ -39,7 +39,7 @@ static void cmd_status(struct sock *sk, u16 cmd, u8 status)
 
        skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_ATOMIC);
        if (!skb)
-               return;
+               return -ENOMEM;
 
        hdr = (void *) skb_put(skb, sizeof(*hdr));
 
@@ -52,6 +52,8 @@ static void cmd_status(struct sock *sk, u16 cmd, u8 status)
 
        if (sock_queue_rcv_skb(sk, skb) < 0)
                kfree_skb(skb);
+
+       return 0;
 }
 
 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
@@ -87,10 +89,13 @@ int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
        switch (opcode) {
        default:
                BT_DBG("Unknown op %u", opcode);
-               cmd_status(sk, opcode, 0x01);
+               err = cmd_status(sk, opcode, 0x01);
                break;
        }
 
+       if (err < 0)
+               goto done;
+
        err = msglen;
 
 done: