aboutsummaryrefslogtreecommitdiff
path: root/sys/netinet6/frag6.c
Commit message (Collapse)AuthorAgeFilesLines
* vm_lowmem: Fix signature mismatches in vm_lowmem callbacksSHENGYI HONG2025-03-051-1/+1
| | | | | | | This is required for kernel CFI. Reviewed by: rrs, jhb, glebius Differential Revision: https://reviews.freebsd.org/D49111
* frag6: Add another use of frag6_rmqueue()Mark Johnston2024-01-041-7/+2
| | | | | | | | No functional change intended. Reviewed by: kp, bz MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D43256
* frag6: Reduce code duplicationMark Johnston2023-12-311-25/+19
| | | | | | | | | | The code which removes a fragment queue from the per-VNET hash table was duplicated three times. Factor it out into a function. No functional change intended. Reviewed by: kp, bz MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D43228
* frag6: Drop unneeded casts from malloc callsMark Johnston2023-12-311-4/+2
| | | | | | No functional change intended. MFC after: 1 week
* sys: Remove $FreeBSD$: one-line .c patternWarner Losh2023-08-161-2/+0
| | | | Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
* frag6: Avoid a possible integer overflow in fragment handlingJonathan T. Looney2023-08-011-0/+5
| | | | | | | Reviewed by: kp, markj, bz Approved by: so Security: FreeBSD-SA-23:06.ipv6 Security: CVE-2023-3107
* netinet6: make IPv6 fragment TTL per-VNET configurable.Alexander V. Chernikov2023-06-011-5/+59
| | | | | | | | | | Having it configurable adds more flexibility, especially for the systems with low amount of memory. Additionally, it allows to speedup frag6/ tests execution. Reviewed by: kp, markj, bz Differential Revision: https://reviews.freebsd.org/D35755 MFC after: 2 weeks
* IfAPI: Explicitly include <net/if_private.h> in netstackJustin Hibbits2023-01-311-0/+1
| | | | | | | | | | | Summary: In preparation of making if_t completely opaque outside of the netstack, explicitly include the header. <net/if_var.h> will stop including the header in the future. Sponsored by: Juniper Networks, Inc. Reviewed by: glebius, melifaro Differential Revision: https://reviews.freebsd.org/D38200
* frag6: use callout(9) directly instead of pr_slowtimoGleb Smirnoff2022-08-171-3/+17
| | | | | Reviewed by: melifaro Differential revision: https://reviews.freebsd.org/D36162
* netinet6: Fix a typo in a sysctl descriptionGordon Bergling2021-11-301-1/+1
| | | | | | - remove a double 'a' MFC after: 3 days
* frag6: do less work in frag6_slowtimo if possibleMateusz Guzik2021-08-141-0/+5
| | | | | | | | frag6_slowtimo avoidably uses CPU on otherwise idle boxes Reviewed by: kp Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D31528
* frag6: drop the volatile keyword from frag6_nfrags and mark with ↵Mateusz Guzik2021-08-141-2/+2
| | | | | | | | | | | __exclusive_cache_line The keyword adds nothing as all operations on the var are performed through atomic_* Reviewed by: kp Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D31528
* net: Introduce IPV6_DSCP(), IPV6_ECN() and IPV6_TRAFFIC_CLASS() macrosKristof Provost2021-03-041-3/+2
| | | | | | | | | | | | Introduce convenience macros to retrieve the DSCP, ECN or traffic class bits from an IPv6 header. Use them where appropriate. Reviewed by: ae (previous version), rscheff, tuexen, rgrimes MFC after: 2 weeks Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D29056
* Remove per-packet ifa refcounting from IPv6 fast path.Alexander V. Chernikov2021-02-151-4/+2
| | | | | | | | | | | | | | | | | | | Currently ip6_input() calls in6ifa_ifwithaddr() for every local packet, in order to check if the target ip belongs to the local ifa in proper state and increase its counters. in6ifa_ifwithaddr() references found ifa. With epoch changes, both `ip6_input()` and all other current callers of `in6ifa_ifwithaddr()` do not need this reference anymore, as epoch provides stability guarantee. Given that, update `in6ifa_ifwithaddr()` to allow it to return ifa without referencing it, while preserving option for getting referenced ifa if so desired. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D28648
* net: clean up empty lines in .c and .h filesMateusz Guzik2020-09-011-7/+0
| | | | Notes: svn path=/head/; revision=365071
* Mark more nodes as CTLFLAG_MPSAFE or CTLFLAG_NEEDGIANT (17 of many)Pawel Biernacki2020-02-261-2/+2
| | | | | | | | | | | | | | | | | | | r357614 added CTLFLAG_NEEDGIANT to make it easier to find nodes that are still not MPSAFE (or already are but aren’t properly marked). Use it in preparation for a general review of all nodes. This is non-functional change that adds annotations to SYSCTL_NODE and SYSCTL_PROC nodes using one of the soon-to-be-required flags. Mark all obvious cases as MPSAFE. All entries that haven't been marked as MPSAFE before are by default marked as NEEDGIANT Approved by: kib (mentor, blanket) Commented by: kib, gallatin, melifaro Differential Revision: https://reviews.freebsd.org/D23718 Notes: svn path=/head/; revision=358333
* Fix m_pullup() problem after removing PULLDOWN_TESTs and KAME EXT_*macros.Bjoern A. Zeeb2019-12-011-5/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | r354748-354750 replaced the KAME macros with m_pulldown() calls. Contrary to the rest of the network stack m_len checks before m_pulldown() were not put in placed (see r354748). Put these m_len checks in place for now (to go along with the style of the network stack since the initial commits). These are not put in for performance but to avoid an error scenario (even though it also will help performance at the moment as it avoid allocating an extra mbuf; not because of the unconditional function call). The observed error case went like this: (1) an mbuf with M_EXT arrives and we call m_pullup() unconditionally on it. (2) m_pullup() will call m_get() unless the requested length is larger than MHLEN (in which case it'll m_freem() the perfectly fine mbuf) and migrate the requested length of data and pkthdr into the new mbuf. (3) If m_get() succeeds, a further m_pullup() call going over MHLEN will fail. This was observed with failing auto-configuration as an RA packet of 200 bytes exceeded MHLEN and the m_pullup() called from nd6_ra_input() dropped the mbuf. (Re-)adding the m_len checks before m_pullup() calls avoids this problems with mbufs using external storage for now. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=355254
* netinet6: Remove PULLDOWN_TESTs.Bjoern A. Zeeb2019-11-151-36/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | Remove the KAME introduced PULLDOWN_TESTs which did not even have a compile-time option in sys/conf to turn them on for a custom kernel build. They made the code a lot harder to read or more complicated in a few cases. Convert the IP6_EXTHDR_CHECK() calls into FreeBSD looking code. Rather than throwing the packet away if it would not fit the KAME mbuf expectations, convert the macros to m_pullup() calls. Do not do any extra manual conditional checks upfront as to whether the m_len would suffice (*), simply let m_pullup() do its work (incl. an early check). Remove extra m_pullup() calls where earlier in the function or the only caller has already done the pullup. Discussed with: rwatson (*) Reviewed by: ae MFC after: 8 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D22334 Notes: svn path=/head/; revision=354748
* netinet*: update *mp to pass the proper value backBjoern A. Zeeb2019-11-121-0/+9
| | | | | | | | | | | | | | | | | | | | | | | | | | In ip6_[direct_]input() we are looping over the extension headers to deal with the next header. We pass a pointer to an mbuf pointer to the handling functions. In certain cases the mbuf can be updated there and we need to pass the new one back. That missing in dest6_input() and route6_input(). In tcp6_input() we should also update it before we call tcp_input(). In addition to that mark the mbuf NULL all the times when we return that we are done with handling the packet and no next header should be checked (IPPROTO_DONE). This will eventually allow us to assert proper behaviour and catch the above kind of errors more easily, expecting *mp to always be set. This change is extracted from a larger patch and not an exhaustive change across the entire stack yet. PR: 240135 Reported by: prabhakar.lakhera gmail.com MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354643
* frag6: properly handle atomic fragments according to RFCs.Bjoern A. Zeeb2019-11-081-8/+23
| | | | | | | | | | | | | | | | | | | | | | | | | RFC 8200 says: "If the fragment is a whole datagram (that is, both the Fragment Offset field and the M flag are zero), then it does not need any further reassembly and should be processed as a fully reassembled packet (i.e., updating Next Header, adjust Payload Length, removing the Fragment header, etc.). .." That means we should remove the fragment header and make all the adjustments rather than just skipping over the fragment header. The difference should be noticeable in that a properly handled atomic fragment triggering an ICMPv6 message at an upper layer (e.g. dest unreach, unreachable port) will not include the fragment header. Update the test cases to also test for an unfragmentable part. That is needed so that the next header is properly updated (not just lengths). MFC after: 3 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D22155 Notes: svn path=/head/; revision=354542
* Properly set VNET when nuking recvif from fragment queues.Bjoern A. Zeeb2019-10-251-2/+4
| | | | | | | | | | | | | | | | | | In theory the eventhandler invoke should be in the same VNET as the the current interface. We however cannot guarantee that for all cases in the future. So before checking if the fragmentation handling for this VNET is active, switch the VNET to the VNET of the interface to always get the one we want. Reviewed by: hselasky MFC after: 3 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D22153 Notes: svn path=/head/; revision=354092
* frag6: do not leak counter in error casesBjoern A. Zeeb2019-10-251-1/+1
| | | | | | | | | | | | | | | | | | When allocating the IPv6 fragement packet queue entry we do checks against counters and if we pass we increment one of the counters to claim the spot. Right after that we have two cases (malloc and MAC) which can both fail in which case we free the entry but never released our claim on the counter. In theory this can lead to not accepting new fragments after a long time, especially if it would be MAC "refusing" them. Rather than immediately subtracting the value in the error case, only increment it after these two cases so we can no longer leak it. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354081
* frag6: prevent overwriting initial fragoff=0 packet meta-data.Bjoern A. Zeeb2019-10-241-1/+6
| | | | | | | | | | | | | | | | | | | | | | | | When we receive the packet with the first fragmented part (fragoff=0) we remember the length of the unfragmentable part and the next header (and should probably also remember ECN) as meta-data on the reassembly queue. Someone replying this packet so far could change these 2 (3) values. While changing the next header seems more severe, for a full size fragmented UDP packet, for example, adding an extension header to the unfragmentable part would go unnoticed (as the framented part would be considered an exact duplicate) but make reassembly fail. So do not allow updating the meta-data after we have seen the first fragmented part anymore. The frag6_20 test case is added which failed before triggering an ICMPv6 "param prob" due to the check for each queued fragment for a max-size violation if a fragoff=0 packet was received. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354053
* frag6: handling of overlapping fragments to conform to RFC 8200Bjoern A. Zeeb2019-10-241-0/+6
| | | | | | | | | | | | | | | | While the comment was updated in r350746, the code was not. RFC8200 says that unless fragment overlaps are exact (same fragment twice) not only the current fragment but the entire reassembly queue for this packet must be silently discarded, which we now do if fragment offset and fragment length do not match. Obtained from: jtl MFC after: 3 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D16850 Notes: svn path=/head/; revision=354046
* frag6: export another counter read-only by sysctlBjoern A. Zeeb2019-10-241-0/+4
| | | | | | | | | | | | | | Similar to the system global counter also export the per-VNET counter "frag6_nfragpackets" detailing the current number of fragment packets in this VNET's reassembly queues. The read-only counter is helpful for in-VNET statistical monitoring and for test-cases. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354042
* frag6: fix counter leak in error case and optimise codeBjoern A. Zeeb2019-10-241-3/+5
| | | | | | | | | | | | | | | | | | | | | | | | In case the first fragmented part (off=0) arrives we check for the maximum packet size for each fragmented part we already queued with the addition of the unfragmentable part from the first one. For one we do not have to enter the loop at all if this is the first fragmented part to arrive, and we can skip the check. Should we encounter an error case we send an ICMPv6 message for any fragment exceeding the maximum length limit. While dequeueing the original packet and freeing it, statistics were not updated and leaked both the reassembly queue count for the fragment and the global fragment count. Found by code inspection and confirmed by tightening test cases checking more statistical and system counters. While here properly wrap a line. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354040
* frag6.c: do not leak packet queue entry in error caseBjoern A. Zeeb2019-10-241-2/+20
| | | | | | | | | | | | | | | When we are checking for the maximum reassembled packet size of the fragmentable part and run into the error case (packet too big), we are leaking the packet queue enntry if this was a first fragment to arrive. Properly cleanup, removing the queue entry from the bucket, decrementing counters, and freeing the memory. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354037
* frag6: leave a note about upper layer header checks TBDBjoern A. Zeeb2019-10-241-1/+12
| | | | | | | | | | | | | | Per sepcification the upper layer header needs to be within the first fragment. The check was not done so far and there is an open review for related work, so just leave a note as to where to put it. Move the extraction of frag offset up to this as it is needed to determine whether this is a first fragment or not. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354020
* frag6: check global limits before hash and lockBjoern A. Zeeb2019-10-241-10/+11
| | | | | | | | | | | | | | | Check whether we are accepting more fragments (based on global limits) before doing expensive operations of calculating the hash and taking the bucket lock. This slightly increases a "race" between check time and incrementing counters (which is already there) possibly allowing a few more fragments than the maximum limits. However, when under attack, we rather save this CPU time for other packets/work. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354019
* frag6: small improvementsBjoern A. Zeeb2019-10-241-6/+5
| | | | | | | | | | | | | | | Rather than walking the mbuf chain manually use m_last() which doing exactly that for us. Defer initializing srcifp for longer as there are multiple exit paths out of the function which do not need it set. Initialize before taking the lock though. Rename the mtx lock to match the type better. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354017
* frag6: remove IP6_REASS_MBUF macroBjoern A. Zeeb2019-10-241-16/+11
| | | | | | | | | | | | | The IP6_REASS_MBUF() macro did some pointer gynmastics to end up with the same type as it gets in [*(cast **)&]. Spelling it out instead saves all this and makes the code more readable and less obfuscated directly using the structure field. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=354016
* frag6: add "big picture"Bjoern A. Zeeb2019-10-231-5/+22
| | | | | | | | | | | | | | Add some ASCII relation of how the bits plug together. The terminology difference of "fragmented packets" and "fragment packets" is subtle. While here clear up more whitespace and comments. No functional change. MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=353966
* frag6: replace KAME hand-rolled queues with queue(9) TAILQsBjoern A. Zeeb2019-10-231-165/+87
| | | | | | | | | | | | | | | | | | | | | Remove the KAME custom circular queue for fragments and fragmented packets and replace them with a standard TAILQ. This make the code a lot more understandable and maintainable and removes further hand-rolled code from the the tree using a standard interface instead. Hide the still public structures under #ifdef _KERNEL as there is no use for them in user space. The naming is a bit confusing now as struct ip6q and the ip6q[] buckets array are not the same anymore; sadly struct ip6q is also used by the MAC framework and we cannot rename it. Submitted by: jtl (initally) MFC after: 3 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D16847 (jtl's original) Notes: svn path=/head/; revision=353965
* frag6: whitespace changesBjoern A. Zeeb2019-10-231-6/+5
| | | | | | | | | | | Remove trailing white space, add a blank line, and compress a comment. No functional changes. MFC after: 10 days Sponsored by: Netflix Notes: svn path=/head/; revision=353963
* frag6: fix vnet teardown leakBjoern A. Zeeb2019-10-211-13/+57
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When shutting down a VNET we did not cleanup the fragmentation hashes. This has multiple problems: (1) leak memory but also (2) leak on the global counters, which might eventually lead to a problem on a system starting and stopping a lot of vnets and dealing with a lot of IPv6 fragments that the counters/limits would be exhausted and processing would no longer take place. Unfortunately we do not have a useable variable to indicate when per-VNET initialization of frag6 has happened (or when destroy happened) so introduce a boolean to flag this. This is needed here as well as it was in r353635 for ip_reass.c in order to avoid tripping over the already destroyed locks if interfaces go away after the frag6 destroy. While splitting things up convert the TRY_LOCK to a LOCK operation in now frag6_drain_one(). The try-lock was derived from a manual hand-rolled implementation and carried forward all the time. We no longer can afford not to get the lock as that would mean we would continue to leak memory. Assert that all the buckets are empty before destroying to lock to ensure long-term stability of a clean shutdown. Reported by: hselasky Reviewed by: hselasky MFC after: 3 weeks Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D22054 Notes: svn path=/head/; revision=353793
* frag6: add read-only sysctl for nfrags.Bjoern A. Zeeb2019-10-211-0/+4
| | | | | | | | | | | | | | Add a read-only sysctl exporting the global number of fragments (base system and all vnets). This is helpful to (a) know how many fragments are currently being processed, (b) if there are possible leaks, (c) if vnet teardown is not working correctly, and lastly (d) it can be used as part of test-suits to ensure (a) to (c). MFC after: 3 weeks Sponsored by: Netflix Notes: svn path=/head/; revision=353792
* Fix panic in network stack due to use after free when receivingHans Petter Selasky2019-10-161-1/+49
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | partial fragmented packets before a network interface is detached. When sending IPv4 or IPv6 fragmented packets and a fragment is lost before the network device is freed, the mbuf making up the fragment will remain in the temporary hashed fragment list and cause a panic when it times out due to accessing a freed network interface structure. 1) Make sure the m_pkthdr.rcvif always points to a valid network interface. Else the rcvif field should be set to NULL. 2) Use the rcvif of the last received fragment as m_pkthdr.rcvif for the fully defragged packet, instead of the first received fragment. Panic backtrace for IPv6: panic() icmp6_reflect() # tries to access rcvif->if_afdata[AF_INET6]->xxx icmp6_error() frag6_freef() frag6_slowtimo() pfslowtimo() softclock_call_cc() softclock() ithread_loop() Reviewed by: bz Differential Revision: https://reviews.freebsd.org/D19622 MFC after: 1 week Sponsored by: Mellanox Technologies Notes: svn path=/head/; revision=353635
* frag6: move public structure into file local space.Bjoern A. Zeeb2019-08-081-0/+12
| | | | | | | | | | | | | | | | Move ip6asfrag and the accompanying IP6_REASS_MBUF macro from ip6_var.h into frag6.c as they are not used outside frag6.c. Sadly struct ip6q is all over the mac framework so we have to leave it public. This reduces the public KPI space. MFC after: 3 months X-MFC: possibly MFC the #define only to stable branches Sponsored by: Netflix Notes: svn path=/head/; revision=350748
* frag6.c: cleanup varaibles and return statements.Bjoern A. Zeeb2019-08-081-41/+52
| | | | | | | | | | | | | | | Consitently put () around return values. Do not assign variables at the time of variable declaration. Sort variables. Rename ia to ia6, remove/reuse some variables used only once or twice for temporary calculations. No functional changes intended. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350747
* frag6.c: initial comment and whitespace cleanup.Bjoern A. Zeeb2019-08-081-71/+62
| | | | | | | | | | | | | | Cleanup some comments (start with upper case, ends in punctuation, use width and do not consume vertical space). Update comments to RFC8200. Some whitespace changes. No functional changes. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350746
* frag6.c: rename ip6q[] to ipq6b[] and consistently use "bucket"Bjoern A. Zeeb2019-08-051-65/+65
| | | | | | | | | | | | | | | | | | | | The hash buckets array is called ip6q. The data structure ip6q is a description of different object, the one the array holds these days (since r337776). To clear some of this confusion, rename the array to ip6qb. When iterating over all buckets or addressing them directly, we use at least the variables i, hash, and bucket. To keep the terminology consistent use the variable name "bucket" and always make it an uint32_t and not sometimes an int. No functional behaviour changes intended. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350585
* frag6.c: re-order functions within fileBjoern A. Zeeb2019-08-051-155/+158
| | | | | | | | | | | | | Re-order functions within the file in preparation for an upcoming code simplification. No functional changes. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350584
* frag6.c: fix includesBjoern A. Zeeb2019-08-031-4/+1
| | | | | | | | | | | | | | Bring back systm.h after r350532 and banish errno.h, time.h, and machine/atomic.h. Reported by: bde (Thank you!) Pointyhat to: bz MFC after: 12 weeks X-MFC: with r350532 Sponsored by: Netflix Notes: svn path=/head/; revision=350559
* frag6.c: make compile with gccBjoern A. Zeeb2019-08-021-1/+1
| | | | | | | | | | | | | | | | Removing the prototype from the header and making the function static in r350533 makes architectures using gcc complain "function declaration isn't a prototype". Add the missing void given the function has no arguments. Reported by: the CI machinery Pointyhat to: bz MFC after: 3 months X-MFC with: r350533 Sponsored by: Netflix Notes: svn path=/head/; revision=350536
* frag6.c: rename malloc typeBjoern A. Zeeb2019-08-021-20/+18
| | | | | | | | | | | | | | Rename M_FTABLE to M_FRAG6 as the former sounds very much like the former "flowtable" rather than anything to do with fragments and reassembly. While here, let malloc( , .. | M_ZERO) do the zeroing rather than calling bzero() ourselves. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350535
* frag6.c: remove dead codeBjoern A. Zeeb2019-08-021-60/+0
| | | | | | | | | | | | | Remove all the #if 0 and #if notyet blocks of dead code which have been there for at least 18 years from what I can see. No functional changes. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350534
* frag6.c: move variables and sysctls into local fileBjoern A. Zeeb2019-08-021-6/+59
| | | | | | | | | | | | | | | | | | Move the sysctls and the related variables only used in frag6.c into the file and out of in6_proto.c. That way everything belonging together is in one place. Sort the variables into global and per-vnet scopes and make them static. No longer export the (helper) function frag6_set_bucketsize() now also file-local only. Should be no functional changes, only reduced public KPI/KBI surface. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350533
* frag6.c: sort includesBjoern A. Zeeb2019-08-021-6/+6
| | | | | | | | | | | | Sort includes and remove duplicate kernel.h as well as the unneeded systm.h. Hide the mac framework incude behind #fidef MAC. MFC after: 3 months Sponsored by: Netflix Notes: svn path=/head/; revision=350532
* Revert r346530 until further.Hans Petter Selasky2019-04-221-48/+9
| | | | | | | | MFC after: 1 week Sponsored by: Mellanox Technologies Notes: svn path=/head/; revision=346581
* Fix build for mips and powerpc after r346530.Hans Petter Selasky2019-04-221-0/+1
| | | | | | | | | | | Need to include sys/kernel.h to define SYSINIT() which is used by sys/eventhandler.h . MFC after: 1 week Sponsored by: Mellanox Technologies Notes: svn path=/head/; revision=346535