| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
| |
Reviewed by: eri, ae
Notes:
svn path=/head/; revision=284259
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
years for head. However, it is continuously misused as the mpsafe argument
for callout_init(9). Deprecate the flag and clean up callout_init() calls
to make them more consistent.
Differential Revision: https://reviews.freebsd.org/D2613
Reviewed by: jhb
MFC after: 2 weeks
Notes:
svn path=/head/; revision=283291
|
|
|
|
|
|
|
|
|
|
|
| |
was in the request. Some IKE deamons expect it will the same. Linux and
NetBSD also follow this behaviour.
PR: 137309
MFC after: 2 weeks
Notes:
svn path=/head/; revision=283146
|
|
|
|
|
|
|
|
| |
PR: 139387
MFC after: 1 week
Notes:
svn path=/head/; revision=283117
|
|
|
|
|
|
|
|
|
| |
be reported to keying daemon.
MFC after: 2 weeks
Notes:
svn path=/head/; revision=283102
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
extension header type. The key_flush_sad() now will send SADB_EXPIRE
message when HARD lifetime expires. This is required by RFC 2367 and some
keying daemons rely on these messages. HARD lifetime messages have
precedence over SOFT lifetime messages, so now they will be checked first.
Also now SADB_EXPIRE messages will be send even the SA has not been used,
because keying daemons might want to rekey such SA.
PR: 200282, 200283
Submitted by: Tobias Brunner <tobias at strongswan dot org>
MFC after: 2 weeks
Notes:
svn path=/head/; revision=283101
|
|
|
|
|
|
|
| |
Correct the name of the pad length field.
Notes:
svn path=/head/; revision=282982
|
|
|
|
|
|
|
|
|
| |
ip[6]_ipsec_output() will find PACKET_TAG_IPSEC_OUT_DONE mbuf tag.
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=282139
|
|
|
|
|
|
|
|
|
| |
calling ipsec_filter().
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=282132
|
|
|
|
|
|
|
| |
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=282048
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
When we are passing mbuf to IPSec processing via ipsec[46]_process_packet(),
we hold one reference to security policy and release it just after return
from this function. But IPSec processing can be deffered and when we release
reference to security policy after ipsec[46]_process_packet(), user can
delete this security policy from SPDB. And when IPSec processing will be
done, xform's callback function will do access to already freed memory.
To fix this move KEY_FREESP() into callback function. Now IPSec code will
release reference to SP after processing will be finished.
Differential Revision: https://reviews.freebsd.org/D2324
No objections from: #network
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=282046
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
additional arguments - buffer and size of this buffer.
ipsec_address() is used to convert sockaddr structure to presentation
format. The IPv6 part of this function returns pointer to the on-stack
buffer and at the moment when it will be used by caller, it becames
invalid. IPv4 version uses 4 static buffers and returns pointer to
new buffer each time when it called. But anyway it is still possible
to get corrupted data when several threads will use this function.
ipsec_logsastr() is used to format string about SA entry. It also
uses static buffer and has the same problem with concurrent threads.
To fix these problems add the buffer pointer and size of this
buffer to arguments. Now each caller will pass buffer and its size
to these functions. Also convert all places where these functions
are used (except disabled code).
And now ipsec_address() uses inet_ntop() function from libkern.
PR: 185996
Differential Revision: https://reviews.freebsd.org/D2321
Reviewed by: gnn
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=281695
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ipsec6_common_input_cb() uses partial copy of ip6_input() to parse
headers. But this isn't correct, when we use tunnel mode IPSec.
When we stripped outer IPv6 header from the decrypted packet, it
can become IPv4 packet and should be handled by ip_input. Also when
we use tunnel mode IPSec with IPv6 traffic, we should pass decrypted
packet with inner IPv6 header to ip6_input, it will correctly handle
it and also can decide to forward it.
The "skip" variable points to offset where payload starts. In tunnel
mode we reset it to zero after stripping the outer header. So, when
it is zero, we should requeue mbuf via netisr.
Differential Revision: https://reviews.freebsd.org/D2306
Reviewed by: adrian, gnn
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=281694
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* in ipsec_encap() embed scope zone ids into link-local addresses
in the new IPv6 header, this helps ip6_output() disambiguate the
scope;
* teach key_ismyaddr6() use in6_localip(). in6_localip() is less
strict than key_sockaddrcmp(). It doesn't compare all fileds of
struct sockaddr_in6, but it is faster and it should be safe,
because all SA's data was checked for correctness. Also, since
IPv6 link-local addresses in the &V_in6_ifaddrhead are stored in
kernel-internal form, we need to embed scope zone id from SA into
the address before calling in6_localip.
* in ipsec_common_input() take scope zone id embedded in the address
and use it to initialize sin6_scope_id, then use this sockaddr
structure to lookup SA, because we keep addresses in the SADB without
embedded scope zone id.
Differential Revision: https://reviews.freebsd.org/D2304
Reviewed by: gnn
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=281693
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The only thing is used from this code is ipip_output() function, that does
IPIP encapsulation. Other parts of XF_IP4 code were removed in r275133.
Also it isn't possible to configure the use of XF_IP4, nor from userland
via setkey(8), nor from the kernel.
Simplify the ipip_output() function and rename it to ipsec_encap().
* move IP_DF handling from ipsec4_process_packet() into ipsec_encap();
* since ipsec_encap() called from ipsec[64]_process_packet(), it
is safe to assume that mbuf is contiguous at least to IP header
for used IP version. Remove all unneeded m_pullup(), m_copydata
and related checks.
* use V_ip_defttl and V_ip6_defhlim for outer headers;
* use V_ip4_ipsec_ecn and V_ip6_ipsec_ecn for outer headers;
* move all diagnostic messages to the ipsec_encap() callers;
* simplify handling of ipsec_encap() results: if it returns non zero
value, print diagnostic message and free mbuf.
* some style(9) fixes.
Differential Revision: https://reviews.freebsd.org/D2303
Reviewed by: glebius
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=281692
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
where we want to create a new IP datagram.
o Add support for RFC6864, which allows to set IP ID for atomic IP
datagrams to any value, to improve performance. The behaviour is
controlled by net.inet.ip.rfc6864 sysctl knob, which is enabled by
default.
o In case if we generate IP ID, use counter(9) to improve performance.
o Gather all code related to IP ID into ip_id.c.
Differential Revision: https://reviews.freebsd.org/D2177
Reviewed by: adrian, cy, rpaulo
Tested by: Emeric POUPON <emeric.poupon stormshield.eu>
Sponsored by: Netflix
Sponsored by: Nginx, Inc.
Relnotes: yes
Notes:
svn path=/head/; revision=280971
|
|
|
|
|
|
|
|
| |
PR: 195011
MFC after: 1 week
Notes:
svn path=/head/; revision=279735
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
code.
Resurrect the state field in the struct secpolicy, it has
IPSEC_SPSTATE_ALIVE value when security policy linked in the chain,
and IPSEC_SPSTATE_DEAD value in all other cases. This field protects
from trying to unlink one security policy several times from the different
threads.
Take additional reference in the key_flush_spd() to be sure that policy
won't be freed from the different thread while we are sending SPDEXPIRE message.
Add KEY_FREESP() call to the key_unlink() to release additional reference
that we take when use key_getsp*() functions.
Differential Revision: https://reviews.freebsd.org/D1914
Tested by: Emeric POUPON <emeric.poupon at stormshield dot eu>
Reviewed by: hrs
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=279234
|
|
|
|
|
|
|
|
|
|
|
|
| |
referenced pointer to sp). Remove SPTREE_RLOCK_ASSERT from
key_setdumpsp() to fix wrong assertion.
Reported by: Emeric POUPON
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=277797
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
socket-buffer implementations, introduce a return value for MCLGET()
(and m_cljget() that underlies it) to allow the caller to avoid testing
M_EXT itself. Update all callers to use the return value.
With this change, very few network device drivers remain aware of
M_EXT; the primary exceptions lie in mbuf-chain pretty printers for
debugging, and in a few cases, custom mbuf and cluster allocation
implementations.
NB: This is a difficult-to-test change as it touches many drivers for
which I don't have physical devices. Instead we've gone for intensive
review, but further post-commit review would definitely be appreciated
to spot errors where changes could not easily be made mechanically,
but were largely mechanical in nature.
Differential Revision: https://reviews.freebsd.org/D1440
Reviewed by: adrian, bz, gnn
Sponsored by: EMC / Isilon Storage Division
Notes:
svn path=/head/; revision=276750
|
|
|
|
| |
Notes:
svn path=/head/; revision=276199
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
IPv6. Initialize it only once in def_policy_init(). Remove its
initialization from key_init() and make it static.
Remove several fields from struct secpolicy:
* lock - it isn't so useful having mutex in the structure, but the only
thing we do with it is initialization and destroying.
* state - it has only two values - DEAD and ALIVE. Instead of take a lock
and change the state to DEAD, then take lock again in GC function and
delete policy from the chain - keep in the chain only ALIVE policies.
* scangen - it was used in GC function to protect from sending several
SADB_SPDEXPIRE messages for one SPD entry. Now we don't keep DEAD entries
in the chain and there is no need to have scangen variable.
Use TAILQ to implement SPD entries chain. Use rmlock to protect access
to SPD entries chain. Protect all SP lookup with RLOCK, and use WLOCK
when we are inserting (or removing) SP entry in the chain.
Instead of using pattern "LOCK(); refcnt++; UNLOCK();", use refcount(9)
API to implement refcounting in SPD. Merge code from key_delsp() and
_key_delsp() into _key_freesp(). And use KEY_FREESP() macro in all cases
when we want to release reference or just delete SP entry.
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=276188
|
|
|
|
|
|
|
|
| |
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275712
|
|
|
|
|
|
|
|
| |
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275711
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ipsec_getpolicybyaddr()
ipsec4_checkpolicy()
ip_ipsec_output()
ip6_ipsec_output()
The only flag used here was IP_FORWARDING.
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275710
|
|
|
|
|
|
|
|
|
|
|
| |
and make its prototype similar to ipsec6_process_packet.
The flags argument isn't used here, tunalready is always zero.
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275708
|
|
|
|
|
|
|
|
| |
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275707
|
|
|
|
|
|
|
|
|
|
| |
It isn't used in FreeBSD.
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275706
|
|
|
|
|
|
|
|
| |
Obtained from: Yandex LLC
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275705
|
|
|
|
|
|
|
|
| |
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275575
|
|
|
|
|
|
|
|
|
|
| |
Add XXX comment, it looks incorrect, because m_pkthdr.len is already
incremented by M_PREPEND().
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275473
|
|
|
|
|
|
|
|
| |
Suggested by: kevlo
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275438
|
|
|
|
|
|
|
| |
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275437
|
|
|
|
|
|
|
| |
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275393
|
|
|
|
|
|
|
|
|
|
|
|
| |
* remove sa_route_union declaration and route_cache member from struct secashead;
* remove key_sa_routechange() call from ICMP and ICMPv6 code;
* simplify ip_ipsec_mtu();
* remove #include <net/route.h>;
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275392
|
|
|
|
|
|
|
| |
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275391
|
|
|
|
|
|
|
| |
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275390
|
|
|
|
|
|
|
| |
MFC after: 1 month
Notes:
svn path=/head/; revision=275159
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
xform_ipip was used as fallback with low priority for IPIP
encapsulated packets that were decrypted. In some cases
it can decapsulate packets, that it shouldn't. This leads to situations,
when wrong configurations are magically working. Also it can propagate
wrong ingress interface and this can break security.
Now we redesigned the IPSEC code and IPIP encapsulation is called directly
from ipsec_output, and decapsulation is done in the ipsec_input with m_striphdr.
Differential Revision: https://reviews.freebsd.org/D1220
MFC after: 1 month
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=275133
|
|
|
|
|
|
|
|
| |
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=274467
|
|
|
|
|
|
|
|
| |
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=274466
|
|
|
|
|
|
|
|
| |
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=274465
|
|
|
|
|
|
|
|
|
|
| |
Update ip6_plen before bpf processing to be able see correct value.
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=274454
|
|
|
|
|
|
|
|
| |
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=274434
|
|
|
|
|
|
|
|
|
|
| |
is described in if_enc(4).
MFC after: 2 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=274230
|
|
|
|
|
|
|
| |
Sponsored by: Nginx, Inc.
Notes:
svn path=/head/; revision=274225
|
|
|
|
|
|
|
|
|
|
|
| |
IPv4 or IPv6, assume it is the transport mode.
Reported by: jmg
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=274193
|
|
|
|
|
|
|
|
| |
MFC after: 1 week
Sponsored by: Yandex LLC
Notes:
svn path=/head/; revision=273904
|
|
|
|
|
|
|
|
|
|
| |
While here, make key_timehandler() private to key.c.
Submitted by: bz (2)
Tested by: bz
Notes:
svn path=/head/; revision=273557
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Wrong integer type was specified.
- Wrong or missing "access" specifier. The "access" specifier
sometimes included the SYSCTL type, which it should not, except for
procedural SYSCTL nodes.
- Logical OR where binary OR was expected.
- Properly assert the "access" argument passed to all SYSCTL macros,
using the CTASSERT macro. This applies to both static- and dynamically
created SYSCTLs.
- Properly assert the the data type for both static and dynamic
SYSCTLs. In the case of static SYSCTLs we only assert that the data
pointed to by the SYSCTL data pointer has the correct size, hence
there is no easy way to assert types in the C language outside a
C-function.
- Rewrote some code which doesn't pass a constant "access" specifier
when creating dynamic SYSCTL nodes, which is now a requirement.
- Updated "EXAMPLES" section in SYSCTL manual page.
MFC after: 3 days
Sponsored by: Mellanox Technologies
Notes:
svn path=/head/; revision=273377
|