diff options
author | Ralf Baechle <ralf@linux-mips.org> | 1997-06-01 03:16:17 +0000 |
---|---|---|
committer | Ralf Baechle <ralf@linux-mips.org> | 1997-06-01 03:16:17 +0000 |
commit | d8d9b8f76f22b7a16a83e261e64f89ee611f49df (patch) | |
tree | 3067bc130b80d52808e6390c9fc7fc087ec1e33c /net/ipv4/ip_sockglue.c | |
parent | 19c9bba94152148523ba0f7ef7cffe3d45656b11 (diff) |
Initial revision
Diffstat (limited to 'net/ipv4/ip_sockglue.c')
-rw-r--r-- | net/ipv4/ip_sockglue.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/net/ipv4/ip_sockglue.c b/net/ipv4/ip_sockglue.c index 1689159ed..8c2463d04 100644 --- a/net/ipv4/ip_sockglue.c +++ b/net/ipv4/ip_sockglue.c @@ -126,26 +126,24 @@ int ip_cmsg_send(struct msghdr *msg, struct ipcm_cookie *ipc, struct device **de for (cmsg = CMSG_FIRSTHDR(msg); cmsg; cmsg = CMSG_NXTHDR(msg, cmsg)) { if (cmsg->cmsg_level != SOL_IP) continue; - switch (cmsg->cmsg_type) - { + switch (cmsg->cmsg_type) { case IP_LOCALADDR: - if (cmsg->cmsg_len < sizeof(struct in_addr)+sizeof(*cmsg)) + if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct in_addr))) return -EINVAL; - memcpy(&ipc->addr, cmsg->cmsg_data, 4); + memcpy(&ipc->addr, CMSG_DATA(cmsg), sizeof(struct in_addr)); break; case IP_RETOPTS: - err = cmsg->cmsg_len - sizeof(*cmsg); - err = ip_options_get(&ipc->opt, cmsg->cmsg_data, - err < 40 ? err : 40, 0); + err = cmsg->cmsg_len - CMSG_ALIGN(sizeof(struct cmsghdr)); + err = ip_options_get(&ipc->opt, CMSG_DATA(cmsg), err < 40 ? err : 40, 0); if (err) return err; break; case IP_TXINFO: { struct in_pktinfo *info; - if (cmsg->cmsg_len < sizeof(*info)+sizeof(*cmsg)) + if (cmsg->cmsg_len != CMSG_LEN(sizeof(struct in_pktinfo))) return -EINVAL; - info = (struct in_pktinfo*)cmsg->cmsg_data; + info = (struct in_pktinfo *)CMSG_DATA(cmsg); if (info->ipi_ifindex && !devp) return -EINVAL; if ((*devp = dev_get_by_index(info->ipi_ifindex)) == NULL) @@ -212,7 +210,7 @@ int ip_setsockopt(struct sock *sk, int level, int optname, char *optval, int opt sk->opt = opt; sti(); if (old_opt) - kfree_s(old_opt, sizeof(struct optlen) + old_opt->optlen); + kfree_s(old_opt, sizeof(struct ip_options) + old_opt->optlen); return 0; } case IP_RXINFO: |