Commit 43db362d3adda9e0a915ddb9a8d1a41186e19179
Committed by
David S. Miller
1 parent
8b2aaedee4
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
net: get rid of some pointless casts to sockaddr
The following 4 functions: move_addr_to_kernel move_addr_to_user verify_iovec verify_compat_iovec are always effectively called with a sockaddr_storage. Make this explicit by changing their signature. This removes a large number of casts from sockaddr_storage to sockaddr. Signed-off-by: Maciej Żenczykowski <maze@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Showing 5 changed files with 19 additions and 27 deletions Side-by-side Diff
include/linux/socket.h
... | ... | @@ -326,11 +326,11 @@ |
326 | 326 | int offset, |
327 | 327 | unsigned int len, __wsum *csump); |
328 | 328 | |
329 | -extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode); | |
329 | +extern int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *address, int mode); | |
330 | 330 | extern int memcpy_toiovec(struct iovec *v, unsigned char *kdata, int len); |
331 | 331 | extern int memcpy_toiovecend(const struct iovec *v, unsigned char *kdata, |
332 | 332 | int offset, int len); |
333 | -extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr); | |
333 | +extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr); | |
334 | 334 | extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data); |
335 | 335 | |
336 | 336 | struct timespec; |
include/net/compat.h
... | ... | @@ -41,7 +41,7 @@ |
41 | 41 | #endif /* defined(CONFIG_COMPAT) */ |
42 | 42 | |
43 | 43 | extern int get_compat_msghdr(struct msghdr *, struct compat_msghdr __user *); |
44 | -extern int verify_compat_iovec(struct msghdr *, struct iovec *, struct sockaddr *, int); | |
44 | +extern int verify_compat_iovec(struct msghdr *, struct iovec *, struct sockaddr_storage *, int); | |
45 | 45 | extern asmlinkage long compat_sys_sendmsg(int,struct compat_msghdr __user *,unsigned); |
46 | 46 | extern asmlinkage long compat_sys_sendmmsg(int, struct compat_mmsghdr __user *, |
47 | 47 | unsigned, unsigned); |
net/compat.c
... | ... | @@ -79,7 +79,7 @@ |
79 | 79 | |
80 | 80 | /* I've named the args so it is easy to tell whose space the pointers are in. */ |
81 | 81 | int verify_compat_iovec(struct msghdr *kern_msg, struct iovec *kern_iov, |
82 | - struct sockaddr *kern_address, int mode) | |
82 | + struct sockaddr_storage *kern_address, int mode) | |
83 | 83 | { |
84 | 84 | int tot_len; |
85 | 85 |
net/core/iovec.c
net/socket.c
... | ... | @@ -181,7 +181,7 @@ |
181 | 181 | * invalid addresses -EFAULT is returned. On a success 0 is returned. |
182 | 182 | */ |
183 | 183 | |
184 | -int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr *kaddr) | |
184 | +int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr) | |
185 | 185 | { |
186 | 186 | if (ulen < 0 || ulen > sizeof(struct sockaddr_storage)) |
187 | 187 | return -EINVAL; |
... | ... | @@ -209,7 +209,7 @@ |
209 | 209 | * specified. Zero is returned for a success. |
210 | 210 | */ |
211 | 211 | |
212 | -static int move_addr_to_user(struct sockaddr *kaddr, int klen, | |
212 | +static int move_addr_to_user(struct sockaddr_storage *kaddr, int klen, | |
213 | 213 | void __user *uaddr, int __user *ulen) |
214 | 214 | { |
215 | 215 | int err; |
... | ... | @@ -1449,7 +1449,7 @@ |
1449 | 1449 | |
1450 | 1450 | sock = sockfd_lookup_light(fd, &err, &fput_needed); |
1451 | 1451 | if (sock) { |
1452 | - err = move_addr_to_kernel(umyaddr, addrlen, (struct sockaddr *)&address); | |
1452 | + err = move_addr_to_kernel(umyaddr, addrlen, &address); | |
1453 | 1453 | if (err >= 0) { |
1454 | 1454 | err = security_socket_bind(sock, |
1455 | 1455 | (struct sockaddr *)&address, |
... | ... | @@ -1556,7 +1556,7 @@ |
1556 | 1556 | err = -ECONNABORTED; |
1557 | 1557 | goto out_fd; |
1558 | 1558 | } |
1559 | - err = move_addr_to_user((struct sockaddr *)&address, | |
1559 | + err = move_addr_to_user(&address, | |
1560 | 1560 | len, upeer_sockaddr, upeer_addrlen); |
1561 | 1561 | if (err < 0) |
1562 | 1562 | goto out_fd; |
... | ... | @@ -1605,7 +1605,7 @@ |
1605 | 1605 | sock = sockfd_lookup_light(fd, &err, &fput_needed); |
1606 | 1606 | if (!sock) |
1607 | 1607 | goto out; |
1608 | - err = move_addr_to_kernel(uservaddr, addrlen, (struct sockaddr *)&address); | |
1608 | + err = move_addr_to_kernel(uservaddr, addrlen, &address); | |
1609 | 1609 | if (err < 0) |
1610 | 1610 | goto out_put; |
1611 | 1611 | |
... | ... | @@ -1645,7 +1645,7 @@ |
1645 | 1645 | err = sock->ops->getname(sock, (struct sockaddr *)&address, &len, 0); |
1646 | 1646 | if (err) |
1647 | 1647 | goto out_put; |
1648 | - err = move_addr_to_user((struct sockaddr *)&address, len, usockaddr, usockaddr_len); | |
1648 | + err = move_addr_to_user(&address, len, usockaddr, usockaddr_len); | |
1649 | 1649 | |
1650 | 1650 | out_put: |
1651 | 1651 | fput_light(sock->file, fput_needed); |
... | ... | @@ -1677,7 +1677,7 @@ |
1677 | 1677 | sock->ops->getname(sock, (struct sockaddr *)&address, &len, |
1678 | 1678 | 1); |
1679 | 1679 | if (!err) |
1680 | - err = move_addr_to_user((struct sockaddr *)&address, len, usockaddr, | |
1680 | + err = move_addr_to_user(&address, len, usockaddr, | |
1681 | 1681 | usockaddr_len); |
1682 | 1682 | fput_light(sock->file, fput_needed); |
1683 | 1683 | } |
... | ... | @@ -1716,7 +1716,7 @@ |
1716 | 1716 | msg.msg_controllen = 0; |
1717 | 1717 | msg.msg_namelen = 0; |
1718 | 1718 | if (addr) { |
1719 | - err = move_addr_to_kernel(addr, addr_len, (struct sockaddr *)&address); | |
1719 | + err = move_addr_to_kernel(addr, addr_len, &address); | |
1720 | 1720 | if (err < 0) |
1721 | 1721 | goto out_put; |
1722 | 1722 | msg.msg_name = (struct sockaddr *)&address; |
... | ... | @@ -1779,7 +1779,7 @@ |
1779 | 1779 | err = sock_recvmsg(sock, &msg, size, flags); |
1780 | 1780 | |
1781 | 1781 | if (err >= 0 && addr != NULL) { |
1782 | - err2 = move_addr_to_user((struct sockaddr *)&address, | |
1782 | + err2 = move_addr_to_user(&address, | |
1783 | 1783 | msg.msg_namelen, addr, addr_len); |
1784 | 1784 | if (err2 < 0) |
1785 | 1785 | err = err2; |
1786 | 1786 | |
... | ... | @@ -1933,13 +1933,9 @@ |
1933 | 1933 | |
1934 | 1934 | /* This will also move the address data into kernel space */ |
1935 | 1935 | if (MSG_CMSG_COMPAT & flags) { |
1936 | - err = verify_compat_iovec(msg_sys, iov, | |
1937 | - (struct sockaddr *)&address, | |
1938 | - VERIFY_READ); | |
1936 | + err = verify_compat_iovec(msg_sys, iov, &address, VERIFY_READ); | |
1939 | 1937 | } else |
1940 | - err = verify_iovec(msg_sys, iov, | |
1941 | - (struct sockaddr *)&address, | |
1942 | - VERIFY_READ); | |
1938 | + err = verify_iovec(msg_sys, iov, &address, VERIFY_READ); | |
1943 | 1939 | if (err < 0) |
1944 | 1940 | goto out_freeiov; |
1945 | 1941 | total_len = err; |
1946 | 1942 | |
... | ... | @@ -2143,13 +2139,9 @@ |
2143 | 2139 | uaddr = (__force void __user *)msg_sys->msg_name; |
2144 | 2140 | uaddr_len = COMPAT_NAMELEN(msg); |
2145 | 2141 | if (MSG_CMSG_COMPAT & flags) { |
2146 | - err = verify_compat_iovec(msg_sys, iov, | |
2147 | - (struct sockaddr *)&addr, | |
2148 | - VERIFY_WRITE); | |
2142 | + err = verify_compat_iovec(msg_sys, iov, &addr, VERIFY_WRITE); | |
2149 | 2143 | } else |
2150 | - err = verify_iovec(msg_sys, iov, | |
2151 | - (struct sockaddr *)&addr, | |
2152 | - VERIFY_WRITE); | |
2144 | + err = verify_iovec(msg_sys, iov, &addr, VERIFY_WRITE); | |
2153 | 2145 | if (err < 0) |
2154 | 2146 | goto out_freeiov; |
2155 | 2147 | total_len = err; |
... | ... | @@ -2166,7 +2158,7 @@ |
2166 | 2158 | len = err; |
2167 | 2159 | |
2168 | 2160 | if (uaddr != NULL) { |
2169 | - err = move_addr_to_user((struct sockaddr *)&addr, | |
2161 | + err = move_addr_to_user(&addr, | |
2170 | 2162 | msg_sys->msg_namelen, uaddr, |
2171 | 2163 | uaddr_len); |
2172 | 2164 | if (err < 0) |