From: Tobias Brunner Date: Thu, 26 Jan 2023 15:21:07 +0000 (+0100) Subject: kernel-pfkey: Always register for events X-Git-Tag: android-2.4.1~4^2~3 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e323539428d7beddf63cb21130fcae9809ef1ef9;p=thirdparty%2Fstrongswan.git kernel-pfkey: Always register for events The starter-specific code path isn't necessary anymore since d8fdd1018e16 ("starter: Don't flush SAs in the kernel"). --- diff --git a/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c b/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c index e73767d581..e7046a7043 100644 --- a/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c +++ b/src/libcharon/plugins/kernel_pfkey/kernel_pfkey_ipsec.c @@ -3303,7 +3303,6 @@ METHOD(kernel_ipsec_t, destroy, void, kernel_pfkey_ipsec_t *kernel_pfkey_ipsec_create() { private_kernel_pfkey_ipsec_t *this; - bool register_for_events = TRUE; int rcv_buffer; INIT(this, @@ -3339,11 +3338,6 @@ kernel_pfkey_ipsec_t *kernel_pfkey_ipsec_create() FALSE, lib->ns), ); - if (streq(lib->ns, "starter")) - { /* starter has no threads, so we do not register for kernel events */ - register_for_events = FALSE; - } - /* create a PF_KEY socket to communicate with the kernel */ this->socket = socket(PF_KEY, SOCK_RAW, PF_KEY_V2); if (this->socket <= 0) @@ -3353,41 +3347,38 @@ kernel_pfkey_ipsec_t *kernel_pfkey_ipsec_create() return NULL; } - if (register_for_events) + /* create a PF_KEY socket for ACQUIRE & EXPIRE */ + this->socket_events = socket(PF_KEY, SOCK_RAW, PF_KEY_V2); + if (this->socket_events <= 0) { - /* create a PF_KEY socket for ACQUIRE & EXPIRE */ - this->socket_events = socket(PF_KEY, SOCK_RAW, PF_KEY_V2); - if (this->socket_events <= 0) - { - DBG1(DBG_KNL, "unable to create PF_KEY event socket"); - destroy(this); - return NULL; - } + DBG1(DBG_KNL, "unable to create PF_KEY event socket"); + destroy(this); + return NULL; + } - rcv_buffer = lib->settings->get_int(lib->settings, + rcv_buffer = lib->settings->get_int(lib->settings, "%s.plugins.kernel-pfkey.events_buffer_size", 0, lib->ns); - if (rcv_buffer > 0) - { - if (setsockopt(this->socket_events, SOL_SOCKET, SO_RCVBUF, - &rcv_buffer, sizeof(rcv_buffer)) == -1) - { - DBG1(DBG_KNL, "unable to set receive buffer size on PF_KEY " - "event socket: %s", strerror(errno)); - } - } - - /* register the event socket */ - if (register_pfkey_socket(this, SADB_SATYPE_ESP) != SUCCESS || - register_pfkey_socket(this, SADB_SATYPE_AH) != SUCCESS) + if (rcv_buffer > 0) + { + if (setsockopt(this->socket_events, SOL_SOCKET, SO_RCVBUF, + &rcv_buffer, sizeof(rcv_buffer)) == -1) { - DBG1(DBG_KNL, "unable to register PF_KEY event socket"); - destroy(this); - return NULL; + DBG1(DBG_KNL, "unable to set receive buffer size on PF_KEY " + "event socket: %s", strerror(errno)); } + } - lib->watcher->add(lib->watcher, this->socket_events, WATCHER_READ, - (watcher_cb_t)receive_events, this); + /* register the event socket */ + if (register_pfkey_socket(this, SADB_SATYPE_ESP) != SUCCESS || + register_pfkey_socket(this, SADB_SATYPE_AH) != SUCCESS) + { + DBG1(DBG_KNL, "unable to register PF_KEY event socket"); + destroy(this); + return NULL; } + lib->watcher->add(lib->watcher, this->socket_events, WATCHER_READ, + (watcher_cb_t)receive_events, this); + return &this->public; }