version 1.235, 2017/11/08 10:35:30 |
version 1.236, 2017/11/21 06:49:56 |
Line 788 static const char *key_getuserfqdn (void |
|
Line 788 static const char *key_getuserfqdn (void |
|
static void key_sa_chgstate (struct secasvar *, u_int8_t); |
static void key_sa_chgstate (struct secasvar *, u_int8_t); |
|
|
static struct mbuf *key_alloc_mbuf (int); |
static struct mbuf *key_alloc_mbuf (int); |
|
static struct mbuf *key_alloc_mbuf_simple(int, int); |
|
|
static void key_timehandler(void *); |
static void key_timehandler(void *); |
static void key_timehandler_work(struct work *, void *); |
static void key_timehandler_work(struct work *, void *); |
Line 2416 key_api_spddelete(struct socket *so, str |
|
Line 2417 key_api_spddelete(struct socket *so, str |
|
} |
} |
} |
} |
|
|
|
static struct mbuf * |
|
key_alloc_mbuf_simple(int len, int mflag) |
|
{ |
|
struct mbuf *n; |
|
|
|
MGETHDR(n, mflag, MT_DATA); |
|
if (n && len > MHLEN) { |
|
MCLGET(n, mflag); |
|
if ((n->m_flags & M_EXT) == 0) { |
|
m_freem(n); |
|
n = NULL; |
|
} |
|
} |
|
return n; |
|
} |
|
|
/* |
/* |
* SADB_SPDDELETE2 processing |
* SADB_SPDDELETE2 processing |
* receive |
* receive |
Line 2465 key_api_spddelete2(struct socket *so, st |
|
Line 2482 key_api_spddelete2(struct socket *so, st |
|
/* create new sadb_msg to reply. */ |
/* create new sadb_msg to reply. */ |
len = PFKEY_ALIGN8(sizeof(struct sadb_msg)); |
len = PFKEY_ALIGN8(sizeof(struct sadb_msg)); |
|
|
MGETHDR(n, M_DONTWAIT, MT_DATA); |
n = key_alloc_mbuf_simple(len, M_DONTWAIT); |
if (n && len > MHLEN) { |
|
MCLGET(n, M_DONTWAIT); |
|
if ((n->m_flags & M_EXT) == 0) { |
|
m_freem(n); |
|
n = NULL; |
|
} |
|
} |
|
if (!n) |
if (!n) |
return key_senderror(so, m, ENOBUFS); |
return key_senderror(so, m, ENOBUFS); |
|
|
Line 4072 key_setsadbmsg(u_int8_t type, u_int16_t |
|
Line 4082 key_setsadbmsg(u_int8_t type, u_int16_t |
|
|
|
len = PFKEY_ALIGN8(sizeof(struct sadb_msg)); |
len = PFKEY_ALIGN8(sizeof(struct sadb_msg)); |
|
|
MGETHDR(m, M_DONTWAIT, MT_DATA); |
m = key_alloc_mbuf_simple(len, M_DONTWAIT); |
if (m && len > MHLEN) { |
|
MCLGET(m, M_DONTWAIT); |
|
if ((m->m_flags & M_EXT) == 0) { |
|
m_freem(m); |
|
m = NULL; |
|
} |
|
} |
|
if (!m) |
if (!m) |
return NULL; |
return NULL; |
m->m_pkthdr.len = m->m_len = len; |
m->m_pkthdr.len = m->m_len = len; |
Line 5257 key_api_getspi(struct socket *so, struct |
|
Line 5260 key_api_getspi(struct socket *so, struct |
|
len = PFKEY_ALIGN8(sizeof(struct sadb_msg)) + |
len = PFKEY_ALIGN8(sizeof(struct sadb_msg)) + |
PFKEY_ALIGN8(sizeof(struct sadb_sa)); |
PFKEY_ALIGN8(sizeof(struct sadb_sa)); |
|
|
MGETHDR(n, M_DONTWAIT, MT_DATA); |
n = key_alloc_mbuf_simple(len, M_DONTWAIT); |
if (len > MHLEN) { |
|
MCLGET(n, M_DONTWAIT); |
|
if ((n->m_flags & M_EXT) == 0) { |
|
m_freem(n); |
|
n = NULL; |
|
} |
|
} |
|
if (!n) |
if (!n) |
return key_senderror(so, m, ENOBUFS); |
return key_senderror(so, m, ENOBUFS); |
|
|
Line 7105 key_api_register(struct socket *so, stru |
|
Line 7101 key_api_register(struct socket *so, stru |
|
if (len > MCLBYTES) |
if (len > MCLBYTES) |
return key_senderror(so, m, ENOBUFS); |
return key_senderror(so, m, ENOBUFS); |
|
|
MGETHDR(n, M_DONTWAIT, MT_DATA); |
n = key_alloc_mbuf_simple(len, M_DONTWAIT); |
if (len > MHLEN) { |
|
MCLGET(n, M_DONTWAIT); |
|
if ((n->m_flags & M_EXT) == 0) { |
|
m_freem(n); |
|
n = NULL; |
|
} |
|
} |
|
if (!n) |
if (!n) |
return key_senderror(so, m, ENOBUFS); |
return key_senderror(so, m, ENOBUFS); |
|
|
Line 7728 key_parse(struct mbuf *m, struct socket |
|
Line 7717 key_parse(struct mbuf *m, struct socket |
|
if (m->m_next) { |
if (m->m_next) { |
struct mbuf *n; |
struct mbuf *n; |
|
|
MGETHDR(n, M_DONTWAIT, MT_DATA); |
n = key_alloc_mbuf_simple(m->m_pkthdr.len, M_DONTWAIT); |
if (n && m->m_pkthdr.len > MHLEN) { |
|
MCLGET(n, M_DONTWAIT); |
|
if ((n->m_flags & M_EXT) == 0) { |
|
m_free(n); |
|
n = NULL; |
|
} |
|
} |
|
if (!n) { |
if (!n) { |
m_freem(m); |
m_freem(m); |
return ENOBUFS; |
return ENOBUFS; |