Module Name: src Committed By: christos Date: Sat Sep 30 21:47:12 UTC 2017
Modified Files: src/sys/netipsec: key.c Log Message: cast reduction, NFC. To generate a diff of this commit: cvs rdiff -u -r1.229 -r1.230 src/sys/netipsec/key.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/netipsec/key.c diff -u src/sys/netipsec/key.c:1.229 src/sys/netipsec/key.c:1.230 --- src/sys/netipsec/key.c:1.229 Fri Sep 29 10:59:43 2017 +++ src/sys/netipsec/key.c Sat Sep 30 17:47:12 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: key.c,v 1.229 2017/09/29 14:59:43 christos Exp $ */ +/* $NetBSD: key.c,v 1.230 2017/09/30 21:47:12 christos Exp $ */ /* $FreeBSD: src/sys/netipsec/key.c,v 1.3.2.3 2004/02/14 22:23:23 bms Exp $ */ /* $KAME: key.c,v 1.191 2001/06/27 10:46:49 sakane Exp $ */ @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.229 2017/09/29 14:59:43 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.230 2017/09/30 21:47:12 christos Exp $"); /* * This code is referd to RFC 2367 @@ -586,7 +586,7 @@ struct _keystat { struct sadb_msghdr { struct sadb_msg *msg; - struct sadb_ext *ext[SADB_EXT_MAX + 1]; + void *ext[SADB_EXT_MAX + 1]; int extoff[SADB_EXT_MAX + 1]; int extlen[SADB_EXT_MAX + 1]; }; @@ -598,7 +598,7 @@ static const struct sockaddr * key_msghdr_get_sockaddr(const struct sadb_msghdr *mhp, int idx) { - return PFKEY_ADDR_SADDR((struct sadb_address *)mhp->ext[idx]); + return PFKEY_ADDR_SADDR(mhp->ext[idx]); } static struct mbuf * @@ -2150,10 +2150,10 @@ key_api_spdadd(struct socket *so, struct IPSECLOG(LOG_DEBUG, "invalid message is passed.\n"); return key_senderror(so, m, EINVAL); } - lft = (struct sadb_lifetime *)mhp->ext[SADB_EXT_LIFETIME_HARD]; + lft = mhp->ext[SADB_EXT_LIFETIME_HARD]; } - xpl0 = (struct sadb_x_policy *)mhp->ext[SADB_X_EXT_POLICY]; + xpl0 = mhp->ext[SADB_X_EXT_POLICY]; /* checking the direciton. */ switch (xpl0->sadb_x_policy_dir) { @@ -2370,9 +2370,9 @@ key_api_spddelete(struct socket *so, str return key_senderror(so, m, EINVAL); } - xpl0 = (struct sadb_x_policy *)mhp->ext[SADB_X_EXT_POLICY]; + xpl0 = mhp->ext[SADB_X_EXT_POLICY]; - /* checking the direciton. */ + /* checking the directon. */ switch (xpl0->sadb_x_policy_dir) { case IPSEC_DIR_INBOUND: case IPSEC_DIR_OUTBOUND: @@ -2435,6 +2435,7 @@ key_api_spddelete2(struct socket *so, st { u_int32_t id; struct secpolicy *sp; + const struct sadb_x_policy *xpl; if (mhp->ext[SADB_X_EXT_POLICY] == NULL || mhp->extlen[SADB_X_EXT_POLICY] < sizeof(struct sadb_x_policy)) { @@ -2442,7 +2443,8 @@ key_api_spddelete2(struct socket *so, st return key_senderror(so, m, EINVAL); } - id = ((struct sadb_x_policy *)mhp->ext[SADB_X_EXT_POLICY])->sadb_x_policy_id; + xpl = mhp->ext[SADB_X_EXT_POLICY]; + id = xpl->sadb_x_policy_id; /* Is there SP in SPD ? */ sp = key_lookupbyid_and_remove_sp(id); @@ -2523,6 +2525,7 @@ key_api_spdget(struct socket *so, struct u_int32_t id; struct secpolicy *sp; struct mbuf *n; + const struct sadb_x_policy *xpl; if (mhp->ext[SADB_X_EXT_POLICY] == NULL || mhp->extlen[SADB_X_EXT_POLICY] < sizeof(struct sadb_x_policy)) { @@ -2530,7 +2533,8 @@ key_api_spdget(struct socket *so, struct return key_senderror(so, m, EINVAL); } - id = ((struct sadb_x_policy *)mhp->ext[SADB_X_EXT_POLICY])->sadb_x_policy_id; + xpl = mhp->ext[SADB_X_EXT_POLICY]; + id = xpl->sadb_x_policy_id; /* Is there SP in SPD ? */ sp = key_getspbyid(id); @@ -2853,12 +2857,12 @@ key_api_nat_map(struct socket *so, struc return key_senderror(so, m, EINVAL); } - type = (struct sadb_x_nat_t_type *)mhp->ext[SADB_X_EXT_NAT_T_TYPE]; - sport = (struct sadb_x_nat_t_port *)mhp->ext[SADB_X_EXT_NAT_T_SPORT]; - dport = (struct sadb_x_nat_t_port *)mhp->ext[SADB_X_EXT_NAT_T_DPORT]; - iaddr = (struct sadb_address *)mhp->ext[SADB_X_EXT_NAT_T_OAI]; - raddr = (struct sadb_address *)mhp->ext[SADB_X_EXT_NAT_T_OAR]; - frag = (struct sadb_x_nat_t_frag *) mhp->ext[SADB_X_EXT_NAT_T_FRAG]; + type = mhp->ext[SADB_X_EXT_NAT_T_TYPE]; + sport = mhp->ext[SADB_X_EXT_NAT_T_SPORT]; + dport = mhp->ext[SADB_X_EXT_NAT_T_DPORT]; + iaddr = mhp->ext[SADB_X_EXT_NAT_T_OAI]; + raddr = mhp->ext[SADB_X_EXT_NAT_T_OAR]; + frag = mhp->ext[SADB_X_EXT_NAT_T_FRAG]; /* * XXX handle that, it should also contain a SA, or anything @@ -3193,7 +3197,7 @@ key_newsav(struct mbuf *m, const struct *errp = EINVAL; goto error; } - xsa = (const struct sadb_sa *)mhp->ext[SADB_EXT_SA]; + xsa = mhp->ext[SADB_EXT_SA]; newsav->spi = xsa->sadb_sa_spi; newsav->seq = mhp->msg->sadb_msg_seq; break; @@ -3455,7 +3459,7 @@ key_setsaval(struct secasvar *sav, struc if (mhp->ext[SADB_EXT_SA] != NULL) { const struct sadb_sa *sa0; - sa0 = (const struct sadb_sa *)mhp->ext[SADB_EXT_SA]; + sa0 = mhp->ext[SADB_EXT_SA]; if (mhp->extlen[SADB_EXT_SA] < sizeof(*sa0)) { error = EINVAL; goto fail; @@ -3482,7 +3486,7 @@ key_setsaval(struct secasvar *sav, struc const struct sadb_key *key0; int len; - key0 = (const struct sadb_key *)mhp->ext[SADB_EXT_KEY_AUTH]; + key0 = mhp->ext[SADB_EXT_KEY_AUTH]; len = mhp->extlen[SADB_EXT_KEY_AUTH]; error = 0; @@ -3517,7 +3521,7 @@ key_setsaval(struct secasvar *sav, struc const struct sadb_key *key0; int len; - key0 = (const struct sadb_key *)mhp->ext[SADB_EXT_KEY_ENCRYPT]; + key0 = mhp->ext[SADB_EXT_KEY_ENCRYPT]; len = mhp->extlen[SADB_EXT_KEY_ENCRYPT]; error = 0; @@ -3593,7 +3597,7 @@ key_setsaval(struct secasvar *sav, struc { const struct sadb_lifetime *lft0; - lft0 = (struct sadb_lifetime *)mhp->ext[SADB_EXT_LIFETIME_HARD]; + lft0 = mhp->ext[SADB_EXT_LIFETIME_HARD]; if (lft0 != NULL) { if (mhp->extlen[SADB_EXT_LIFETIME_HARD] < sizeof(*lft0)) { error = EINVAL; @@ -3602,7 +3606,7 @@ key_setsaval(struct secasvar *sav, struc sav->lft_h = key_newbuf(lft0, sizeof(*lft0)); } - lft0 = (struct sadb_lifetime *)mhp->ext[SADB_EXT_LIFETIME_SOFT]; + lft0 = mhp->ext[SADB_EXT_LIFETIME_SOFT]; if (lft0 != NULL) { if (mhp->extlen[SADB_EXT_LIFETIME_SOFT] < sizeof(*lft0)) { error = EINVAL; @@ -5107,11 +5111,11 @@ key_init_spidx_bymsghdr(struct secpolicy const struct sockaddr *src, *dst; const struct sadb_x_policy *xpl0; - src0 = (struct sadb_address *)mhp->ext[SADB_EXT_ADDRESS_SRC]; - dst0 = (struct sadb_address *)mhp->ext[SADB_EXT_ADDRESS_DST]; + src0 = mhp->ext[SADB_EXT_ADDRESS_SRC]; + dst0 = mhp->ext[SADB_EXT_ADDRESS_DST]; src = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_SRC); dst = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_DST); - xpl0 = (struct sadb_x_policy *)mhp->ext[SADB_X_EXT_POLICY]; + xpl0 = mhp->ext[SADB_X_EXT_POLICY]; memset(spidx, 0, sizeof(*spidx)); spidx->dir = xpl0->sadb_x_policy_dir; @@ -5161,8 +5165,9 @@ key_api_getspi(struct socket *so, struct return key_senderror(so, m, EINVAL); } if (mhp->ext[SADB_X_EXT_SA2] != NULL) { - mode = ((struct sadb_x_sa2 *)mhp->ext[SADB_X_EXT_SA2])->sadb_x_sa2_mode; - reqid = ((struct sadb_x_sa2 *)mhp->ext[SADB_X_EXT_SA2])->sadb_x_sa2_reqid; + const struct sadb_x_sa2 *sa2 = mhp->ext[SADB_X_EXT_SA2]; + mode = sa2->sadb_x_sa2_mode; + reqid = sa2->sadb_x_sa2_reqid; } else { mode = IPSEC_MODE_ANY; reqid = 0; @@ -5188,8 +5193,7 @@ key_api_getspi(struct socket *so, struct return key_senderror(so, m, EINVAL); /* SPI allocation */ - spi = key_do_getnewspi((struct sadb_spirange *)mhp->ext[SADB_EXT_SPIRANGE], - &saidx); + spi = key_do_getnewspi(mhp->ext[SADB_EXT_SPIRANGE], &saidx); if (spi == 0) return key_senderror(so, m, EINVAL); @@ -5428,12 +5432,12 @@ key_handle_natt_info(struct secasvar *sa } } - type = (struct sadb_x_nat_t_type *)mhp->ext[SADB_X_EXT_NAT_T_TYPE]; - sport = (struct sadb_x_nat_t_port *)mhp->ext[SADB_X_EXT_NAT_T_SPORT]; - dport = (struct sadb_x_nat_t_port *)mhp->ext[SADB_X_EXT_NAT_T_DPORT]; - iaddr = (struct sadb_address *)mhp->ext[SADB_X_EXT_NAT_T_OAI]; - raddr = (struct sadb_address *)mhp->ext[SADB_X_EXT_NAT_T_OAR]; - frag = (struct sadb_x_nat_t_frag *)mhp->ext[SADB_X_EXT_NAT_T_FRAG]; + type = mhp->ext[SADB_X_EXT_NAT_T_TYPE]; + sport = mhp->ext[SADB_X_EXT_NAT_T_SPORT]; + dport = mhp->ext[SADB_X_EXT_NAT_T_DPORT]; + iaddr = mhp->ext[SADB_X_EXT_NAT_T_OAI]; + raddr = mhp->ext[SADB_X_EXT_NAT_T_OAR]; + frag = mhp->ext[SADB_X_EXT_NAT_T_FRAG]; IPSECLOG(LOG_DEBUG, "type %d, sport = %d, dport = %d\n", type->sadb_x_nat_t_type_type, @@ -5479,12 +5483,9 @@ key_set_natt_ports(union sockaddr_union return -1; } - type = (struct sadb_x_nat_t_type *) - mhp->ext[SADB_X_EXT_NAT_T_TYPE]; - sport = (struct sadb_x_nat_t_port *) - mhp->ext[SADB_X_EXT_NAT_T_SPORT]; - dport = (struct sadb_x_nat_t_port *) - mhp->ext[SADB_X_EXT_NAT_T_DPORT]; + type = mhp->ext[SADB_X_EXT_NAT_T_TYPE]; + sport = mhp->ext[SADB_X_EXT_NAT_T_SPORT]; + dport = mhp->ext[SADB_X_EXT_NAT_T_DPORT]; key_porttosaddr(src, sport->sadb_x_nat_t_port_port); key_porttosaddr(dst, dport->sadb_x_nat_t_port_port); @@ -5553,15 +5554,16 @@ key_api_update(struct socket *so, struct return key_senderror(so, m, EINVAL); } if (mhp->ext[SADB_X_EXT_SA2] != NULL) { - mode = ((struct sadb_x_sa2 *)mhp->ext[SADB_X_EXT_SA2])->sadb_x_sa2_mode; - reqid = ((struct sadb_x_sa2 *)mhp->ext[SADB_X_EXT_SA2])->sadb_x_sa2_reqid; + const struct sadb_x_sa2 *sa2 = mhp->ext[SADB_X_EXT_SA2]; + mode = sa2->sadb_x_sa2_mode; + reqid = sa2->sadb_x_sa2_reqid; } else { mode = IPSEC_MODE_ANY; reqid = 0; } /* XXX boundary checking for other extensions */ - sa0 = (struct sadb_sa *)mhp->ext[SADB_EXT_SA]; + sa0 = mhp->ext[SADB_EXT_SA]; src = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_SRC); dst = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_DST); @@ -5790,14 +5792,15 @@ key_api_add(struct socket *so, struct mb return key_senderror(so, m, EINVAL); } if (mhp->ext[SADB_X_EXT_SA2] != NULL) { - mode = ((struct sadb_x_sa2 *)mhp->ext[SADB_X_EXT_SA2])->sadb_x_sa2_mode; - reqid = ((struct sadb_x_sa2 *)mhp->ext[SADB_X_EXT_SA2])->sadb_x_sa2_reqid; + const struct sadb_x_sa2 *sa2 = mhp->ext[SADB_X_EXT_SA2]; + mode = sa2->sadb_x_sa2_mode; + reqid = sa2->sadb_x_sa2_reqid; } else { mode = IPSEC_MODE_ANY; reqid = 0; } - sa0 = (struct sadb_sa *)mhp->ext[SADB_EXT_SA]; + sa0 = mhp->ext[SADB_EXT_SA]; src = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_SRC); dst = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_DST); @@ -5934,8 +5937,8 @@ key_setident(struct secashead *sah, stru return EINVAL; } - idsrc = (const struct sadb_ident *)mhp->ext[SADB_EXT_IDENTITY_SRC]; - iddst = (const struct sadb_ident *)mhp->ext[SADB_EXT_IDENTITY_DST]; + idsrc = mhp->ext[SADB_EXT_IDENTITY_SRC]; + iddst = mhp->ext[SADB_EXT_IDENTITY_DST]; idsrclen = mhp->extlen[SADB_EXT_IDENTITY_SRC]; iddstlen = mhp->extlen[SADB_EXT_IDENTITY_DST]; @@ -6062,7 +6065,7 @@ key_api_delete(struct socket *so, struct return key_senderror(so, m, EINVAL); } - sa0 = (struct sadb_sa *)mhp->ext[SADB_EXT_SA]; + sa0 = mhp->ext[SADB_EXT_SA]; src = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_SRC); dst = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_DST); @@ -6212,7 +6215,7 @@ key_api_get(struct socket *so, struct mb return key_senderror(so, m, EINVAL); } - sa0 = (struct sadb_sa *)mhp->ext[SADB_EXT_SA]; + sa0 = mhp->ext[SADB_EXT_SA]; src = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_SRC); dst = key_msghdr_get_sockaddr(mhp, SADB_EXT_ADDRESS_DST); @@ -7820,62 +7823,49 @@ key_parse(struct mbuf *m, struct socket /* check field of upper layer protocol and address family */ if (mh.ext[SADB_EXT_ADDRESS_SRC] != NULL && mh.ext[SADB_EXT_ADDRESS_DST] != NULL) { - struct sadb_address *src0, *dst0; + const struct sadb_address *src0, *dst0; + const struct sockaddr *sa0, *da0; u_int plen; - src0 = (struct sadb_address *)(mh.ext[SADB_EXT_ADDRESS_SRC]); - dst0 = (struct sadb_address *)(mh.ext[SADB_EXT_ADDRESS_DST]); + src0 = mh.ext[SADB_EXT_ADDRESS_SRC]; + dst0 = mh.ext[SADB_EXT_ADDRESS_DST]; + sa0 = key_msghdr_get_sockaddr(&mh, SADB_EXT_ADDRESS_SRC); + da0 = key_msghdr_get_sockaddr(&mh, SADB_EXT_ADDRESS_DST); /* check upper layer protocol */ if (src0->sadb_address_proto != dst0->sadb_address_proto) { - IPSECLOG(LOG_DEBUG, "upper layer protocol mismatched.\n"); - PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); - error = EINVAL; - goto senderror; + IPSECLOG(LOG_DEBUG, + "upper layer protocol mismatched.\n"); + goto invaddr; } /* check family */ - if (PFKEY_ADDR_SADDR(src0)->sa_family != - PFKEY_ADDR_SADDR(dst0)->sa_family) { + if (sa0->sa_family != da0->sa_family) { IPSECLOG(LOG_DEBUG, "address family mismatched.\n"); - PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); - error = EINVAL; - goto senderror; + goto invaddr; } - if (PFKEY_ADDR_SADDR(src0)->sa_len != - PFKEY_ADDR_SADDR(dst0)->sa_len) { + if (sa0->sa_len != da0->sa_len) { IPSECLOG(LOG_DEBUG, "address struct size mismatched.\n"); - PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); - error = EINVAL; - goto senderror; + goto invaddr; } - switch (PFKEY_ADDR_SADDR(src0)->sa_family) { + switch (sa0->sa_family) { case AF_INET: - if (PFKEY_ADDR_SADDR(src0)->sa_len != - sizeof(struct sockaddr_in)) { - PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); - error = EINVAL; - goto senderror; - } + if (sa0->sa_len != sizeof(struct sockaddr_in)) + goto invaddr; break; case AF_INET6: - if (PFKEY_ADDR_SADDR(src0)->sa_len != - sizeof(struct sockaddr_in6)) { - PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); - error = EINVAL; - goto senderror; - } + if (sa0->sa_len != sizeof(struct sockaddr_in6)) + goto invaddr; break; default: IPSECLOG(LOG_DEBUG, "unsupported address family.\n"); - PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); error = EAFNOSUPPORT; goto senderror; } - switch (PFKEY_ADDR_SADDR(src0)->sa_family) { + switch (sa0->sa_family) { case AF_INET: plen = sizeof(struct in_addr) << 3; break; @@ -7891,9 +7881,7 @@ key_parse(struct mbuf *m, struct socket if (src0->sadb_address_prefixlen > plen || dst0->sadb_address_prefixlen > plen) { IPSECLOG(LOG_DEBUG, "illegal prefixlen.\n"); - PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); - error = EINVAL; - goto senderror; + goto invaddr; } /* @@ -7911,7 +7899,10 @@ key_parse(struct mbuf *m, struct socket return (*key_api_typesw[msg->sadb_msg_type])(so, m, &mh); +invaddr: + error = EINVAL; senderror: + PFKEY_STATINC(PFKEY_STAT_OUT_INVADDR); return key_senderror(so, m, error); } @@ -7949,7 +7940,7 @@ key_align(struct mbuf *m, struct sadb_ms memset(mhp, 0, sizeof(*mhp)); mhp->msg = mtod(m, struct sadb_msg *); - mhp->ext[0] = (struct sadb_ext *)mhp->msg; /*XXX backward compat */ + mhp->ext[0] = mhp->msg; /*XXX backward compat */ end = PFKEY_UNUNIT64(mhp->msg->sadb_msg_len); extlen = end; /*just in case extlen is not updated*/