diff options
Diffstat (limited to 'net/unix/af_unix.c')
| -rw-r--r-- | net/unix/af_unix.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 6a7fe7660551..1a0c961f4ffe 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
| @@ -999,7 +999,8 @@ static int unix_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) | |||
| 999 | struct path path = { }; | 999 | struct path path = { }; |
| 1000 | 1000 | ||
| 1001 | err = -EINVAL; | 1001 | err = -EINVAL; |
| 1002 | if (sunaddr->sun_family != AF_UNIX) | 1002 | if (addr_len < offsetofend(struct sockaddr_un, sun_family) || |
| 1003 | sunaddr->sun_family != AF_UNIX) | ||
| 1003 | goto out; | 1004 | goto out; |
| 1004 | 1005 | ||
| 1005 | if (addr_len == sizeof(short)) { | 1006 | if (addr_len == sizeof(short)) { |
| @@ -1110,6 +1111,10 @@ static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr, | |||
| 1110 | unsigned int hash; | 1111 | unsigned int hash; |
| 1111 | int err; | 1112 | int err; |
| 1112 | 1113 | ||
| 1114 | err = -EINVAL; | ||
| 1115 | if (alen < offsetofend(struct sockaddr, sa_family)) | ||
| 1116 | goto out; | ||
| 1117 | |||
| 1113 | if (addr->sa_family != AF_UNSPEC) { | 1118 | if (addr->sa_family != AF_UNSPEC) { |
| 1114 | err = unix_mkname(sunaddr, alen, &hash); | 1119 | err = unix_mkname(sunaddr, alen, &hash); |
| 1115 | if (err < 0) | 1120 | if (err < 0) |
