#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;
skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_ATOMIC);
if (!skb)
- return;
+ return -ENOMEM;
hdr = (void *) skb_put(skb, sizeof(*hdr));
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)
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: