if (fraglen < sizeof(struct icmphdr))
                        BUG();
                if (csum_partial_copy_fromiovecend(to + sizeof(struct icmphdr),
-                           pfh->iov, 0, fraglen - sizeof(struct icmphdr),
+                           pfh->msg->msg_iter.iov, 0, fraglen - sizeof(struct icmphdr),
                            &pfh->wcheck))
                        return -EFAULT;
        } else if (offset < sizeof(struct icmphdr)) {
                        BUG();
        } else {
                if (csum_partial_copy_fromiovecend
-                               (to, pfh->iov, offset - sizeof(struct icmphdr),
+                               (to, pfh->msg->msg_iter.iov, offset - sizeof(struct icmphdr),
                                 fraglen, &pfh->wcheck))
                        return -EFAULT;
        }
        pfh.icmph.checksum = 0;
        pfh.icmph.un.echo.id = inet->inet_sport;
        pfh.icmph.un.echo.sequence = user_icmph.un.echo.sequence;
-       /* XXX: stripping const */
-       pfh.iov = (struct iovec *)msg->msg_iter.iov;
+       pfh.msg = msg;
        pfh.wcheck = 0;
        pfh.family = AF_INET;
 
 
        pfh.icmph.checksum = 0;
        pfh.icmph.un.echo.id = inet->inet_sport;
        pfh.icmph.un.echo.sequence = user_icmph.icmp6_sequence;
-       /* XXX: stripping const */
-       pfh.iov = (struct iovec *)msg->msg_iter.iov;
+       pfh.msg = msg;
        pfh.wcheck = 0;
        pfh.family = AF_INET6;