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*/