#
b4663a8d |
| 13-Jan-2025 |
Konstantin Belousov <kib@FreeBSD.org> |
stat(2): add st_filerev
Reviewed by: asomers, markj, olce, rmacklem Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D48452
|
Revision tags: release/14.2.0, release/13.4.0 |
|
#
ddb3eb4e |
| 18-Jul-2024 |
Olivier Certner <olce@FreeBSD.org> |
New setcred() system call and associated MAC hooks
This new system call allows to set all necessary credentials of a process in one go: Effective, real and saved UIDs, effective, real and saved GIDs
New setcred() system call and associated MAC hooks
This new system call allows to set all necessary credentials of a process in one go: Effective, real and saved UIDs, effective, real and saved GIDs, supplementary groups and the MAC label. Its advantage over standard credential-setting system calls (such as setuid(), seteuid(), etc.) is that it enables MAC modules, such as MAC/do, to restrict the set of credentials some process may gain in a fine-grained manner.
Traditionally, credential changes rely on setuid binaries that call multiple credential system calls and in a specific order (setuid() must be last, so as to remain root for all other credential-setting calls, which would otherwise fail with insufficient privileges). This piecewise approach causes the process to transiently hold credentials that are neither the original nor the final ones. For the kernel to enforce that only certain transitions of credentials are allowed, either these possibly non-compliant transient states have to disappear (by setting all relevant attributes in one go), or the kernel must delay setting or checking the new credentials. Delaying setting credentials could be done, e.g., by having some mode where the standard system calls contribute to building new credentials but without committing them. It could be started and ended by a special system call. Delaying checking could mean that, e.g., the kernel only verifies the credentials transition at the next non-credential-setting system call (we just mention this possibility for completeness, but are certainly not endorsing it).
We chose the simpler approach of a new system call, as we don't expect the set of credentials one can set to change often. It has the advantages that the traditional system calls' code doesn't have to be changed and that we can establish a special MAC protocol for it, by having some cleanup function called just before returning (this is a requirement for MAC/do), without disturbing the existing ones.
The mac_cred_check_setcred() hook is passed the flags received by setcred() (including the version) and both the old and new kernel's 'struct ucred' instead of 'struct setcred' as this should simplify evolving existing hooks as the 'struct setcred' structure evolves. The mac_cred_setcred_enter() and mac_cred_setcred_exit() hooks are always called by pairs around potential calls to mac_cred_check_setcred(). They allow MAC modules to allocate/free data they may need in their mac_cred_check_setcred() hook, as the latter is called under the current process' lock, rendering sleepable allocations impossible. MAC/do is going to leverage these in a subsequent commit. A scheme where mac_cred_check_setcred() could return ERESTART was considered but is incompatible with proper composition of MAC modules.
While here, add missing includes and declarations for standalone inclusion of <sys/ucred.h> both from kernel and userspace (for the latter, it has been working thanks to <bsm/audit.h> already including <sys/types.h>).
Reviewed by: brooks Approved by: markj (mentor) Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D47618
show more ...
|
#
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.1.0 |
|
#
d0efabdf |
| 19-Mar-2024 |
Brooks Davis <brooks@FreeBSD.org> |
syscalls.master: make __sys_fcntl take an intptr_t
The (optional) third argument of fcntl is sometimes a pointer so change the type to intptr_t. Update the libc-internal defintion (actually used by
syscalls.master: make __sys_fcntl take an intptr_t
The (optional) third argument of fcntl is sometimes a pointer so change the type to intptr_t. Update the libc-internal defintion (actually used by libthr) to take a fixed intptr_t argument rather than pretending it's a variadic function. (That worked because all supported architectures pass variadic arguments as though the function was declared with those types. In CheriBSD that changes because variadic arguments are passed via a bounded array.)
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D44381
show more ...
|
#
d060b420 |
| 18-Mar-2024 |
Brooks Davis <brooks@FreeBSD.org> |
freebsd32: struct siginfo32 -> struct __siginfo32
In the next commit I will update syscalls.master to use struct __siginfo (which actually exists) so this update will be needed to make generated fil
freebsd32: struct siginfo32 -> struct __siginfo32
In the next commit I will update syscalls.master to use struct __siginfo (which actually exists) so this update will be needed to make generated files (from make sysent) align.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D44380
show more ...
|
#
694ef157 |
| 19-Mar-2024 |
Brooks Davis <brooks@FreeBSD.org> |
freebsd32: freebsd32_copyinuio takes const iovp
We only read the iovp so make it const like in copyinuio.
Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D44376
|
Revision tags: release/13.3.0 |
|
#
61cc4830 |
| 18-Jan-2024 |
Alfredo Mazzinghi <am2419@cl.cam.ac.uk> |
Abstract UIO allocation and deallocation.
Introduce the allocuio() and freeuio() functions to allocate and deallocate struct uio. This hides the actual allocator interface, so it is easier to modify
Abstract UIO allocation and deallocation.
Introduce the allocuio() and freeuio() functions to allocate and deallocate struct uio. This hides the actual allocator interface, so it is easier to modify the sub-allocation layout of struct uio and the corresponding iovec array.
Obtained from: CheriBSD Reviewed by: kib, markj MFC after: 2 weeks Sponsored by: CHaOS, EPSRC grant EP/V000292/1 Differential Revision: https://reviews.freebsd.org/D43711
show more ...
|
#
d0adc2f2 |
| 26-Dec-2023 |
Mark Johnston <markj@FreeBSD.org> |
sendfile: Explicitly ignore errors from copyout()
There is a documented bug in sendfile.2 which notes that sendfile(2) does not raise an error if it fails to copy out the number of bytes written. E
sendfile: Explicitly ignore errors from copyout()
There is a documented bug in sendfile.2 which notes that sendfile(2) does not raise an error if it fails to copy out the number of bytes written. Explicitly ignore the error from copyout() calls in preparation for annotating copyout() with __result_use_check.
Reviewed by: glebius, kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D43129
show more ...
|
#
81eb7baa |
| 26-Dec-2023 |
Mark Johnston <markj@FreeBSD.org> |
freebsd32: Report errors when copying out oldlenp in __sysctl
This matches the native implementation's behaviour.
Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.o
freebsd32: Report errors when copying out oldlenp in __sysctl
This matches the native implementation's behaviour.
Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D43101
show more ...
|
#
bd1654ce |
| 21-Dec-2023 |
Mark Johnston <markj@FreeBSD.org> |
freebsd32: Fix error handling for suword32() calls
suword32() returns -1 upon an error, not an errno value.
MFC after: 1 week
|
#
bddc7a8a |
| 18-Nov-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
Tweak compat_freebsd32_bit feature name
Mark the current name 'compat_freebsd_32bit' as legacy, and add the new name 'compat_freebsd32'. This seems to help with some make and shell uses.
Requested
Tweak compat_freebsd32_bit feature name
Mark the current name 'compat_freebsd_32bit' as legacy, and add the new name 'compat_freebsd32'. This seems to help with some make and shell uses.
Requested by: jrtc27 Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D42641
show more ...
|
#
5a2bbace |
| 16-Nov-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
FEATURE compat_freebsd_32bit: only report on arm64 when support is present
depending on hardware support for aarch32.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Diffe
FEATURE compat_freebsd_32bit: only report on arm64 when support is present
depending on hardware support for aarch32.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D42641
show more ...
|
Revision tags: release/14.0.0 |
|
#
918966a2 |
| 06-Sep-2023 |
Jake Freeland <jfree@FreeBSD.org> |
timerfd: Relocate 32-bit compat code
32-bit compatibility code is conventionally stored in sys/compat/freebsd32. Move freebsd32_timerfd_gettime() and freebsd32_timerfd_settime() from sys/kern/sys_ti
timerfd: Relocate 32-bit compat code
32-bit compatibility code is conventionally stored in sys/compat/freebsd32. Move freebsd32_timerfd_gettime() and freebsd32_timerfd_settime() from sys/kern/sys_timerfd.c to sys/compat/freebsd32/freebsd32_misc.c.
MFC After: 3 days Reviewed by: imp, markj Differential Revision; https://reviews.freebsd.org/D41640
show more ...
|
#
685dc743 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
sys: Remove $FreeBSD$: one-line .c pattern
Remove /^[\s*]*__FBSDID\("\$FreeBSD\$"\);?\s*\n/
|
#
9b65fa69 |
| 29-Jul-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
linuxolator: implement Linux' PROT_GROWSDOWN
From the Linux man page for mprotect(2): PROT_GROWSDOWN Apply the protection mode down to the beginning of a mapping that grows down
linuxolator: implement Linux' PROT_GROWSDOWN
From the Linux man page for mprotect(2): PROT_GROWSDOWN Apply the protection mode down to the beginning of a mapping that grows downward (which should be a stack segment or a segment mapped with the MAP_GROWSDOWN flag set).
Reported by: dchagin Reviewed by: alc, markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D41099
show more ...
|
#
4d846d26 |
| 10-May-2023 |
Warner Losh <imp@FreeBSD.org> |
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of BSD-2-Clause.
Discussed with: pfg MFC After: 3 days Sponsored by: Netflix
show more ...
|
#
cb858340 |
| 28-Apr-2023 |
Dmitry Chagin <dchagin@FreeBSD.org> |
linux(4): Add a dedicated statat() implementation
Get rid of calling Linux stat translation hook and specific to Linux handling of non-vnode dirfd from kern_statat(),
Reviewed by: kib, mjg Differe
linux(4): Add a dedicated statat() implementation
Get rid of calling Linux stat translation hook and specific to Linux handling of non-vnode dirfd from kern_statat(),
Reviewed by: kib, mjg Differential revision: https://reviews.freebsd.org/D35474
show more ...
|
Revision tags: release/13.2.0 |
|
#
140ceb5d |
| 30-Nov-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
ptrace(2): add PT_SC_REMOTE remote syscall request
Reviewed by: markj Discussed with: jhb Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D3
ptrace(2): add PT_SC_REMOTE remote syscall request
Reviewed by: markj Discussed with: jhb Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D37590
show more ...
|
#
f081a291 |
| 01-Dec-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
compat32: move struct ptrace_sc_ret32 definition from .c to .h
Reviewed by: markj Sponsoreed by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D37590
|
Revision tags: release/12.4.0 |
|
#
eafafebe |
| 23-Nov-2022 |
Ed Maste <emaste@FreeBSD.org> |
compat32: retire now-unused MIPS support
This reverts commit a6d20bbaa2f4bb3684d2c396ef1f1411c8fb8499.
|
#
7b673a2c |
| 15-Sep-2022 |
Jessica Clarke <jrtc27@FreeBSD.org> |
freebsd32: Make sendmsg match native ABI for unpadded final control message
The API says that CMSG_SPACE should be used for msg_controllen, but in practice the native ABI allows you to only use CMSG
freebsd32: Make sendmsg match native ABI for unpadded final control message
The API says that CMSG_SPACE should be used for msg_controllen, but in practice the native ABI allows you to only use CMSG_LEN for the final (typically only) control message, and real-world software does this, including Wayland. For freebsd32, this is in practice mostly harmless, since control messages are generally used to carry file descriptors, which are already 4 bytes in size and thus no padding is needed, but they can carry other quantities that may not result in an aligned length. This was discovered after CheriBSD's freebsd64 equivalent was updated to match the freebsd32 implementation, as that uses 8 byte alignment which does break the file descriptor use case, and thus Wayland.
This used to be addressed by aligning buflen before the first iteration, but that allowed unwanted invalid inputs and was lost in 1b1428dcc82b, with no safer equivalent put in its place.
Reviewed by: brooks, kib, markj Obtained from: CheriBSD Fixes: 1b1428dcc82b ("Fix a TOCTOU vulnerability in freebsd32_copyin_control().") MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D36554
show more ...
|
#
c46697b9 |
| 24-Aug-2022 |
Brooks Davis <brooks@FreeBSD.org> |
freebsd32_sendmsg: fix control message ABI
When a freebsd32 caller uses all or most allowed space for control messages (MCLBYTES == 2K) then the message may no longer fit when the messages are padde
freebsd32_sendmsg: fix control message ABI
When a freebsd32 caller uses all or most allowed space for control messages (MCLBYTES == 2K) then the message may no longer fit when the messages are padded for 64-bit alignment. Historically we've just shrugged and said there is no ABI guarantee. We ran into this on CheriBSD where a capsicumized 64-bit nm would fail when called with more than 64 files.
Fix this by not gratutiously capping size of mbuf data we'll allocate to MCLBYTES and let m_get2 allocate up to MJUMPAGESIZE (4K or larger). Instead of hard-coding a length check, let m_get2 do it and check for a NULL return.
Reviewed by: markj, jhb, emaste Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D36322
show more ...
|
#
361971fb |
| 02-Jun-2022 |
Kornel Dulęba <kd@FreeBSD.org> |
Rework how shared page related data is stored
Store the shared page address in struct vmspace. Also instead of storing absolute addresses of various shared page segments save their offsets with resp
Rework how shared page related data is stored
Store the shared page address in struct vmspace. Also instead of storing absolute addresses of various shared page segments save their offsets with respect to the shared page address. This will be more useful when the shared page address is randomized.
Approved by: mw(mentor) Sponsored by: Stormshield Obtained from: Semihalf Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D35393
show more ...
|
#
d46174cd |
| 28-May-2022 |
Dmitry Chagin <dchagin@FreeBSD.org> |
Finish cpuset_getaffinity() after f35093f8
Split cpuset_getaffinity() into a two counterparts, where the user_cpuset_getaffinity() is intended to operate on the cpuset_t from user va, while kern_cpu
Finish cpuset_getaffinity() after f35093f8
Split cpuset_getaffinity() into a two counterparts, where the user_cpuset_getaffinity() is intended to operate on the cpuset_t from user va, while kern_cpuset_getaffinity() expects the cpuset from kernel va. Accordingly, the code that clears the high bits is moved to the user_cpuset_getaffinity(). Linux sched_getaffinity() syscall returns the size of set copied to the user-space and then glibc wrapper clears the high bits.
MFC after: 2 weeks
show more ...
|
#
4a3e5133 |
| 20-May-2022 |
Mark Johnston <markj@FreeBSD.org> |
cpuset: Fix the KASAN and KMSAN builds
Rename the "copyin" and "copyout" fields of struct cpuset_copy_cb to something less generic, since sanitizers define interceptors for copyin() and copyout() us
cpuset: Fix the KASAN and KMSAN builds
Rename the "copyin" and "copyout" fields of struct cpuset_copy_cb to something less generic, since sanitizers define interceptors for copyin() and copyout() using #define.
Reported by: syzbot+2db5d644097fc698fb6f@syzkaller.appspotmail.com Fixes: 47a57144af25 ("cpuset: Byte swap cpuset for compat32 on big endian architectures") Sponsored by: The FreeBSD Foundation
show more ...
|