Page MenuHomeFreeBSD

D61101.1794322658.diff
No OneTemporary

Authored By
Unknown
Size
910 B
Referenced Files
None
Subscribers
None

D61101.1794322658.diff

diff --git a/sys/netipsec/key.c b/sys/netipsec/key.c
--- a/sys/netipsec/key.c
+++ b/sys/netipsec/key.c
@@ -3287,7 +3287,8 @@
rm_destroy(sav->lock);
free(sav->lock, M_IPSEC_MISC);
uma_zfree_pcpu(ipsec_key_lft_zone, sav->lft_c);
- }
+ } else
+ key_freesah(&sav->sah);
#ifdef IPSEC_OFFLOAD
/* XXXKIB should this be moved to key_cleansav()? */
uma_zfree_pcpu(ipsec_key_lft_zone, sav->accel_lft_sw);
@@ -5507,9 +5508,12 @@
}
/*
* isnew == 1 -> @sah was referenced by key_getsah().
- * isnew == 0 -> we use the same @sah, that was used by @sav,
- * and we use its reference for @newsav.
+ * isnew == 0 -> we use the same @sah, that was used by @sav.
+ * @sav keeps its own reference until key_delsav(): a sender that
+ * still holds @sav reads its SAH.
*/
+ if (isnew == 0)
+ SAH_ADDREF(sah);
SECASVAR_WLOCK(sav);
/* XXX: replace cntr with pointer? */
newsav->cntr = sav->cntr;

File Metadata

Mime Type
text/plain
Expires
Tue, Nov 10, 2:57 PM (41 m, 46 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41347224
Default Alt Text
D61101.1794322658.diff (910 B)

Event Timeline