}
 }
 
-static void cma_save_ip4_info(struct sockaddr *src_addr,
-                             struct sockaddr *dst_addr,
+static void cma_save_ip4_info(struct sockaddr_in *src_addr,
+                             struct sockaddr_in *dst_addr,
                              struct cma_hdr *hdr,
                              __be16 local_port)
 {
-       struct sockaddr_in *ip4;
-
        if (src_addr) {
-               ip4 = (struct sockaddr_in *)src_addr;
-               ip4->sin_family = AF_INET;
-               ip4->sin_addr.s_addr = hdr->dst_addr.ip4.addr;
-               ip4->sin_port = local_port;
+               *src_addr = (struct sockaddr_in) {
+                       .sin_family = AF_INET,
+                       .sin_addr.s_addr = hdr->dst_addr.ip4.addr,
+                       .sin_port = local_port,
+               };
        }
 
        if (dst_addr) {
-               ip4 = (struct sockaddr_in *)dst_addr;
-               ip4->sin_family = AF_INET;
-               ip4->sin_addr.s_addr = hdr->src_addr.ip4.addr;
-               ip4->sin_port = hdr->port;
+               *dst_addr = (struct sockaddr_in) {
+                       .sin_family = AF_INET,
+                       .sin_addr.s_addr = hdr->src_addr.ip4.addr,
+                       .sin_port = hdr->port,
+               };
        }
 }
 
-static void cma_save_ip6_info(struct sockaddr *src_addr,
-                             struct sockaddr *dst_addr,
+static void cma_save_ip6_info(struct sockaddr_in6 *src_addr,
+                             struct sockaddr_in6 *dst_addr,
                              struct cma_hdr *hdr,
                              __be16 local_port)
 {
-       struct sockaddr_in6 *ip6;
-
        if (src_addr) {
-               ip6 = (struct sockaddr_in6 *)src_addr;
-               ip6->sin6_family = AF_INET6;
-               ip6->sin6_addr = hdr->dst_addr.ip6;
-               ip6->sin6_port = local_port;
+               *src_addr = (struct sockaddr_in6) {
+                       .sin6_family = AF_INET6,
+                       .sin6_addr = hdr->dst_addr.ip6,
+                       .sin6_port = local_port,
+               };
        }
 
        if (dst_addr) {
-               ip6 = (struct sockaddr_in6 *)dst_addr;
-               ip6->sin6_family = AF_INET6;
-               ip6->sin6_addr = hdr->src_addr.ip6;
-               ip6->sin6_port = hdr->port;
+               *dst_addr = (struct sockaddr_in6) {
+                       .sin6_family = AF_INET6,
+                       .sin6_addr = hdr->src_addr.ip6,
+                       .sin6_port = hdr->port,
+               };
        }
 }
 
 
        switch (cma_get_ip_ver(hdr)) {
        case 4:
-               cma_save_ip4_info(src_addr, dst_addr, hdr, port);
+               cma_save_ip4_info((struct sockaddr_in *)src_addr,
+                                 (struct sockaddr_in *)dst_addr, hdr, port);
                break;
        case 6:
-               cma_save_ip6_info(src_addr, dst_addr, hdr, port);
+               cma_save_ip6_info((struct sockaddr_in6 *)src_addr,
+                                 (struct sockaddr_in6 *)dst_addr, hdr, port);
                break;
        default:
                return -EAFNOSUPPORT;