Commit Graph
4851 Commits
Author SHA1 Message Date
Tobias Brunner 02180ae2ff kernel-interface: Remove unnecessary parameters for release_reqid()
These are not included in the initial lookup anymore. Also simplified
the implementation as we always add the same entry to the two hash
tables.
2023-11-13 12:02:11 +01:00
Tobias Brunner 90cf0078e1 kernel-interface: Use reqid as sole key in hash table
Every reqid is allocated once, we don't store the same reqid with e.g.
different marks or interface IDs that would make it necessary to make
them part of the key in that table (that's different in the other table).

To preserve the current behavior, that is, allocating a new reqid if e.g.
the marks are different, the additional selector values (which will
result in an additional policy in the Linux kernel) are compared after
the initial lookup.
2023-11-13 12:02:11 +01:00
Tobias Brunner 595fa077b6 ike-sa: Fix handling of redirects during IKE_AUTH
Since the referenced commit, the state switch to IKE_ESTABLISHED doesn't
happen immediately after completing the authentication but only after
the remaining tasks have finished.  Due to that redirects during IKE_AUTH
were treated like those during IKE_SA_INIT causing the IKE_SA and task
manager to get reset.  However, unlike the ike-init task, the ike-auth
task returned SUCCESS and, therefore, got destroyed, while a different
task was removed from the array that was modified during the reset.
This later caused a dereference of the freed ike-auth task and a crash.

Fixes: 5ce1c91b58 ("ikev2: Trigger ike_updown() event after all IKE-specific tasks ran")
2023-11-06 10:41:57 +01:00
Tobias Brunner 80e27fe9fd ike-sa: Destroy CHILD_SAs in order
This works around an issue that occurs when recreating an IKE_SA with
multiple CHILD_SAs that use dynamically allocated reqids.

We currently try to preserve the reqid when reestablishing, so the
create-child task gets the reqid of the previous CHILD_SA and will try
to reallocate that once the CHILD_SA is installed.  Before that, the old
CHILD_SA is destroyed and the reqid is released and added to the array
of reqids to get reused.  However, because of the reverse order used here,
the first reqid in the array is the one of the last CHILD_SA.

So it can happen that a newly created CHILD_SA gets a reqid reassigned
that a later CHILD_SA will then also claim for itself and get assigned
because an entry with that reqid exists.  So multiple CHILD_SAs with
different traffic selectors could then share the same reqid.

References strongswan/strongswan#1855
2023-09-28 09:41:53 +02:00
Boi Sletterink 190d8cbe19 libipsec: Also install routes without preferred source to forward traffic
Fixes a problem installing policies with source traffic selectors that do
not contain/match any of the local addresses.

When installing a route for a source TS that does contain one or more
local addresses, a preferred source address should be set in the route
(analogous to the `src` option in `ip route add`). This address is used
when the host itself sends traffic via that route (in contrast to
forwarding it).

When the source TS does not encompass any of the local addresses, the
host is not allowed to send traffic via this route and does not need to
set the preferred source address. However, the code would just return a
failure because it could not find a matching local address. This commit
changes this so routes without preferred source IP are installed to
allow non-local traffic to get forwarded via TUN device.

Closes strongswan/strongswan#1766
2023-09-04 16:54:37 +02:00
Tobias Brunner 0bff5c98bc vici: Fix connecting to socket in Python bindings on Windows
socket.connect() takes a single argument with the address that depends
on the address family, for TCP it's a tuple with IP and port.

Fixes: 00a75e332f ("vici: Create default TCP socket on Windows in Python bindings")
Closes strongswan/strongswan#1874
2023-08-31 11:39:52 +02:00
Tobias Brunner a619356b5f kernel-pfroute: Maintain virtual flag when repopulating interface addrs
When adding a virtual IP on a TUN interface, the interface might get
activated (in terms of receiving the event) after we've already set the
virtual flag for the added address.  As the activation repopulates the
addresses on the interface, this cleared the flag and the address would
no longer be treated as virtual IP when installing routes for CHILD_SAs
that reference it in their local traffic selectors.

Closes strongswan/strongswan#1807
2023-07-27 08:21:26 +02:00
Tobias Brunner 5971fc36c9 kernel-netlink: Also set the receive buffer size on event sockets
This was weirdly overlooked and could cause issues e.g. on hosts with
lots of route changes.
2023-07-26 15:14:50 +02:00
Tobias Brunner 714c939018 kernel-netlink: Increase the default receive buffer size
Also simplify how we try to exceed the system-wide maximum.  We basically
just try to force the value and simply fall back to the regular call.
The kernel actually won't let the latter fail if the value is too big,
it just caps it at the internal maximum.
2023-07-26 15:14:50 +02:00
Tobias Brunner 0b47357091 ike: Fix untracking IKE_SA_INITs with non-zero MIDs and SPIs as half-open SAs
We track all IKE_SA_INIT requests as half-open IKE_SAs but didn't
correctly untrack them if their message ID or responder SPI was non-zero.

References strongswan/strongswan#1775

Fixes: b866ee88bf ("ike: Track unprocessed initial IKE messages like half-open IKE_SAs")
2023-07-26 15:13:43 +02:00
Tobias Brunner 849c2c9707 child-rekey: Correctly encode protocol/SPI in CHILD_SA_NOT_FOUND notify
As specified in RFC 7296, section 2.25:

   The SA that the initiator attempted to rekey is indicated by the SPI
   field in the Notify payload, which is copied from the SPI field in
   the REKEY_SA notification.

So we copy that and the protocol verbatim.
2023-07-26 15:09:49 +02:00
Tobias Brunner 10a3c44a41 notify-payload: Add methods to simplify encoding and retrieving IKE SPIs
The get_spi_data() method is currently not used, so that has been
simplified so it can be used for any protocol type and any SPI length.
Same for set_spi_data(), which is currently used for IKEv1 to encode
two SPIs.
2023-07-26 15:09:49 +02:00
Tobias Brunner 2e88ab0069 dhcp: Fix warning with newer compilers 2023-06-19 14:56:24 +02:00
Tobias Brunner 8238ad480a resolve: Maintain order of DNS servers also when installing in resolv.conf
This always writes the complete set of DNS servers to make modifications
simpler.
2023-06-19 14:56:24 +02:00
Tobias Brunner 6440975bb4 resolve: Try to maintain the order of DNS servers if using resolvconf
Since 17fd304e60 ("resolve: Don't install individual servers via
resolvconf"), DNS servers were sorted if getting installed via resolvconf.
In some setups the order might be important (even though relying on it
isn't a good idea in general as stub resolvers are free to use all of
the servers as they please).
2023-06-19 14:56:24 +02:00
Tobias Brunner ee9a663b01 Fixed some typos, courtesy of codespell 2023-06-02 10:36:47 +02:00
Tobias Brunner e306fa5f73 kernel-libipsec: Add support to send/receive raw ESP packets
This is currently only supported on Linux and with the appropriate
permissions.

Since it's experimental, it's disabled by default.

The log messages for each sent and received ESP message are logged in NET
like the ones in the socket-default plugin for UDP-encapsulated messages.
2023-05-23 13:19:47 +02:00
Tobias Brunner 29e8cb3f90 libipsec: Move restrictions regarding UDP encapsulation to users 2023-05-23 13:19:47 +02:00
Tobias Brunner 8ddfaf5857 libipsec: Instruct ESP sender whether to use UDP encapsulation 2023-05-23 13:19:47 +02:00
Tobias Brunner a049868d78 kernel-libipsec: Use CALLBACK for libipsec callbacks 2023-05-23 13:19:47 +02:00
Tobias Brunner b0eb88f703 kernel-libipsec: Forward acquires from libipsec to the daemon 2023-05-23 11:53:53 +02:00
Tobias Brunner 6ceb39b1da ike: Use a struct to store retransmission settings
The calculation of the timeout is also shared now and the total
timeout in seconds is corrected in case retransmit_base is <= 1.

This could make it easier in the future to apply different retransmission
settings to messages/exchanges.
2023-05-17 15:58:28 +02:00
Tobias Brunner 72f8794d83 selinux: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner 4620f43eba radattr: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner 74b2628301 systime-fix: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner d0ef504614 kernel-netlink: Fix build with DEBUG_LEVEL < 2 2023-05-08 17:32:18 +02:00
Tobias Brunner b0ce4ef8db ha: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner 35716df9bc dhcp: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner e72ab6a818 tnc-ifmap: Fix build with DEBUG_LEVEL < 2 2023-05-08 17:32:18 +02:00
Tobias Brunner 68f35b48d8 eap-peap: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner e252e1b465 eap-ttls: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner cbedbf3ef1 eap-radius: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:18 +02:00
Tobias Brunner 2d3967cb4c eap-dynamic: Fix build with DEBUG_LEVEL < 2 2023-05-08 17:32:17 +02:00
Tobias Brunner 65dc1801cf eap-mschapv2: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner e0eece0465 vici: Fix build with DEBUG_LEVEL < 2 2023-05-08 17:32:17 +02:00
Tobias Brunner 86aa454c88 forecast: Fix build with DEBUG_LEVEL < 2 2023-05-08 17:32:17 +02:00
Tobias Brunner a7ea181f0d save-keys: Fix build with DEBUG_LEVEL < 0 2023-05-08 17:32:17 +02:00
Tobias Brunner 800cef35db mode-config: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner ab919c62da keymat_v1: Fix build with DEBUG_LEVEL < 3 2023-05-08 17:32:17 +02:00
Tobias Brunner 963398c2c3 ike-init: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner 5e32be1bb5 ike-config: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner 7a883c4b37 child-create: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner 675082114c pubkey-authenticator: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner 117e13e7f1 eap-authenticator: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner 5408b50160 ike-sa: Fix build with DEBUG_LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner 79d49ea05b message: Fix build with DEBUG__LEVEL < 1 2023-05-08 17:32:17 +02:00
Tobias Brunner 9b9464fdcd generator: Fix build with DEBUG_LEVEL < 2 2023-05-08 17:32:17 +02:00
Tobias Brunner 36490eefa3 backend-manager: Fix build with DEBUG_LEVEL < 3 2023-05-08 17:32:17 +02:00
Tobias Brunner 8eaddbb805 doxygen: Fix syntax for some output parameters 2023-05-04 16:35:47 +02:00
Tobias Brunner 69914a2dc5 ikev1: Migrate CHILD_SAs when IKE_SA is reset during reauthentication
When we reset the initiator SPI, we have to migrate the adopted children
again so the correct IKE_SA can later be checked out.

Closes strongswan/strongswan#1663
2023-05-01 10:19:59 +02:00