#
01feb4c3 |
| 14-Mar-2017 |
Konstantin Belousov <kib@FreeBSD.org> |
Use designated initializers for kevent_copyops.
Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
#
67d0b0ea |
| 14-Mar-2017 |
Konstantin Belousov <kib@FreeBSD.org> |
Hide kev_iovlen() definition under #ifdef KTRACE, fixing build of kernel configs without KTRACE.
Reported by: rpokala Sponsored by: The FreeBSD Foundation MFC after: 4 days
|
#
1e4296c9 |
| 12-Mar-2017 |
Konstantin Belousov <kib@FreeBSD.org> |
Ktracing kevent(2) calls with unusual arguments might leads to an overly large allocation requests.
When ktrace-ing io, sys_kevent() allocates memory to copy the requested changes and reported event
Ktracing kevent(2) calls with unusual arguments might leads to an overly large allocation requests.
When ktrace-ing io, sys_kevent() allocates memory to copy the requested changes and reported events. Allocations are sized by the incoming syscall lengths arguments, which are user-controlled, and might cause overflow in calculations or too large allocations.
Since io trace chunks are limited by ktr_geniosize, there is no sense it even trying to satisfy unbounded allocations. Export ktr_geniosize and clamp the buffers sizes in advance.
PR: 217435 Reported by: Tim Newsham <tim.newsham@nccgroup.trust> Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
#
721fc9d8 |
| 16-Jan-2017 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r312207 through r312308.
|
#
a61b4567 |
| 16-Jan-2017 |
Enji Cooper <ngie@FreeBSD.org> |
MFhead@r312305
|
#
7d03ff1f |
| 16-Jan-2017 |
Hiren Panchasara <hiren@FreeBSD.org> |
Add kevent EVFILT_EMPTY for notification when a client has received all data i.e. everything outstanding has been acked.
Reviewed by: bz, gnn (previous version) MFC after: 3 days Sponsored by: Limel
Add kevent EVFILT_EMPTY for notification when a client has received all data i.e. everything outstanding has been acked.
Reviewed by: bz, gnn (previous version) MFC after: 3 days Sponsored by: Limelight Networks Differential Revision: https://reviews.freebsd.org/D9150
show more ...
|
#
b5442eba |
| 02-Jan-2017 |
Mark Johnston <markj@FreeBSD.org> |
Factor out instances of a knote detach followed by a knote_drop() call.
Reviewed by: kib (previous version) MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D9015
|
#
fd30dd7c |
| 26-Dec-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Make knote KN_INFLUX state counted. This is final fix for the issue closed by r310302 for knote().
If KN_INFLUX | KN_SCAN flags are set for the note passed to knote() or knote_fork(), i.e. the knot
Make knote KN_INFLUX state counted. This is final fix for the issue closed by r310302 for knote().
If KN_INFLUX | KN_SCAN flags are set for the note passed to knote() or knote_fork(), i.e. the knote is scanned, we might erronously clear INFLUX when finishing notification. For normal knote() it was fixed in r310302 simply by remembering the fact that we do not own KN_INFLUX, since there we own knlist lock and scan thread cannot clear KN_INFLUX until we drop the lock. For knote_fork(), the situation is more complicated, e must drop knlist lock AKA the process lock, since we need to register new knotes.
Change KN_INFLUX into counter and allow shared ownership of the in-flux state between scan and knote_fork() or knote(). Both in-flux setters need to ensure that knote is not dropped in parallel. Added assert about kn_influx == 1 in knote_drop() verifies that in-flux state is not shared when knote is destroyed.
Since KBI of the struct knote is changed by addition of the int kn_influx field, reorder kn_hook and kn_hookid to fill pad on LP64 arches [1]. This keeps sizeof(struct knote) to same 128 bytes as it was before addition of kn_influx, on amd64.
Reviewed by: markj Suggested by: markj [1] Tested by: pho (previous version) Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D8898
show more ...
|
#
5c36b2e8 |
| 26-Dec-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Change knlist_destroy() to assert that knlist is empty instead of accepting the wrong state and printing warning. Do not obliterate kl_lock and kl_unlock pointers, they are often useful for post-mor
Change knlist_destroy() to assert that knlist is empty instead of accepting the wrong state and printing warning. Do not obliterate kl_lock and kl_unlock pointers, they are often useful for post-mortem analysis.
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks X-Differential revision: https://reviews.freebsd.org/D8898
show more ...
|
#
34311568 |
| 26-Dec-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Style.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week X-Differential revision: https://reviews.freebsd.org/D8898
|
#
fc05543f |
| 25-Dec-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Some optimizations for kqueue timers.
There is no need to do two allocations per kqueue timer. Gather all data needed by the timer callout into the structure and allocate it at once.
Use the struct
Some optimizations for kqueue timers.
There is no need to do two allocations per kqueue timer. Gather all data needed by the timer callout into the structure and allocate it at once.
Use the structure to preserve the result of timer2sbintime(), to not perform repeated 64bit calculations in callout.
Remove tautological casts. Remove now unused p_nexttime [1].
Noted by: markj [1] Reviewed by: markj (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week X-MFC note: do not remove p_nexttime Differential revision: https://reviews.freebsd.org/D8901
show more ...
|
#
7611b728 |
| 25-Dec-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Some style.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week X-Differential revision: https://reviews.freebsd.org/D8901
|
#
4afd808b |
| 19-Dec-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Do not clear KN_INFLUX when not owning influx state.
For notes in KN_INFLUX|KN_SCAN state, the influx bit is set by a parallel scan. When knote() reports event for the vnode filters, which require
Do not clear KN_INFLUX when not owning influx state.
For notes in KN_INFLUX|KN_SCAN state, the influx bit is set by a parallel scan. When knote() reports event for the vnode filters, which require kqueue unlocked, it unconditionally sets and then clears influx to keep note around kqueue unlock. There, do not clear influx flag if a scan set it, since we do not own it, instead we prevent scan from executing by holding knlist lock.
The knote_fork() function has somewhat similar problem, it might set KN_INFLUX for scanned note, drop kqueue and list locks, and then clear the flag after relock. A solution there would be different enough, as well as the test program, so close the reported issue first.
Reported and test case provided by: yjh0502@gmail.com PR: 214923 Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
#
3ffd3530 |
| 16-Dec-2016 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r309817 through r310168.
|
#
69baec36 |
| 16-Dec-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Switch from stdatomic.h to atomic.h for kernel.
Apparently stdatomic.h implementation for gcc 4.2 on sparc64 does not work properly. This effectively reverts r251803.
Reported and tested by: lidl
Switch from stdatomic.h to atomic.h for kernel.
Apparently stdatomic.h implementation for gcc 4.2 on sparc64 does not work properly. This effectively reverts r251803.
Reported and tested by: lidl Discussed with: ed Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
Revision tags: release/11.0.1, release/11.0.0 |
|
#
86f11463 |
| 16-Jul-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Another issue reported on http://seclists.org/oss-sec/2016/q3/68 is that struct kevent member ident has uintptr_t type, which is silently truncated to int in the call to fget(). Explicitely check fo
Another issue reported on http://seclists.org/oss-sec/2016/q3/68 is that struct kevent member ident has uintptr_t type, which is silently truncated to int in the call to fget(). Explicitely check for the valid range.
Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
#
e18ee495 |
| 01-Jul-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
When a process knote was attached to the process which is already exiting, the knote is activated immediately. If the exit1() later activates knotes, such knote is attempted to be activated second t
When a process knote was attached to the process which is already exiting, the knote is activated immediately. If the exit1() later activates knotes, such knote is attempted to be activated second time. Detect the condition by zeroed kn_ptr.p_proc pointer, and avoid excessive activation.
Before r302235, such knotes were removed from the knlist immediately upon activation.
Reported by: truckman Sponsored by: The FreeBSD Foundation Approved by: re (gjb)
show more ...
|
#
9eb3f143 |
| 28-Jun-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix userspace build after r302235: do not expose bool field of the structure, change it to int.
The real fix is to sanitize user-visible definitions in sys/event.h, e.g. the affected struct knlist i
Fix userspace build after r302235: do not expose bool field of the structure, change it to int.
The real fix is to sanitize user-visible definitions in sys/event.h, e.g. the affected struct knlist is of no use for userspace programs.
Reported and tested by: jkim Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Approved by: re (gjb)
show more ...
|
#
9e590ff0 |
| 27-Jun-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
When filt_proc() removes event from the knlist due to the process exiting (NOTE_EXIT->knlist_remove_inevent()), two things happen: - knote kn_knlist pointer is reset - INFLUX knote is removed from th
When filt_proc() removes event from the knlist due to the process exiting (NOTE_EXIT->knlist_remove_inevent()), two things happen: - knote kn_knlist pointer is reset - INFLUX knote is removed from the process knlist. And, there are two consequences: - KN_LIST_UNLOCK() on such knote is nop - there is nothing which would block exit1() from processing past the knlist_destroy() (and knlist_destroy() resets knlist lock pointers). Both consequences result either in leaked process lock, or dereferencing NULL function pointers for locking.
Handle this by stopping embedding the process knlist into struct proc. Instead, the knlist is allocated together with struct proc, but marked as autodestroy on the zombie reap, by knlist_detach() function. The knlist is freed when last kevent is removed from the list, in particular, at the zombie reap time if the list is empty. As result, the knlist_remove_inevent() is no longer needed and removed.
Other changes:
In filt_procattach(), clear NOTE_EXEC and NOTE_FORK desired events from kn_sfflags for knote registered by kernel to only get NOTE_CHILD notifications. The flags leak resulted in excessive NOTE_EXEC/NOTE_FORK reports.
Fix immediate note activation in filt_procattach(). Condition should be either the immediate CHILD_NOTE activation, or immediate NOTE_EXIT report for the exiting process.
In knote_fork(), do not perform racy check for KN_INFLUX before kq lock is taken. Besides being racy, it did not accounted for notes just added by scan (KN_SCAN).
Some minor and incomplete style fixes.
Analyzed and tested by: Eric Badger <eric@badgerio.us> Reviewed by: jhb Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Approved by: re (gjb) Differential revision: https://reviews.freebsd.org/D6859
show more ...
|
#
c5e44d6c |
| 24-May-2016 |
Konstantin Belousov <kib@FreeBSD.org> |
Silence false LOR report due to the taskqueue mutex and kqueue lock named the same.
Reported by: Doug Luce <doug@freebsd.con.com> Sponsored by: The FreeBSD Foundation
|
Revision tags: release/10.3.0 |
|
#
53835448 |
| 14-Mar-2016 |
Glen Barber <gjb@FreeBSD.org> |
MFH
Sponsored by: The FreeBSD Foundation
|
#
5405e7e2 |
| 13-Mar-2016 |
Justin T. Gibbs <gibbs@FreeBSD.org> |
Provide high precision conversion from ns,us,ms -> sbintime in kevent
In timer2sbintime(), calculate the second and fractional second portions of the sbintime separately. When calculating the the fr
Provide high precision conversion from ns,us,ms -> sbintime in kevent
In timer2sbintime(), calculate the second and fractional second portions of the sbintime separately. When calculating the the fractional second portion, use a 64bit multiply to prevent excess truncation. This avoids the ~7% error in the original conversion for ns, and smaller errors of the same type for us and ms.
PR: 198139 Reviewed by: jhb MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D5397
show more ...
|
#
317cec3c |
| 22-Feb-2016 |
Glen Barber <gjb@FreeBSD.org> |
MFH
Sponsored by: The FreeBSD Foundation
|
#
9893f787 |
| 21-Feb-2016 |
Dimitry Andric <dim@FreeBSD.org> |
Merge ^/head r295601 through r295844.
|
#
88c2beac |
| 19-Feb-2016 |
Mark Johnston <markj@FreeBSD.org> |
Ensure that we test the event condition when a disabled kevent is enabled.
r274560 modified kqueue_register() to only test the event condition if the corresponding knote is not disabled. However, th
Ensure that we test the event condition when a disabled kevent is enabled.
r274560 modified kqueue_register() to only test the event condition if the corresponding knote is not disabled. However, this check takes place before the EV_ENABLE flag is used to clear the KN_DISABLED flag on the knote, so enabling a previously-disabled kevent would not result in a notification for a triggered event. This change fixes the problem by testing for EV_ENABLED before possibly checking the event condition.
This change also updates a kqueue regression test to exercise this case.
PR: 206368 Reviewed by: kib Sponsored by: EMC / Isilon Storage Division Differential Revision: https://reviews.freebsd.org/D5307
show more ...
|