[strongSwan-dev] Correct place to destroy peer_cfg in plugin?

Ian Hailey ihailey at 88project.com
Fri Apr 9 16:58:08 CEST 2010

Hi Martin,

Thanks for your advice, as you suggest I have added a call to peer_cfg->destroy straight after ike_sa->set_peer_cfg where the peer_cfg reference is incremented. 

I find that during the release of the peer_cfg there is access to the already freed child_cfg memory (I see this using Valgrind and DUMA). 

This is resolved by incrementing the child_cfg reference count during the building of the connection:

	this->peer_cfg->add_child_cfg(this->peer_cfg, child_cfg);
+	child_cfg->get_ref(child_cfg);
Now I do not see any memory errors, but it would be interesting (at least) to know why this is necessary. 



On 8 Apr 2010, at 12:34, Martin Willi wrote:

> Hi Ian,
>> Currently when the IKE SA is destroyed (ike_sa->destroy) I see that the
>> in the call to DESTROY_IF(this->peer_cfg) that the refcount is 2 (as a
>> result of the call to ike_sa->set_peer_cfg) so does not get deleted at
>> this time and is in fact never released. 
> ike_sa->set_peer_cfg() takes a reference, so you can destroy() it to
> release the reference as soon as you have passed it to set_peer_cfg().
> Alternatively, you can use the control wrapper functionality provided by
> controller_t. The initiate() method automatically consumes a reference
> to the passed config.
> Regards
> Martin

More information about the Dev mailing list