diff options
author | bz <bz@FreeBSD.org> | 2008-03-02 17:12:28 +0000 |
---|---|---|
committer | bz <bz@FreeBSD.org> | 2008-03-02 17:12:28 +0000 |
commit | 767a2621f07a4ba9a59a9d383581ed5558f667db (patch) | |
tree | 9e4f7f34605a0e72d8b6dd6e4df767cbae80a7aa /sys/netipsec/key.c | |
parent | 3dea77f93cd358a469b5ae398a5e67d559db283a (diff) | |
download | FreeBSD-src-767a2621f07a4ba9a59a9d383581ed5558f667db.zip FreeBSD-src-767a2621f07a4ba9a59a9d383581ed5558f667db.tar.gz |
Fix bugs when allocating and passing information of current lifetime and
soft lifetime [1] introduced in rev. 1.21 of key.c.
Along with that, fix a related problem in key_debug
printing the correct data.
While there replace a printf by panic in a sanity check.
PR: 120751
Submitted by: Kazuaki ODA (kazuaki aliceblue.jp) [1]
MFC after: 5 days
Diffstat (limited to 'sys/netipsec/key.c')
-rw-r--r-- | sys/netipsec/key.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c index 5dfc32f..5ce367d 100644 --- a/sys/netipsec/key.c +++ b/sys/netipsec/key.c @@ -3137,7 +3137,7 @@ key_setsaval(sav, m, mhp) sav->created = time_second; /* make lifetime for CURRENT */ - sav->lft_c = malloc(sizeof(struct sadb_lifetime), M_IPSEC_MISC, M_NOWAIT); + sav->lft_c = malloc(sizeof(struct seclifetime), M_IPSEC_MISC, M_NOWAIT); if (sav->lft_c == NULL) { ipseclog((LOG_DEBUG, "%s: No more memory.\n", __func__)); error = ENOBUFS; @@ -6323,7 +6323,12 @@ key_expire(struct secasvar *sav) lt->sadb_lifetime_addtime = sav->lft_c->addtime; lt->sadb_lifetime_usetime = sav->lft_c->usetime; lt = (struct sadb_lifetime *)(mtod(m, caddr_t) + len / 2); - bcopy(sav->lft_s, lt, sizeof(*lt)); + lt->sadb_lifetime_len = PFKEY_UNIT64(sizeof(struct sadb_lifetime)); + lt->sadb_lifetime_exttype = SADB_EXT_LIFETIME_SOFT; + lt->sadb_lifetime_allocations = sav->lft_s->allocations; + lt->sadb_lifetime_bytes = sav->lft_s->bytes; + lt->sadb_lifetime_addtime = sav->lft_s->addtime; + lt->sadb_lifetime_usetime = sav->lft_s->usetime; m_cat(result, m); /* set sadb_address for source */ |