Bluetooth: Add error handling for managment command handlers
[pandora-kernel.git] / net / bluetooth / mgmt.c
index d15bf67..7ea5489 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: