ip: stash a pointer to msghdr in struct ping_fakehdr
... instead of storing its ->mgs_iter.iov there Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
Родитель
2e90b1c45e
Коммит
cacdc7d2f9
|
@ -59,7 +59,7 @@ extern struct pingv6_ops pingv6_ops;
|
||||||
|
|
||||||
struct pingfakehdr {
|
struct pingfakehdr {
|
||||||
struct icmphdr icmph;
|
struct icmphdr icmph;
|
||||||
struct iovec *iov;
|
struct msghdr *msg;
|
||||||
sa_family_t family;
|
sa_family_t family;
|
||||||
__wsum wcheck;
|
__wsum wcheck;
|
||||||
};
|
};
|
||||||
|
|
|
@ -602,14 +602,14 @@ int ping_getfrag(void *from, char *to,
|
||||||
if (fraglen < sizeof(struct icmphdr))
|
if (fraglen < sizeof(struct icmphdr))
|
||||||
BUG();
|
BUG();
|
||||||
if (csum_partial_copy_fromiovecend(to + sizeof(struct icmphdr),
|
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))
|
&pfh->wcheck))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
} else if (offset < sizeof(struct icmphdr)) {
|
} else if (offset < sizeof(struct icmphdr)) {
|
||||||
BUG();
|
BUG();
|
||||||
} else {
|
} else {
|
||||||
if (csum_partial_copy_fromiovecend
|
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))
|
fraglen, &pfh->wcheck))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
}
|
}
|
||||||
|
@ -811,8 +811,7 @@ back_from_confirm:
|
||||||
pfh.icmph.checksum = 0;
|
pfh.icmph.checksum = 0;
|
||||||
pfh.icmph.un.echo.id = inet->inet_sport;
|
pfh.icmph.un.echo.id = inet->inet_sport;
|
||||||
pfh.icmph.un.echo.sequence = user_icmph.un.echo.sequence;
|
pfh.icmph.un.echo.sequence = user_icmph.un.echo.sequence;
|
||||||
/* XXX: stripping const */
|
pfh.msg = msg;
|
||||||
pfh.iov = (struct iovec *)msg->msg_iter.iov;
|
|
||||||
pfh.wcheck = 0;
|
pfh.wcheck = 0;
|
||||||
pfh.family = AF_INET;
|
pfh.family = AF_INET;
|
||||||
|
|
||||||
|
|
|
@ -163,8 +163,7 @@ int ping_v6_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg,
|
||||||
pfh.icmph.checksum = 0;
|
pfh.icmph.checksum = 0;
|
||||||
pfh.icmph.un.echo.id = inet->inet_sport;
|
pfh.icmph.un.echo.id = inet->inet_sport;
|
||||||
pfh.icmph.un.echo.sequence = user_icmph.icmp6_sequence;
|
pfh.icmph.un.echo.sequence = user_icmph.icmp6_sequence;
|
||||||
/* XXX: stripping const */
|
pfh.msg = msg;
|
||||||
pfh.iov = (struct iovec *)msg->msg_iter.iov;
|
|
||||||
pfh.wcheck = 0;
|
pfh.wcheck = 0;
|
||||||
pfh.family = AF_INET6;
|
pfh.family = AF_INET6;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче