projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
connector: use nlmsg_len() to check message length
[firefly-linux-kernel-4.4.55.git]
/
drivers
/
connector
/
connector.c
diff --git
a/drivers/connector/connector.c
b/drivers/connector/connector.c
index 6ecfa758942c50a4b33ebd399cd831ac1420277d..0daa11e418b14968a3720dfa5f35b81bee521eaf 100644
(file)
--- a/
drivers/connector/connector.c
+++ b/
drivers/connector/connector.c
@@
-157,17
+157,18
@@
static int cn_call_callback(struct sk_buff *skb)
static void cn_rx_skb(struct sk_buff *__skb)
{
struct nlmsghdr *nlh;
static void cn_rx_skb(struct sk_buff *__skb)
{
struct nlmsghdr *nlh;
- int err;
struct sk_buff *skb;
struct sk_buff *skb;
+ int len, err;
skb = skb_get(__skb);
if (skb->len >= NLMSG_HDRLEN) {
nlh = nlmsg_hdr(skb);
skb = skb_get(__skb);
if (skb->len >= NLMSG_HDRLEN) {
nlh = nlmsg_hdr(skb);
+ len = nlmsg_len(nlh);
- if (
nlh->nlmsg_len <
sizeof(struct cn_msg) ||
+ if (
len < (int)
sizeof(struct cn_msg) ||
skb->len < nlh->nlmsg_len ||
skb->len < nlh->nlmsg_len ||
-
nlh->nlmsg_
len > CONNECTOR_MAX_MSG_SIZE) {
+ len > CONNECTOR_MAX_MSG_SIZE) {
kfree_skb(skb);
return;
}
kfree_skb(skb);
return;
}