提交 cacdc7d2 编写于 作者: A Al Viro

ip: stash a pointer to msghdr in struct ping_fakehdr

... instead of storing its ->mgs_iter.iov there
Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
上级 2e90b1c4
...@@ -59,7 +59,7 @@ extern struct pingv6_ops pingv6_ops; ...@@ -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, ...@@ -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 @@ static int ping_v4_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m ...@@ -811,8 +811,7 @@ static int ping_v4_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *m
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, ...@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册