child-sa: Save protocol during SPI allocation
This allows us to properly delete the incomplete SA with the correct protocol should negotiation fail.
This commit is contained in:
@@ -594,6 +594,9 @@ METHOD(child_sa_t, alloc_spi, u_int32_t,
|
|||||||
proto_ike2ip(protocol), this->reqid,
|
proto_ike2ip(protocol), this->reqid,
|
||||||
&this->my_spi) == SUCCESS)
|
&this->my_spi) == SUCCESS)
|
||||||
{
|
{
|
||||||
|
/* if we allocate a SPI, but then are unable to establish the SA, we
|
||||||
|
* need to know the protocol family to delete the partial SA */
|
||||||
|
this->protocol = protocol;
|
||||||
return this->my_spi;
|
return this->my_spi;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1039,12 +1042,6 @@ METHOD(child_sa_t, destroy, void,
|
|||||||
/* delete SAs in the kernel, if they are set up */
|
/* delete SAs in the kernel, if they are set up */
|
||||||
if (this->my_spi)
|
if (this->my_spi)
|
||||||
{
|
{
|
||||||
/* if CHILD was not established, use PROTO_ESP used during alloc_spi().
|
|
||||||
* TODO: For AH support, we have to store protocol specific SPI.s */
|
|
||||||
if (this->protocol == PROTO_NONE)
|
|
||||||
{
|
|
||||||
this->protocol = PROTO_ESP;
|
|
||||||
}
|
|
||||||
hydra->kernel_interface->del_sa(hydra->kernel_interface,
|
hydra->kernel_interface->del_sa(hydra->kernel_interface,
|
||||||
this->other_addr, this->my_addr, this->my_spi,
|
this->other_addr, this->my_addr, this->my_spi,
|
||||||
proto_ike2ip(this->protocol), this->my_cpi,
|
proto_ike2ip(this->protocol), this->my_cpi,
|
||||||
|
|||||||
Reference in New Issue
Block a user