#
346835 |
|
28-Apr-2019 |
dchagin |
MFC r335515 (by chuck@):
Fix the Linux kernel version number calculation
The Linux compatibility code was converting the version number (e.g. 2.6.32) in two different ways and then comparing the results.
The linux_map_osrel() function converted MAJOR.MINOR.PATCH similar to what FreeBSD does natively. I.e. where major=v0, minor=v1, and patch=v2 v = v0 * 1000000 + v1 * 1000 + v2;
The LINUX_KERNVER() macro, on the other hand, converted the value with bit shifts. I.e. where major=a, minor=b, and patch=c v = (((a) << 16) + ((b) << 8) + (c))
The Linux kernel uses the later format via the KERNEL_VERSION() macro in include/generated/uapi/linux/version.h
Fix is to use the LINUX_KERNVER() macro in linux_map_osrel() as well as in the .trans_osrel functions.
PR: 229209
|
#
346829 |
|
28-Apr-2019 |
dchagin |
MFC r332333 (by emaste@):
linuxulator: deduplicate linux_exec_imgact_try
Previously linuxulator had three identical copies of linux_exec_imgact_try. Deduplicate before adding another arch to linuxulator.
|
#
346828 |
|
28-Apr-2019 |
dchagin |
MFC r331462 (by emaste@):
Remove redundant cast from Linuxulator SYSINITs.
|
#
346827 |
|
28-Apr-2019 |
dchagin |
MFC r331356 (by emaste@):
Share Linux errno table with libsysdecode.
|
#
346826 |
|
28-Apr-2019 |
dchagin |
MFC r331256 (by emaste@):
Make linuxulator fn declaration match definition
I accidentally swapped 'linux_fixup_elf' to 'linux_elf_fixup' in amd64's declaration (only), while bringing this change over from git and encountering a conflict.
|
#
346825 |
|
28-Apr-2019 |
dchagin |
MFC r331226 (byu emaste@):
Rename linuxulator functions with linux_ prefix
It's preferable to have a consistent prefix. This also reduces differences between the three linux*_sysvec.c files.
|
#
346824 |
|
28-Apr-2019 |
dchagin |
MFC r331208 (by emaste@):
linux*_sysvec.c: rationalize whitespace and comments
There's a fair amount of duplication between MD linuxulator files. Make indentation and comments consistent between the three versions of linux_sysvec.c to reduce diffs when comparing them.
|
#
346823 |
|
28-Apr-2019 |
dchagin |
MFC r331056: Share a single bsd-linux errno table across MD consumers
Three copies of the linuxulator linux_sysvec.c contained identical BSD to Linux errno translation tables, and future work to support other architectures will also use the same table. Move the table to a common file to be used by all. Make it 'const int' to place it in .rodata.
(Some existing Linux architectures use MD errno values, but x86 and Arm share the generic set.)
This change should introduce no functional change; a followup will add missing errno values.
MFC r331057: linux_errno.c: add newer errno values
Also introduce a static assert to ensure the list is kept up to date.
MFC r331060: Chase r331057 in libsysdecode erno table
|
#
346822 |
|
28-Apr-2019 |
dchagin |
MFC r330927 (by emaste@):
Remove stray ; at end of linux_vdso_deinstall()
|
#
346821 |
|
28-Apr-2019 |
dchagin |
MFC r330866 (by emaste@):
Use C99 boolean type for translate_osrel
Migrate to modern types before creating MD Linuxolator bits for new architectures.
|
#
346816 |
|
28-Apr-2019 |
dchagin |
MFC r329794, r329801 (by emaste@):
Correct proper nouns in the Linuxulator
- Capitalize Linux - Spell FreeBSD out in full - Address some style(9) on changed lines
|
#
346812 |
|
28-Apr-2019 |
dchagin |
MFC r328890 (by emaste@):
Linuxolator whitespace cleanup
A version of each of the MD files by necessity exists for each CPU architecture supported by the Linuxolator. Clean these up so that new architectures do not inherit whitespace issues.
Clean up shared Linuxolator files while here.
|
#
346807 |
|
28-Apr-2019 |
dchagin |
MFC r321728:
Avoid using [LINUX_]SHAREDPAGE constant directly in the vdso code. This is needed for https://reviews.freebsd.org/D11780.
|
#
338691 |
|
14-Sep-2018 |
jhb |
MFC 332454,334009,334122: Various fixes for x86 debug exceptions.
332454: Fix PSL_T inheritance on exec for x86.
The miscellaneous x86 sysent->sv_setregs() implementations tried to migrate PSL_T from the previous program to the new executed one, but they evaluated regs->tf_eflags after the whole regs structure was bzeroed. Make this functional by saving PSL_T value before zeroing.
Note that if the debugger is not attached, executing the first instruction in the new program with PSL_T set results in SIGTRAP, and since all intercepted signals are reset to default dispostion on exec(2), this means that non-debugged process gets killed immediately if PSL_T is inherited. In particular, since suid images drop P_TRACED, attempt to set PSL_T for execution of such program would kill the process.
Another issue with userspace PSL_T handling is that it is reset by trap(). It is reasonable to clear PSL_T when entering SIGTRAP handler, to allow the signal to be handled without recursion or delivery of blocked fault. But it is not reasonable to return back to the normal flow with PSL_T cleared. This is too late to change, I think.
334009: Cleanups related to debug exceptions on x86.
- Add constants for fields in DR6 and the reserved fields in DR7. Use these constants instead of magic numbers in most places that use DR6 and DR7. - Refer to T_TRCTRAP as "debug exception" rather than a "trace trap" as it is not just for trace exceptions. - Always read DR6 for debug exceptions and only clear TF in the flags register for user exceptions where DR6.BS is set. - Clear DR6 before returning from a debug exception handler as recommended by the SDM dating all the way back to the 386. This allows debuggers to determine the cause of each exception. For kernel traps, clear DR6 in the T_TRCTRAP case and pass DR6 by value to other parts of the handler (namely, user_dbreg_trap()). For user traps, wait until after trapsignal to clear DR6 so that userland debuggers can read DR6 via PT_GETDBREGS while the thread is stopped in trapsignal().
334122: x86: stop unconditionally clearing PSL_T on the trace trap.
We certainly should clear PSL_T when calling the SIGTRAP signal handler, which is already done by all x86 sendsig(9) ABI code. On the other hand, there is no obvious reason why PSL_T needs to be cleared when returning from the signal handler. For instance, Linux allows userspace to set PSL_T and keep tracing enabled for the desired period. There are userspace programs which would use PSL_T if we make it possible, for instance sbcl.
Remember if PSL_T was set by PT_STEP or PT_SETSTEP by mean of TDB_STEP flag, and only clear it when the flag is set.
|
#
337046 |
|
01-Aug-2018 |
jhb |
MFC 332782: Simplify the code to allocate stack for auxv, argv[], and environment vectors.
Remove auxarg_size as it was only used once right after a confusing assignment in each of the variants of exec_copyout_strings().
|
#
337024 |
|
01-Aug-2018 |
jhb |
MFC 330823,332335: Cosmetic cleanups to some Linuxulator files.
330823: Apply some style(9) to Linuxulator linux_sysvec.c comments
332335: linuxulator: add else case braces to reduce diffs between archs
|
#
335507 |
|
21-Jun-2018 |
kib |
MFC r335135: linuxolator/amd64: Don't mangle %r10 on return from syscall for EJUSTRETURN.
|
#
332315 |
|
09-Apr-2018 |
emaste |
MFC r331439: Sort headers in MD Linuxulator files
Bring #includes closer to style(9) and reduce differences between the (three) MD versions of linux_machdep.c and linux_sysvec.c.
|
#
332071 |
|
05-Apr-2018 |
emaste |
MFC r331442: Fixup return style(9) in amd64 linux*_sysvec.c
|
#
326810 |
|
12-Dec-2017 |
fsu |
MFC r326282, r326317: Remap ENOATTR to ENODATA in the linuxulator. In the linux ENOADATA is frequently #defined as ENOATTR. The change is required for an xattrs support implementation.
Sync bsd_to_linux_errno[] table with i386 and amd64 tables in the sys directory.
Discussed with: netchild Requested by: jhb Approved by: pfg (mentor)
|
#
322569 |
|
16-Aug-2017 |
truckman |
MFC r321899
Lower the amd64 shared page, which contains the signal trampoline, from the top of user memory to one page lower on machines with the Ryzen (AMD Family 17h) CPU. This pushes ps_strings and the stack down by one page as well. On Ryzen there is some sort of interaction between code running at the top of user memory address space and interrupts that can cause FreeBSD to either hang or silently reset. This sounds similar to the problem found with DragonFly BSD that was fixed with this commit: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/b48dd28447fc8ef62fbc963accd301557fd9ac20 but our signal trampoline location was already lower than the address that DragonFly moved their signal trampoline to. It also does not appear to be related to SMT as described here: https://www.phoronix.com/forums/forum/hardware/processors-memory/955368-some-ryzen-linux-users-are-facing-issues-with-heavy-compilation-loads?p=955498#post955498
"Hi, Matt Dillon here. Yes, I did find what I believe to be a hardware issue with Ryzen related to concurrent operations. In a nutshell, for any given hyperthread pair, if one hyperthread is in a cpu-bound loop of any kind (can be in user mode), and the other hyperthread is returning from an interrupt via IRETQ, the hyperthread issuing the IRETQ can stall indefinitely until the other hyperthread with the cpu-bound loop pauses (aka HLT until next interrupt). After this situation occurs, the system appears to destabilize. The situation does not occur if the cpu-bound loop is on a different core than the core doing the IRETQ. The %rip the IRETQ returns to (e.g. userland %rip address) matters a *LOT*. The problem occurs more often with high %rip addresses such as near the top of the user stack, which is where DragonFly's signal trampoline traditionally resides. So a user program taking a signal on one thread while another thread is cpu-bound can cause this behavior. Changing the location of the signal trampoline makes it more difficult to reproduce the problem. I have not been because the able to completely mitigate it. When a cpu-thread stalls in this manner it appears to stall INSIDE the microcode for IRETQ. It doesn't make it to the return pc, and the cpu thread cannot take any IPIs or other hardware interrupts while in this state." since the system instability has been observed on FreeBSD with SMT disabled. Interrupts to appear to play a factor since running a signal-intensive process on the first CPU core, which handles most of the interrupts on my machine, is far more likely to trigger the problem than running such a process on any other core.
Also lower sv_maxuser to prevent a malicious user from using mmap() to load and execute code in the top page of user memory that was made available when the shared page was moved down.
Make the same changes to the 64-bit Linux emulator.
PR: 219399 Reported by: nbe@renzel.net Reviewed by: kib Reviewed by: dchagin (previous version) Tested by: nbe@renzel.net (earlier version) Differential Revision: https://reviews.freebsd.org/D11780
|
#
321343 |
|
21-Jul-2017 |
kib |
MFC r319873: Move struct syscall_args syscall arguments parameters container into struct thread.
|
#
321007 |
|
15-Jul-2017 |
dchagin |
MFC r320595:
Add support for musl consumers to the Linuxulator.
PR: 213809 Submitted by: Yonas Yanfa (for amd64) Reported by: Yonas Yanfa Relnotes: yes
|
#
312874 |
|
27-Jan-2017 |
tijl |
MFC r312699:
Apply r210555 to 64 bit linux support:
The interpreter name should no longer be treated as a buffer that can be overwritten.
PR: 216346
|
#
302408 |
|
07-Jul-2016 |
gjb |
Copy head@r302406 to stable/11 as part of the 11.0-RELEASE cycle. Prune svn:mergeinfo from the new branch, as nothing has been merged here.
Additional commits post-branch will follow.
Approved by: re (implicit) Sponsored by: The FreeBSD Foundation |
#
298482 |
|
22-Apr-2016 |
pfg |
Cleanup redundant parenthesis from existing howmany()/roundup() macro uses.
|
#
298308 |
|
19-Apr-2016 |
pfg |
X86: use our nitems() macro when it is avaliable through param.h.
No functional change, only trivial cases are done in this sweep,
Discussed in: freebsd-current
|
#
297597 |
|
05-Apr-2016 |
bapt |
Add kern.features flags for linux and linux64 modules
kern.features.linux: 1 meaning linux 32 bits binaries are supported kern.features.linux64: 1 meaning linux 64 bits binaries are supported
The goal here is to help 3rd party applications (including ports) to determine if the host do support linux emulation
Reviewed by: dchagin MFC after: 1 week Relnotes: yes Differential Revision: D5830
|
#
294930 |
|
27-Jan-2016 |
jhb |
Convert ss_sp in stack_t and sigstack to void *.
POSIX requires these members to be of type void * rather than the char * inherited from 4BSD. NetBSD and OpenBSD both changed their fields to void * back in 1998. No new build failures were reported via an exp-run.
PR: 206503 (exp-run) Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D5092
|
#
294900 |
|
27-Jan-2016 |
delphij |
Implement AT_SECURE properly.
AT_SECURE auxv entry has been added to the Linux 2.5 kernel to pass a boolean flag indicating whether secure mode should be enabled. 1 means that the program has changes its credentials during the execution. Being exported AT_SECURE used by glibc issetugid() call.
Submitted by: imp, dchagin Security: FreeBSD-SA-16:10.linux Security: CVE-2016-1883
|
#
293613 |
|
09-Jan-2016 |
dchagin |
Implement vsyscall hack. Prior to 2.13 glibc uses vsyscall instead of vdso. An upcoming linux_base-c6 needs it.
Differential Revision: https://reviews.freebsd.org/D1090
Reviewed by: kib, trasz MFC after: 1 week
|
#
291420 |
|
28-Nov-2015 |
kib |
Remove sv_prepsyscall, sv_sigsize and sv_sigtbl members of the struct sysent.
sv_prepsyscall is unused.
sv_sigsize and sv_sigtbl translate signal number from the FreeBSD namespace into the ABI domain. It is only utilized on i386 for iBCS2 binaries. The issue with this approach is that signals for iBCS2 were delivered with the FreeBSD signal frame layout, which does not follow iBCS2. The same note is true for any other potential user if sv_sigtbl. In other words, if ABI needs signal number translation, it really needs custom sv_sendsig method instead.
Sponsored by: The FreeBSD Foundation
|
#
289055 |
|
08-Oct-2015 |
mjg |
linux: fix handling of out-of-bounds syscall attempts
Due to an off by one the code would read an entry past the table, as opposed to the last entry which contains the nosys handler.
Reported by: Pawel Biernacki <pawel.biernacki gmail.com>
|
#
283474 |
|
24-May-2015 |
dchagin |
Rework signal code to allow using it by other modules, like linprocfs:
1. Linux sigset always 64 bit on all platforms. In order to move Linux sigset code to the linux_common module define it as 64 bit int. Move Linux sigset manipulation routines to the MI path.
2. Move Linux signal number definitions to the MI path. In general, they are the same on all platforms except for a few signals.
3. Map Linux RT signals to the FreeBSD RT signals and hide signal conversion tables to avoid conversion errors.
4. Emulate Linux SIGPWR signal via FreeBSD SIGRTMIN signal which is outside of allowed on Linux signal numbers.
PR: 197216
|
#
283467 |
|
24-May-2015 |
dchagin |
Call nosys in case when the incorrect syscall number is specified.
Reported by: trinity
|
#
283431 |
|
24-May-2015 |
dchagin |
Add AT_RANDOM and AT_EXECFN auxiliary vector entries which are used by glibc. At list since glibc version 2.16 using AT_RANDOM is mandatory.
Differential Revision: https://reviews.freebsd.org/D1080
|
#
283424 |
|
24-May-2015 |
dchagin |
Add preliminary support for x86-64 Linux binaries.
Differential Revision: https://reviews.freebsd.org/D1076
|