|
@@ -77,7 +77,8 @@ static int llcp_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
|
|
struct sockaddr_nfc_llcp llcp_addr;
|
|
struct sockaddr_nfc_llcp llcp_addr;
|
|
int len, ret = 0;
|
|
int len, ret = 0;
|
|
|
|
|
|
- if (!addr || addr->sa_family != AF_NFC)
|
|
|
|
|
|
+ if (!addr || alen < offsetofend(struct sockaddr, sa_family) ||
|
|
|
|
+ addr->sa_family != AF_NFC)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family);
|
|
pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family);
|
|
@@ -151,7 +152,8 @@ static int llcp_raw_sock_bind(struct socket *sock, struct sockaddr *addr,
|
|
struct sockaddr_nfc_llcp llcp_addr;
|
|
struct sockaddr_nfc_llcp llcp_addr;
|
|
int len, ret = 0;
|
|
int len, ret = 0;
|
|
|
|
|
|
- if (!addr || addr->sa_family != AF_NFC)
|
|
|
|
|
|
+ if (!addr || alen < offsetofend(struct sockaddr, sa_family) ||
|
|
|
|
+ addr->sa_family != AF_NFC)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
|
|
|
|
pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family);
|
|
pr_debug("sk %p addr %p family %d\n", sk, addr, addr->sa_family);
|