]> Pileus Git - ~andy/linux/blobdiff - net/ipv4/ping.c
net: add build-time checks for msg->msg_name size
[~andy/linux] / net / ipv4 / ping.c
index cae5262a337c3071a2c59dd210fd87aa4bb915db..e09e8839d622fd17c11a59840d561bac99c43d15 100644 (file)
@@ -700,7 +700,7 @@ static int ping_v4_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
         */
 
        if (msg->msg_name) {
-               struct sockaddr_in *usin = (struct sockaddr_in *)msg->msg_name;
+               DECLARE_SOCKADDR(struct sockaddr_in *, usin, msg->msg_name);
                if (msg->msg_namelen < sizeof(*usin))
                        return -EINVAL;
                if (usin->sin_family != AF_INET)
@@ -873,7 +873,7 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
 
        /* Copy the address and add cmsg data. */
        if (family == AF_INET) {
-               struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
+               DECLARE_SOCKADDR(struct sockaddr_in *, sin, msg->msg_name);
 
                if (sin) {
                        sin->sin_family = AF_INET;
@@ -890,8 +890,7 @@ int ping_recvmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
        } else if (family == AF_INET6) {
                struct ipv6_pinfo *np = inet6_sk(sk);
                struct ipv6hdr *ip6 = ipv6_hdr(skb);
-               struct sockaddr_in6 *sin6 =
-                       (struct sockaddr_in6 *)msg->msg_name;
+               DECLARE_SOCKADDR(struct sockaddr_in6 *, sin6, msg->msg_name);
 
                if (sin6) {
                        sin6->sin6_family = AF_INET6;