MCPcopy Create free account
hub / github.com/F-Stack/f-stack / key_unlinksav

Function key_unlinksav

freebsd/netipsec/key.c:1364–1392  ·  view source on GitHub ↗

* Unlink SA from SAH and SPI hash under SAHTREE_WLOCK. * Expect that SA has extra reference due to lookup. * Release this references, also release SAH reference after unlink. */

Source from the content-addressed store, hash-verified

1362 * Release this references, also release SAH reference after unlink.
1363 */
1364static void
1365key_unlinksav(struct secasvar *sav)
1366{
1367 struct secashead *sah;
1368
1369 KEYDBG(KEY_STAMP,
1370 printf("%s: SA(%p)\n", __func__, sav));
1371
1372 SAHTREE_UNLOCK_ASSERT();
1373 SAHTREE_WLOCK();
1374 if (sav->state == SADB_SASTATE_DEAD) {
1375 /* SA is already unlinked */
1376 SAHTREE_WUNLOCK();
1377 return;
1378 }
1379 /* Unlink from SAH */
1380 if (sav->state == SADB_SASTATE_LARVAL)
1381 TAILQ_REMOVE(&sav->sah->savtree_larval, sav, chain);
1382 else
1383 TAILQ_REMOVE(&sav->sah->savtree_alive, sav, chain);
1384 /* Unlink from SPI hash */
1385 LIST_REMOVE(sav, spihash);
1386 sav->state = SADB_SASTATE_DEAD;
1387 sah = sav->sah;
1388 SAHTREE_WUNLOCK();
1389 key_freesav(&sav);
1390 /* Since we are unlinked, release reference to SAH */
1391 key_freesah(&sah);
1392}
1393
1394/* %%% SPD management */
1395/*

Callers 1

key_deleteFunction · 0.85

Calls 3

key_freesavFunction · 0.85
key_freesahFunction · 0.85
printfFunction · 0.50

Tested by

no test coverage detected