#
dabf006a |
| 14-Dec-2024 |
Kyle Evans <kevans@FreeBSD.org> |
Add per-process flag to disable logsigexit
I added a third value for kern.logsigexit to mean 'auto' as an abundance of caution, but I don't know how much it matters -- that can be easily consolidate
Add per-process flag to disable logsigexit
I added a third value for kern.logsigexit to mean 'auto' as an abundance of caution, but I don't know how much it matters -- that can be easily consolidated back to boolean-ish.
This is primarily targeted towards people running test suites under CI (e.g. buildbot, jenkins). Oftentimes tests entail segfaults that are expected, and logs get spammed -- this can be particularly high volume depending on the application. Per-process control of this behavior is desirable because they may still want to be logging legitimate segfaults, so the system-wide atomic bomb kern.logsigexit=0 is not a great option.
This adds a process flag to disable it, controllable via procctl(2)/proccontrol(1); the latter knows it as "sigexitlog" due to its length, but it's referred to almost everywhere else as "sigexit_log."
Reviewed by: kib (earlier version), pstef Differential Revision: https://reviews.freebsd.org/D21903
show more ...
|
Revision tags: release/14.2.0, release/13.4.0 |
|
#
d37286b9 |
| 29-Jul-2024 |
Mark Johnston <markj@FreeBSD.org> |
proc: Remove kernel stack swapping support, part 7
Remove some uses of PHOLD which were there only to prevent the process' threads from being swapped out.
Tested by: pho Reviewed by: imp, kib Diffe
proc: Remove kernel stack swapping support, part 7
Remove some uses of PHOLD which were there only to prevent the process' threads from being swapped out.
Tested by: pho Reviewed by: imp, kib Differential Revision: https://reviews.freebsd.org/D46118
show more ...
|
#
8370e9df |
| 29-Jul-2024 |
Mark Johnston <markj@FreeBSD.org> |
vm: Remove kernel stack swapping support, part 3
- Modify PHOLD() to no longer fault in the process. - Remove _PHOLD_LITE(), which is now the same as _PHOLD(), fix up consumers. - Remove faultin()
vm: Remove kernel stack swapping support, part 3
- Modify PHOLD() to no longer fault in the process. - Remove _PHOLD_LITE(), which is now the same as _PHOLD(), fix up consumers. - Remove faultin() and its callees.
Tested by: pho Reviewed by: imp, kib Differential Revision: https://reviews.freebsd.org/D46114
show more ...
|
Revision tags: release/14.1.0 |
|
#
6bb132ba |
| 15-Apr-2024 |
Brooks Davis <brooks@FreeBSD.org> |
Reduce reliance on sys/sysproto.h pollution
Add sys/errno.h, sys/malloc.h, sys/queue.h, and vm/uma.h as needed.
sys/sysproto.h currently includes sys/acl.h which currently includes sys/param.h, sys
Reduce reliance on sys/sysproto.h pollution
Add sys/errno.h, sys/malloc.h, sys/queue.h, and vm/uma.h as needed.
sys/sysproto.h currently includes sys/acl.h which currently includes sys/param.h, sys/queue.h, and vm/uma.h which in turn bring in sys/errno.h sys/malloc.h.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D44465
show more ...
|
#
afc10f8b |
| 10-Apr-2024 |
Olivier Certner <olce@FreeBSD.org> |
sys_procctl(): Make it clear that negative commands are invalid
An initial reading of the preamble of sys_procctl() gives the impression that no test prevents a malicious user from passing a negativ
sys_procctl(): Make it clear that negative commands are invalid
An initial reading of the preamble of sys_procctl() gives the impression that no test prevents a malicious user from passing a negative commands index (in 'uap->com'), which is soon used as an index into the static array procctl_cmds_info[].
However, a closer examination leads to the conclusion that the existing code is technically correct. Indeed, the comparison of 'uap->com' to the nitems() expression, which expands to a ratio of sizeof(), leads to a conversion of 'uap->com' to an 'unsigned int' as per Usual Arithmetic Conversions/Integer Promotions applied by '<=', because sizeof() returns 'size_t' values, and we define 'size_t' as an equivalent of 'unsigned int' (which is not mandated by the standard, the latter allowing, e.g., integers of lower ranks).
With this conversion, negative values of 'uap->com' are automatically ruled-out since they are converted to very big unsigned integers which are caught by the test. An analysis of assembly code produced by LLVM 16 on amd64 and practical tests confirm that no exploitation is possible.
However, the guard code as written is misleading to readers and might trip up static analysis tools. Make sure that negative values are explicitly excluded so that it is immediately clear that EINVAL will be returned in this case.
Build tested with clang 16 and GCC 12.
Approved by: markj (mentor) MFC after: 1 week Sponsored by: The FreeBSD Foundation
show more ...
|
#
6a4616a5 |
| 06-Apr-2024 |
Jake Freeland <jfree@FreeBSD.org> |
ktrace: Record signal violations with KTR_CAPFAIL
Report the delivery of signals to processes other than self while Capsicum violation tracing with CAPFAIL_SIGNAL.
Reviewed by: markj Approved by: m
ktrace: Record signal violations with KTR_CAPFAIL
Report the delivery of signals to processes other than self while Capsicum violation tracing with CAPFAIL_SIGNAL.
Reviewed by: markj Approved by: markj (mentor) MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D40679
show more ...
|
Revision tags: release/13.3.0 |
|
#
fdafd315 |
| 24-Nov-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Automated cleanup of cdefs and other formatting
Apply the following automated changes to try to eliminate no-longer-needed sys/cdefs.h includes as well as now-empty blank lines in a row.
Remov
sys: Automated cleanup of cdefs and other formatting
Apply the following automated changes to try to eliminate no-longer-needed sys/cdefs.h includes as well as now-empty blank lines in a row.
Remove /^#if.*\n#endif.*\n#include\s+<sys/cdefs.h>.*\n/ Remove /\n+#include\s+<sys/cdefs.h>.*\n+#if.*\n#endif.*\n+/ Remove /\n+#if.*\n#endif.*\n+/ Remove /^#if.*\n#endif.*\n/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/types.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/param.h>/ Remove /\n+#include\s+<sys/cdefs.h>\n#include\s+<sys/capsicum.h>/
Sponsored by: Netflix
show more ...
|
Revision tags: release/14.0.0 |
|
#
685dc743 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c pattern
Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
#
8164032a |
| 12-May-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
reapkill: handle possible pid reuse after the pid was recorded as signalled
Nothing prevents the signalled process from exiting, and then other process among eligible for signalling to reuse the exi
reapkill: handle possible pid reuse after the pid was recorded as signalled
Nothing prevents the signalled process from exiting, and then other process among eligible for signalling to reuse the exited process pid. In this case, presence of the pid in the 'pids' unr set prevents it from getting the deserved signal.
Handle it by marking each process with the new flag P2_REAPKILLED when we are about to send the signal. If the process pid is present in the pids unr, but the struct proc is not marked with P2_REAPKILLED, we must send signal to the pid again.
The use of the flag relies on the global sapblk preventing parallel reapkills.
The pids unr must be used to clear the flags to all signalled processes.
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D40089
show more ...
|
#
77f0e198 |
| 15-Apr-2023 |
Val Packett <val@packett.cool> |
procctl: add state flags to PROC_REAP_GETPIDS reports
For a process supervisor using the reaper API to track process subtrees, it is very useful to know the state of the processes on the list.
Spon
procctl: add state flags to PROC_REAP_GETPIDS reports
For a process supervisor using the reaper API to track process subtrees, it is very useful to know the state of the processes on the list.
Sponsored by: https://www.patreon.com/valpackett Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D39585
show more ...
|
Revision tags: release/13.2.0, release/12.4.0 |
|
#
5e5675cb |
| 12-Aug-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
Remove struct proc p_singlethr member
It does not serve any purpose after we stopped doing thread_single(SINGLE_ALLPROC) from stoppable user processes.
Reviewed by: markj Tested by: pho Sponsored b
Remove struct proc p_singlethr member
It does not serve any purpose after we stopped doing thread_single(SINGLE_ALLPROC) from stoppable user processes.
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D36207
show more ...
|
#
2842ec6d |
| 12-Aug-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
REAP_KILL_PROC: kill processes in the threaded taskqueue context
There is a problem still left after the fixes to REAP_KILL_PROC. The handling of the stopping signals by sig_suspend_threads() can o
REAP_KILL_PROC: kill processes in the threaded taskqueue context
There is a problem still left after the fixes to REAP_KILL_PROC. The handling of the stopping signals by sig_suspend_threads() can occur outside the stopping process context by tdsendsignal(), and it uses mostly the same mechanism of aborting sleeps as suspension. In other words, it badly interacts with thread_single(SINGLE_ALLPROC).
But unlike single threading from the process context, we cannot wait by sleep for other single threading requests to pass, because we own spinlock(s).
Fix this by moving both the thread_single(p2, SINGLE_ALLPROC), and the signalling, to the threaded taskqueue which cannot be single-threaded itself.
Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D36207
show more ...
|
#
5c78797e |
| 12-Aug-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
reap_kill_proc_locked(): remove outdated part of the comment
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 3 days Differential revision: https://reviews.freebsd.org/D36207
|
#
15758049 |
| 16-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
reap_kill_proc(): avoid singlethreading any other process if we are exiting
This is racy because curproc process lock is not used, but allows the process to exit faster. It is userspace issue to cr
reap_kill_proc(): avoid singlethreading any other process if we are exiting
This is racy because curproc process lock is not used, but allows the process to exit faster. It is userspace issue to create such race anyway, and not fullfilling the guarantee that all reaper descendants are signalled should be fine.
In collaboration with: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
e0343eac |
| 15-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
reap_kill_subtree(): hold the reaper when entering it into the queue to handle later
We drop proctree_lock, which allows the process to exit while memoized in the list to proceed.
Reported and test
reap_kill_subtree(): hold the reaper when entering it into the queue to handle later
We drop proctree_lock, which allows the process to exit while memoized in the list to proceed.
Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
Revision tags: release/13.1.0 |
|
#
1d4abf2c |
| 09-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
reap_kill_subtree_once(): handle proctree_lock unlock in reap_kill_proc()
Recorded reaper might loose its reaper status, so we should not assert it, but check and avoid signalling if this happens.
reap_kill_subtree_once(): handle proctree_lock unlock in reap_kill_proc()
Recorded reaper might loose its reaper status, so we should not assert it, but check and avoid signalling if this happens.
Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 week Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
addf103c |
| 03-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
reap_kill_proc: do not retry on thread_single() failure
The failure means that the process does single-threading itself, which makes our action not needed.
Reported and tested by: pho Reviewed by:
reap_kill_proc: do not retry on thread_single() failure
The failure means that the process does single-threading itself, which makes our action not needed.
Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
008b2e65 |
| 30-Apr-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
Make stop_all_proc_block interruptible to avoid deadlock with parallel suspension
If we try to single-thread a process which thread entered procctl(REAP_KILL_SUBTREE), and sleeping waiting for us un
Make stop_all_proc_block interruptible to avoid deadlock with parallel suspension
If we try to single-thread a process which thread entered procctl(REAP_KILL_SUBTREE), and sleeping waiting for us unlocking stop_all_proc_blocker, we must be able to finish single-threading. This requires the sleep to be interruptible.
Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
4493a13e |
| 15-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
Do not single-thread itself when the process single-threaded some another process
Since both self single-threading and remote single-threading rely on suspending the thread doing thread_single(), it
Do not single-thread itself when the process single-threaded some another process
Since both self single-threading and remote single-threading rely on suspending the thread doing thread_single(), it cannot be mixed: thread doing thread_suspend_switch() might be subject to thread_suspend_one() and vice versa.
In collaboration with: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
d3000939 |
| 04-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
P2_WEXIT: avoid thread_single() for exiting process earlier
before the process itself does thread_single(SINGLE_EXIT). We cannot single-thread such process in ALLPROC (external) mode, and properly
P2_WEXIT: avoid thread_single() for exiting process earlier
before the process itself does thread_single(SINGLE_EXIT). We cannot single-thread such process in ALLPROC (external) mode, and properly detect and report the failure to do so due to the process becoming zombie is easier to prevent than handle.
In collaboration with: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
70978337 |
| 21-Apr-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix another race between fork(2) and PROC_REAP_KILL subtree
where we might not yet see a new child when signalling a process. Ensure that this cannot happen by stopping all reapping subtree, which e
Fix another race between fork(2) and PROC_REAP_KILL subtree
where we might not yet see a new child when signalling a process. Ensure that this cannot happen by stopping all reapping subtree, which ensures that the child is not inside a syscall, in particular fork(2).
Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D35014
show more ...
|
#
39794d80 |
| 20-Apr-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
Fix a race between fork(2) and PROC_REAP_KILL subtree
by repeating iteration over the subtree until there are no new processes to signal.
Reported and tested by: pho Reviewed by: markj Sponsored by
Fix a race between fork(2) and PROC_REAP_KILL subtree
by repeating iteration over the subtree until there are no new processes to signal.
Reported and tested by: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D35014
show more ...
|
#
d1df3473 |
| 27-Apr-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
kern_procctl: add possibility to take stop_all_proc_block() around exec
stop_allo_proc_block() must be taken before proctree_lock.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after:
kern_procctl: add possibility to take stop_all_proc_block() around exec
stop_allo_proc_block() must be taken before proctree_lock.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D35014
show more ...
|
#
54a11adb |
| 20-Apr-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
reap_kill(): split children and subtree killers into helpers
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.o
reap_kill(): split children and subtree killers into helpers
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D35014
show more ...
|
#
134529b1 |
| 25-Apr-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
reap_kill(): rename the reap variable to reaper
Suggested and reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.
reap_kill(): rename the reap variable to reaper
Suggested and reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D35014
show more ...
|