|
@@ -181,34 +181,15 @@ static int cn_call_callback(struct cn_msg *msg, void (*destruct_data)(void *), v
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-/*
|
|
|
- * Skb receive helper - checks skb and msg size and calls callback
|
|
|
- * helper.
|
|
|
- */
|
|
|
-static int __cn_rx_skb(struct sk_buff *skb, struct nlmsghdr *nlh)
|
|
|
-{
|
|
|
- u32 pid, uid, seq, group;
|
|
|
- struct cn_msg *msg;
|
|
|
-
|
|
|
- pid = NETLINK_CREDS(skb)->pid;
|
|
|
- uid = NETLINK_CREDS(skb)->uid;
|
|
|
- seq = nlh->nlmsg_seq;
|
|
|
- group = NETLINK_CB((skb)).dst_group;
|
|
|
- msg = NLMSG_DATA(nlh);
|
|
|
-
|
|
|
- return cn_call_callback(msg, (void (*)(void *))kfree_skb, skb);
|
|
|
-}
|
|
|
-
|
|
|
/*
|
|
|
* Main netlink receiving function.
|
|
|
*
|
|
|
- * It checks skb and netlink header sizes and calls the skb receive
|
|
|
- * helper with a shared skb.
|
|
|
+ * It checks skb, netlink header and msg sizes, and calls callback helper.
|
|
|
*/
|
|
|
static void cn_rx_skb(struct sk_buff *__skb)
|
|
|
{
|
|
|
+ struct cn_msg *msg;
|
|
|
struct nlmsghdr *nlh;
|
|
|
- u32 len;
|
|
|
int err;
|
|
|
struct sk_buff *skb;
|
|
|
|
|
@@ -224,11 +205,8 @@ static void cn_rx_skb(struct sk_buff *__skb)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- len = NLMSG_ALIGN(nlh->nlmsg_len);
|
|
|
- if (len > skb->len)
|
|
|
- len = skb->len;
|
|
|
-
|
|
|
- err = __cn_rx_skb(skb, nlh);
|
|
|
+ msg = NLMSG_DATA(nlh);
|
|
|
+ err = cn_call_callback(msg, (void (*)(void *))kfree_skb, skb);
|
|
|
if (err < 0)
|
|
|
kfree_skb(skb);
|
|
|
}
|