Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 23 Nov 2016 09:18:13 +0000 (UTC)
From:      "Andrey V. Elsukov" <ae@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r309044 - projects/ipsec/sys/netipsec
Message-ID:  <201611230918.uAN9IDCv040977@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ae
Date: Wed Nov 23 09:18:12 2016
New Revision: 309044
URL: https://svnweb.freebsd.org/changeset/base/309044

Log:
  Update key_expire() to correctly read current lifetime counters.

Modified:
  projects/ipsec/sys/netipsec/key.c

Modified: projects/ipsec/sys/netipsec/key.c
==============================================================================
--- projects/ipsec/sys/netipsec/key.c	Wed Nov 23 09:11:37 2016	(r309043)
+++ projects/ipsec/sys/netipsec/key.c	Wed Nov 23 09:18:12 2016	(r309044)
@@ -6543,15 +6543,18 @@ key_freereg(struct socket *so)
 static int
 key_expire(struct secasvar *sav, int hard)
 {
-	int satype;
 	struct mbuf *result = NULL, *m;
-	int len;
-	int error = -1;
 	struct sadb_lifetime *lt;
+	int error, len;
+	uint8_t satype;
 
 	IPSEC_ASSERT (sav != NULL, ("null sav"));
 	IPSEC_ASSERT (sav->sah != NULL, ("null sa header"));
 
+	KEYDBG(KEY_STAMP,
+	    printf("%s: SA(%p) expired %s lifetime\n", __func__,
+		sav, hard ? "hard": "soft"));
+	KEYDBG(KEY_DATA, kdebug_secasv(sav));
 	/* set msg header */
 	satype = key_proto2satype(sav->sah->saidx.proto);
 	IPSEC_ASSERT(satype != 0, ("invalid proto, satype %u", satype));
@@ -6593,10 +6596,12 @@ key_expire(struct secasvar *sav, int har
 	lt = mtod(m, struct sadb_lifetime *);
 	lt->sadb_lifetime_len = PFKEY_UNIT64(sizeof(struct sadb_lifetime));
 	lt->sadb_lifetime_exttype = SADB_EXT_LIFETIME_CURRENT;
-	lt->sadb_lifetime_allocations = sav->lft_c->allocations;
-	lt->sadb_lifetime_bytes = sav->lft_c->bytes;
-	lt->sadb_lifetime_addtime = sav->lft_c->addtime;
-	lt->sadb_lifetime_usetime = sav->lft_c->usetime;
+	lt->sadb_lifetime_allocations =
+	    (uint32_t)counter_u64_fetch(sav->lft_c_allocations);
+	lt->sadb_lifetime_bytes =
+	    counter_u64_fetch(sav->lft_c_bytes);
+	lt->sadb_lifetime_addtime = sav->created;
+	lt->sadb_lifetime_usetime = sav->firstused;
 	lt = (struct sadb_lifetime *)(mtod(m, caddr_t) + len / 2);
 	lt->sadb_lifetime_len = PFKEY_UNIT64(sizeof(struct sadb_lifetime));
 	if (hard) {



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201611230918.uAN9IDCv040977>