Module Name: src Committed By: ozaki-r Date: Wed May 17 02:19:10 UTC 2017
Modified Files: src/sys/netipsec: key.c keydb.h Log Message: Replace malloc/free with kmem(9) and kill KMALLOC/KFREE macros To generate a diff of this commit: cvs rdiff -u -r1.131 -r1.132 src/sys/netipsec/key.c cvs rdiff -u -r1.14 -r1.15 src/sys/netipsec/keydb.h 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.131 src/sys/netipsec/key.c:1.132 --- src/sys/netipsec/key.c:1.131 Wed May 17 02:04:55 2017 +++ src/sys/netipsec/key.c Wed May 17 02:19:09 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: key.c,v 1.131 2017/05/17 02:04:55 ozaki-r Exp $ */ +/* $NetBSD: key.c,v 1.132 2017/05/17 02:19:09 ozaki-r 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.131 2017/05/17 02:04:55 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: key.c,v 1.132 2017/05/17 02:19:09 ozaki-r Exp $"); /* * This code is referd to RFC 2367 @@ -52,7 +52,6 @@ __KERNEL_RCSID(0, "$NetBSD: key.c,v 1.13 #include <sys/mbuf.h> #include <sys/domain.h> #include <sys/protosw.h> -#include <sys/malloc.h> #include <sys/socket.h> #include <sys/socketvar.h> #include <sys/sysctl.h> @@ -333,26 +332,6 @@ do { \ MALLOC_DEFINE(M_SECA, "key mgmt", "security associations, key management"); -#if 1 -#define KMALLOC(p, t, n) \ - ((p) = (t) malloc((unsigned long)(n), M_SECA, M_NOWAIT)) -#define KFREE(p) \ - free((p), M_SECA) -#else -#define KMALLOC(p, t, n) \ -do { \ - ((p) = malloc((unsigned long)(n), M_SECA, M_NOWAIT)); \ - printf("%s %d: %p <- KMALLOC(%s, %d)\n", \ - __func__, __LINE__, (p), #t, n); \ -} while (0) - -#define KFREE(p) \ - do { \ - printf("%s %d: %p -> KFREE()\n", __func__, __LINE__, (p)); \ - free((p), M_SECA); \ - } while (0) -#endif - /* * set parameters into secpolicyindex buffer. * Must allocate secpolicyindex buffer passed to this function. @@ -2930,9 +2909,9 @@ key_delsah(struct secashead *sah) LIST_REMOVE(sah, chain); if (sah->idents != NULL) - KFREE(sah->idents); + kmem_free(sah->idents, sah->idents_len); if (sah->identd != NULL) - KFREE(sah->identd); + kmem_free(sah->identd, sah->identd_len); kmem_free(sah, sizeof(*sah)); @@ -3157,27 +3136,30 @@ key_freesaval(struct secasvar *sav) { if (sav->replay != NULL) { - KFREE(sav->replay); + kmem_free(sav->replay, sav->replay_len); sav->replay = NULL; + sav->replay_len = 0; } if (sav->key_auth != NULL) { - KFREE(sav->key_auth); + kmem_free(sav->key_auth, sav->key_auth_len); sav->key_auth = NULL; + sav->key_auth_len = 0; } if (sav->key_enc != NULL) { - KFREE(sav->key_enc); + kmem_free(sav->key_enc, sav->key_enc_len); sav->key_enc = NULL; + sav->key_enc_len = 0; } if (sav->lft_c != NULL) { kmem_free(sav->lft_c, sizeof(*(sav->lft_c))); sav->lft_c = NULL; } if (sav->lft_h != NULL) { - KFREE(sav->lft_h); + kmem_free(sav->lft_h, sizeof(*(sav->lft_h))); sav->lft_h = NULL; } if (sav->lft_s != NULL) { - KFREE(sav->lft_s); + kmem_free(sav->lft_s, sizeof(*(sav->lft_s))); sav->lft_s = NULL; } } @@ -3226,13 +3208,10 @@ key_setsaval(struct secasvar *sav, struc /* replay window */ if ((sa0->sadb_sa_flags & SADB_X_EXT_OLD) == 0) { - sav->replay = (struct secreplay *) - malloc(sizeof(struct secreplay)+sa0->sadb_sa_replay, M_SECA, M_NOWAIT|M_ZERO); - if (sav->replay == NULL) { - ipseclog((LOG_DEBUG, "key_setsaval: No more memory.\n")); - error = ENOBUFS; - goto fail; - } + size_t len = sizeof(struct secreplay) + + sa0->sadb_sa_replay; + sav->replay = kmem_zalloc(len, KM_SLEEP); + sav->replay_len = len; if (sa0->sadb_sa_replay != 0) sav->replay->bitmap = (char*)(sav->replay+1); sav->replay->wsize = sa0->sadb_sa_replay; @@ -3270,12 +3249,8 @@ key_setsaval(struct secasvar *sav, struc goto fail; } - sav->key_auth = (struct sadb_key *)key_newbuf(key0, len); - if (sav->key_auth == NULL) { - ipseclog((LOG_DEBUG, "key_setsaval: No more memory.\n")); - error = ENOBUFS; - goto fail; - } + sav->key_auth = key_newbuf(key0, len); + sav->key_auth_len = len; } /* Encryption key */ @@ -3298,12 +3273,8 @@ key_setsaval(struct secasvar *sav, struc error = EINVAL; break; } - sav->key_enc = (struct sadb_key *)key_newbuf(key0, len); - if (sav->key_enc == NULL) { - ipseclog((LOG_DEBUG, "key_setsaval: No more memory.\n")); - error = ENOBUFS; - goto fail; - } + sav->key_enc = key_newbuf(key0, len); + sav->key_enc_len = len; break; case SADB_X_SATYPE_IPCOMP: if (len != PFKEY_ALIGN8(sizeof(struct sadb_key))) @@ -3370,14 +3341,7 @@ key_setsaval(struct secasvar *sav, struc error = EINVAL; goto fail; } - sav->lft_h = (struct sadb_lifetime *)key_newbuf(lft0, - sizeof(*lft0)); - if (sav->lft_h == NULL) { - ipseclog((LOG_DEBUG, "key_setsaval: No more memory.\n")); - error = ENOBUFS; - goto fail; - } - /* to be initialize ? */ + sav->lft_h = key_newbuf(lft0, sizeof(*lft0)); } lft0 = (struct sadb_lifetime *)mhp->ext[SADB_EXT_LIFETIME_SOFT]; @@ -3386,13 +3350,7 @@ key_setsaval(struct secasvar *sav, struc error = EINVAL; goto fail; } - sav->lft_s = (struct sadb_lifetime *)key_newbuf(lft0, - sizeof(*lft0)); - if (sav->lft_s == NULL) { - ipseclog((LOG_DEBUG, "key_setsaval: No more memory.\n")); - error = ENOBUFS; - goto fail; - } + sav->lft_s = key_newbuf(lft0, sizeof(*lft0)); /* to be initialize ? */ } } @@ -4065,11 +4023,7 @@ key_newbuf(const void *src, u_int len) { void *new; - KMALLOC(new, void *, len); - if (new == NULL) { - ipseclog((LOG_DEBUG, "key_newbuf: No more memory.\n")); - return NULL; - } + new = kmem_alloc(len, KM_SLEEP); memcpy(new, src, len); return new; @@ -5553,6 +5507,7 @@ key_setident(struct secashead *sah, stru const struct sadb_ident *idsrc, *iddst; int idsrclen, iddstlen; + KASSERT(!cpu_softintr_p()); KASSERT(sah != NULL); KASSERT(m != NULL); KASSERT(mhp != NULL); @@ -5562,12 +5517,14 @@ key_setident(struct secashead *sah, stru * Can be called with an existing sah from key_update(). */ if (sah->idents != NULL) { - KFREE(sah->idents); + kmem_free(sah->idents, sah->idents_len); sah->idents = NULL; + sah->idents_len = 0; } if (sah->identd != NULL) { - KFREE(sah->identd); + kmem_free(sah->identd, sah->identd_len); sah->identd = NULL; + sah->identd_len = 0; } /* don't make buffer if not there */ @@ -5607,18 +5564,10 @@ key_setident(struct secashead *sah, stru } /* make structure */ - KMALLOC(sah->idents, struct sadb_ident *, idsrclen); - if (sah->idents == NULL) { - ipseclog((LOG_DEBUG, "key_setident: No more memory.\n")); - return ENOBUFS; - } - KMALLOC(sah->identd, struct sadb_ident *, iddstlen); - if (sah->identd == NULL) { - KFREE(sah->idents); - sah->idents = NULL; - ipseclog((LOG_DEBUG, "key_setident: No more memory.\n")); - return ENOBUFS; - } + sah->idents = kmem_alloc(idsrclen, KM_SLEEP); + sah->idents_len = idsrclen; + sah->identd = kmem_alloc(iddstlen, KM_SLEEP); + sah->identd_len = iddstlen; memcpy(sah->idents, idsrc, idsrclen); memcpy(sah->identd, iddst, iddstlen); Index: src/sys/netipsec/keydb.h diff -u src/sys/netipsec/keydb.h:1.14 src/sys/netipsec/keydb.h:1.15 --- src/sys/netipsec/keydb.h:1.14 Mon Mar 30 03:51:50 2015 +++ src/sys/netipsec/keydb.h Wed May 17 02:19:09 2017 @@ -1,4 +1,4 @@ -/* $NetBSD: keydb.h,v 1.14 2015/03/30 03:51:50 ozaki-r Exp $ */ +/* $NetBSD: keydb.h,v 1.15 2017/05/17 02:19:09 ozaki-r Exp $ */ /* $FreeBSD: src/sys/netipsec/keydb.h,v 1.1.4.1 2003/01/24 05:11:36 sam Exp $ */ /* $KAME: keydb.h,v 1.14 2000/08/02 17:58:26 sakane Exp $ */ @@ -72,6 +72,8 @@ struct secashead { struct sadb_ident *idents; /* source identity */ struct sadb_ident *identd; /* destination identity */ /* XXX I don't know how to use them. */ + size_t idents_len; /* length of idents */ + size_t identd_len; /* length of identd */ u_int8_t state; /* MATURE or DEAD. */ LIST_HEAD(_satree, secasvar) savtree[SADB_SASTATE_MAX+1]; @@ -100,10 +102,13 @@ struct secasvar { u_int32_t flags; /* holder for SADB_KEY_FLAGS */ struct sadb_key *key_auth; /* Key for Authentication */ + size_t key_auth_len; /* length of key_auth */ struct sadb_key *key_enc; /* Key for Encryption */ + size_t key_enc_len; /* length of key_enc */ u_int ivlen; /* length of IV */ struct secreplay *replay; /* replay prevention */ + size_t replay_len; /* length of replay */ time_t created; /* for lifetime */ struct sadb_lifetime *lft_c; /* CURRENT lifetime, it's constant. */