Commit 43db362d3adda9e0a915ddb9a8d1a41186e19179

Authored by Maciej Żenczykowski
Committed by David S. Miller
1 parent 8b2aaedee4

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);
... ... @@ -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  
... ... @@ -35,7 +35,7 @@
35 35 * in any case.
36 36 */
37 37  
38   -int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr *address, int mode)
  38 +int verify_iovec(struct msghdr *m, struct iovec *iov, struct sockaddr_storage *address, int mode)
39 39 {
40 40 int size, ct, err;
41 41  
... ... @@ -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)