#
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 ...
|
#
cc29f221 |
| 17-Aug-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
ksiginfo_alloc(): change to directly take M_WAITOK/NOWAIT flags
Also style, and remove unneeded cast.
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Diffe
ksiginfo_alloc(): change to directly take M_WAITOK/NOWAIT flags
Also style, and remove unneeded cast.
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D36207
show more ...
|
#
c6d31b83 |
| 18-Jul-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
AST: rework
Make most AST handlers dynamically registered. This allows to have subsystem-specific handler source located in the subsystem files, instead of making subr_trap.c aware of it. For inst
AST: rework
Make most AST handlers dynamically registered. This allows to have subsystem-specific handler source located in the subsystem files, instead of making subr_trap.c aware of it. For instance, signal delivery code on return to userspace is now moved to kern_sig.c.
Also, it allows to have some handlers designated as the cleanup (kclear) type, which are called both at AST and on thread/process exit. For instance, ast(), exit1(), and NFS server no longer need to be aware about UFS softdep processing.
The dynamic registration also allows third-party modules to register AST handlers if needed. There is one caveat with loadable modules: the code does not make any effort to ensure that the module is not unloaded before all threads processed through AST handler in it. In fact, this is already present behavior for hwpmc.ko and ufs.ko. I do not think it is worth the efforts and the runtime overhead to try to fix it.
Reviewed by: markj Tested by: emaste (arm64), pho Discussed with: jhb Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D35888
show more ...
|
#
d7814015 |
| 14-Jun-2022 |
Cy Schubert <cy@FreeBSD.org> |
kern_thread.c: Fix i386 build
Chase 4493a13e3bfbbdf8488993843281ec688057ee0f by updating static assertions of struct proc.
|
#
2d5ef216 |
| 09-Jun-2022 |
Mark Johnston <markj@FreeBSD.org> |
thread_single_end(): consistently maintain p_boundary_count for ALLPROC mode
Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 week Differential revision: https://reviews.freebsd.org/
thread_single_end(): consistently maintain p_boundary_count for ALLPROC mode
Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 week Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
1b4701fe |
| 08-Jun-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
thread_unsuspend(): do not unuspend the suspended leader thread doing SINGLE_ALLPROC
markj wrote: tdsendsignal() may unsuspend a target thread. I think there is at least one bug there: suppose threa
thread_unsuspend(): do not unuspend the suspended leader thread doing SINGLE_ALLPROC
markj wrote: tdsendsignal() may unsuspend a target thread. I think there is at least one bug there: suppose thread T is suspended in thread_single(SINGLE_ALLPROC) when trying to kill another process with REAP_KILL. Suppose a different thread sends SIGKILL to T->td_proc. Then, tdsendsignal() calls thread_unsuspend(T, T->td_proc). thread_unsuspend() incorrectly decrements T->td_proc->p_suspcount to -1.
Later, when T->td_proc exits, it will wait forever in thread_single(SINGLE_EXIT) since T->td_proc->p_suspcount never reaches 1.
Since the thread suspension is bounded by time needed to do thread_single(), skipping the thread_unsuspend_one() call there should not affect signal delivery if this thread is selected as target.
Reported by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebsd.org/D35310
show more ...
|
#
b9009b17 |
| 12-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
thread_single(): remove already checked conditional expression
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential revision: https://reviews.freebs
thread_single(): remove already checked conditional expression
Reviewed by: markj Tested by: pho 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 ...
|
Revision tags: release/13.1.0 |
|
#
dd883e9a |
| 11-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
weed_inhib(): correct the condition to re-suspend a thread
suspended for SINGLE_ALLPROC mode. There is no need to check for boundary state. It is only required to see that the suspension comes fro
weed_inhib(): correct the condition to re-suspend a thread
suspended for SINGLE_ALLPROC mode. There is no need to check for boundary state. It is only required to see that the suspension comes from the ALLPROC mode.
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 ...
|
#
b9893b35 |
| 01-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
weed_inhib(): do not double-suspend already suspended thread if the loop reiterates
In collaboration with: pho Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 2 weeks Differential
weed_inhib(): do not double-suspend already suspended thread if the loop reiterates
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 ...
|
#
d7a9e6e7 |
| 03-May-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
thread_single: wait for P_STOPPED_SINGLE to pass
to avoid ALLPROC mode to try to race with any other single-threading mode.
In collaboration with: pho Reviewed by: markj Sponsored by: The FreeBSD F
thread_single: wait for P_STOPPED_SINGLE to pass
to avoid ALLPROC mode to try to race with any other single-threading mode.
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 ...
|
#
29ee49f6 |
| 12-Feb-2022 |
Mateusz Guzik <mjg@FreeBSD.org> |
thread: remove dead store from thread_cow_update
|
#
32114b63 |
| 01-Feb-2022 |
Mateusz Guzik <mjg@FreeBSD.org> |
Add PROC_COW_CHANGECOUNT and thread_cow_synced
Combined they can be used to avoid a proc lock/unlock cycle in the syscall handler for curthread, see upcoming examples.
|
#
8a0cb04d |
| 01-Feb-2022 |
Mateusz Guzik <mjg@FreeBSD.org> |
Add lim_cowsync, similar to crcowsync
|
Revision tags: release/12.3.0 |
|
#
4d675b80 |
| 28-Oct-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
i386: fix struct proc layout asserts after 351d5f7fc5161ede
Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
#
351d5f7f |
| 23-Oct-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
exec: store parent directory and hardlink name of the binary in struct proc
While doing it, also move all the code to resolve pathnames and obtain text vp and dvp, into single place. Besides simpl
exec: store parent directory and hardlink name of the binary in struct proc
While doing it, also move all the code to resolve pathnames and obtain text vp and dvp, into single place. Besides simplifying the code, it avoids spurious vnode relocks and validates the explanation why a transient text reference on the script vnode is not harmful.
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D32611
show more ...
|
#
bd9e0f5d |
| 15-Sep-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
amd64: eliminate td_md.md_fpu_scratch
For signal send, copyout from the user FPU save area directly.
For sigreturn, we are in sleepable context and can do temporal allocation of the transient save
amd64: eliminate td_md.md_fpu_scratch
For signal send, copyout from the user FPU save area directly.
For sigreturn, we are in sleepable context and can do temporal allocation of the transient save area. We cannot copying from userspace directly to user save area because XSAVE state needs to be validated, also partial copyins can corrupt it.
Requested by: jhb Reviewed by: jhb, markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D31954
show more ...
|
#
df8dd602 |
| 13-Sep-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
amd64: stop using top of the thread' kernel stack for FPU user save area
Instead do one more allocation at the thread creation time. This frees a lot of space on the stack.
Also do not use alloca(
amd64: stop using top of the thread' kernel stack for FPU user save area
Instead do one more allocation at the thread creation time. This frees a lot of space on the stack.
Also do not use alloca() for temporal storage in signal delivery sendsig() function and signal return syscall sys_sigreturn(). This saves equal amount of space, again by the cost of one more allocation at the thread creation time.
A useful experiment now would be to reduce KSTACK_PAGES.
Reviewed by: jhb, markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D31954
show more ...
|
#
f575573c |
| 15-Sep-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
Remove PT_GET_SC_ARGS_ALL
Reimplement bdf0f24bb16d556a5b by checking for the caller' ABI in the implementation of PT_GET_SC_ARGS, and copying out everything if it is Linuxolator.
Also fix a minor i
Remove PT_GET_SC_ARGS_ALL
Reimplement bdf0f24bb16d556a5b by checking for the caller' ABI in the implementation of PT_GET_SC_ARGS, and copying out everything if it is Linuxolator.
Also fix a minor information leak: if PT_GET_SC_ARGS_ALL is done on the thread reused after other process, it allows to read some number of that thread last syscall arguments. Clear td_sa.args in thread_alloc().
Reviewed by: jhb Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D31968
show more ...
|
#
5dda15ad |
| 11-Aug-2021 |
Mark Johnston <markj@FreeBSD.org> |
kern: Ensure that thread-local KMSAN state is available
Sponsored by: The FreeBSD Foundation
|
#
a422084a |
| 10-Aug-2021 |
Mark Johnston <markj@FreeBSD.org> |
Add the KMSAN runtime
KMSAN enables the use of LLVM's MemorySanitizer in the kernel. This enables precise detection of uses of uninitialized memory. As with KASAN, this feature has substantial run
Add the KMSAN runtime
KMSAN enables the use of LLVM's MemorySanitizer in the kernel. This enables precise detection of uses of uninitialized memory. As with KASAN, this feature has substantial runtime overhead and is intended to be used as part of some automated testing regime.
The runtime maintains a pair of shadow maps. One is used to track the state of memory in the kernel map at bit-granularity: a bit in the kernel map is initialized when the corresponding shadow bit is clear, and is uninitialized otherwise. The second shadow map stores information about the origin of uninitialized regions of the kernel map, simplifying debugging.
KMSAN relies on being able to intercept certain functions which cannot be instrumented by the compiler. KMSAN thus implements interceptors which manually update shadow state and in some cases explicitly check for uninitialized bytes. For instance, all calls to copyout() are subject to such checks.
The runtime exports several functions which can be used to verify the shadow map for a given buffer. Helpers provide the same functionality for a few structures commonly used for I/O, such as CAM CCBs, BIOs and mbufs. These are handy when debugging a KMSAN report whose proximate and root causes are far away from each other.
Obtained from: NetBSD Sponsored by: The FreeBSD Foundation
show more ...
|
#
af29f399 |
| 29-Jul-2021 |
Dmitry Chagin <dchagin@FreeBSD.org> |
umtx: Split umtx.h on two counterparts.
To prevent umtx.h polluting by future changes split it on two headers: umtx.h - ABI header for userspace; umtxvar.h - the kernel staff.
While here fix umtx_k
umtx: Split umtx.h on two counterparts.
To prevent umtx.h polluting by future changes split it on two headers: umtx.h - ABI header for userspace; umtxvar.h - the kernel staff.
While here fix umtx_key_match style.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D31248 MFC after: 2 weeks
show more ...
|
#
cf98bc28 |
| 10-Jul-2021 |
David Chisnall <theraven@FreeBSD.org> |
Pass the syscall number to capsicum permission-denied signals
The syscall number is stored in the same register as the syscall return on amd64 (and possibly other architectures) and so it is impossi
Pass the syscall number to capsicum permission-denied signals
The syscall number is stored in the same register as the syscall return on amd64 (and possibly other architectures) and so it is impossible to recover in the signal handler after the call has returned. This small tweak delivers it in the `si_value` field of the signal, which is sufficient to catch capability violations and emulate them with a call to a more-privileged process in the signal handler.
This reapplies 3a522ba1bc852c3d4660a4fa32e4a94999d09a47 with a fix for the static assertion failure on i386.
Approved by: markj (mentor)
Reviewed by: kib, bcr (manpages)
Differential Revision: https://reviews.freebsd.org/D29185
show more ...
|
#
5d9f7901 |
| 29-Jun-2021 |
Dmitry Chagin <dchagin@FreeBSD.org> |
Eliminate p_elf_machine from struct proc.
Instead of p_elf_machine use machine member of the Elf_Brandinfo which is now cached in the struct proc at p_elf_brandinfo member.
Note to MFC: D30918, KBI
Eliminate p_elf_machine from struct proc.
Instead of p_elf_machine use machine member of the Elf_Brandinfo which is now cached in the struct proc at p_elf_brandinfo member.
Note to MFC: D30918, KBI
Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D30926 MFC after: 2 weeks
show more ...
|
#
615f22b2 |
| 29-Jun-2021 |
Dmitry Chagin <dchagin@FreeBSD.org> |
Add a link to the Elf_Brandinfo into the struc proc.
To allow the ABI to make a dicision based on the Brandinfo add a link to the Elf_Brandinfo into the struct proc. Add a note that the high 8 bits
Add a link to the Elf_Brandinfo into the struc proc.
To allow the ABI to make a dicision based on the Brandinfo add a link to the Elf_Brandinfo into the struct proc. Add a note that the high 8 bits of Elf_Brandinfo flags is private to the ABI.
Note to MFC: it breaks KBI.
Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D30918 MFC after: 2 weeks
show more ...
|