Date: Mon, 03 Jun 2024 16:11:15 +0000 From: bugzilla-noreply@freebsd.org To: bugs@FreeBSD.org Subject: [Bug 279501] linuxulator: amd64 Global Descriptor Table ABI incompatibility Message-ID: <bug-279501-227@https.bugs.freebsd.org/bugzilla/>
next in thread | raw e-mail | index | archive | help
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=3D279501 Bug ID: 279501 Summary: linuxulator: amd64 Global Descriptor Table ABI incompatibility Product: Base System Version: Unspecified Hardware: amd64 OS: Any Status: New Severity: Affects Only Me Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: theron.tarigo@gmail.com Created attachment 251198 --> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=3D251198&action= =3Dedit Minimal test of executing 32bit code from 64bit process On amd64, a program may jump between 32bit and 64bit code using far returns= to set the code segment register. The mechanism is OS-dependent since it depe= nds on the layout of the Global Descriptor Table initialized by the kernel. It= is used for example for a 64bit program to utilize 32bit assembly libraries or= for a 32bit compatibility layer implemented using 64bit libraries as with WINE's WOW64. Currently this mechanism is broken in the linux compatibility layer: whereas the program expects a Linux GDT, it is the FreeBSD GDT in effect. Also, Li= nux program code reading the cs register gets different results than expected: = 0x23 vs 0x33 for 32bit, 0x33 vs 0x43 for 64bit. $ yasm -fbin -o test testgdt.asm produces a FreeBSD executable which writes "A", then writes "B", then exits. $ yasm -fbin -o test testgdt.asm -DLINUX -DLINUX_GDT produces a Linux executable with the expected result only when run on Linux x86_64. On FreeBSD it writes "A" before dying with a bus error. $ yasm -fbin -o test testgdt.asm -DLINUX produces an executable which writes the "expected result" only when run on FreeBSD amd64 with linux compatibility. On Linux it writes "A" before dying with a segfault. --=20 You are receiving this mail because: You are the assignee for the bug.=
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?bug-279501-227>