NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: kern/59608: compat_linux should ignore LINUX_CLONE_SYSVSEM and handle stack grows down
hi,
resending the patch, just in case.... without it, one cannot have a recent java running:
nb# /emul/linux/jdk-26/bin/java
[0.021s][warning][os,thread] Failed to start thread "VM Periodic Task Thread" - pthread_create failed (EINVAL) for attributes: stacksize: 1024k, guardsize: 4k, detached.
[0.083s][warning][os,thread] Failed to start thread "VM Thread" - pthread_create failed (EINVAL) for attributes: stacksize: 1024k, guardsize: 4k, detached.
Error occurred during initialization of VM
Cannot create VM thread. Out of system resources.
nb#
steps to reproduce:
- have the latest netbsd-11-beta up and running
- extract a rootfs (i used https://deb.debian.org/debian/dists/sid/main/installer-amd64/current/images/cdrom/initrd.gz ) to /emul/linux
- extract the latest jvm (i used https://download.java.net/java/early_access/jdk26/14/GPL/openjdk-26-ea+14_linux-x64_bin.tar.gz ) there
so please merge to have this fixed....
all the best,
csaba
On 8/28/25 17:15, mc36 wrote:
The following reply was made to PR kern/59608; it has been noted by GNATS.
From: mc36 <csmate%nop.hu@localhost>
To: gnats-bugs%netbsd.org@localhost, mc36%freemail.hu@localhost, netbsd-bugs%netbsd.org@localhost,
kern-bug-people%netbsd.org@localhost
Cc:
Subject: Re: kern/59608: compat_linux should ignore LINUX_CLONE_SYSVSEM and
assume stack grows down
Date: Thu, 28 Aug 2025 17:05:00 +0200
This is a multi-part message in MIME format.
--------------pmG9mb0CegYxhSB01l81wBsR
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
hi,
just a quick up on this, as maybe i should clarified that glibc blindly uses the
clone_sysvsem: https://codebrowser.dev/glibc/glibc/nptl/pthread_create.c.html#279
and, since there is a clone3 syscall now, that returns einval because of the flag,
https://codebrowser.dev/glibc/glibc/sysdeps/unix/sysv/linux/clone-internal.c.html#47
so the fallback never reaches, rendering multithreading unusable in binary emulation...
the (updated, reattached) patch addresses the flag to slip through the checks,
and later gets ignored, and then points the stack pointer to the proper location,
restoring the pthread_create functionality... applying the patch to the 11-beta
(and seemingly 10-daily also needs this) passes the simple test code i sent earlier.
awaiting your feedback on merging if you find it appropriate... :)
ps: this time i added the ifdef to check the stack-grows-up/down behavior....
all the best,
csaba
On 8/25/25 21:20, gnats-admin%netbsd.org@localhost wrote:
> Thank you very much for your problem report.
> It has the internal identification `kern/59608'.
> The individual assigned to look at your
> report is: kern-bug-people.
>
>> Category: kern
>> Responsible: kern-bug-people
>> Synopsis: compat_linux should ignore LINUX_CLONE_SYSVSEM and assume stack grows down
>> Arrival-Date: Mon Aug 25 19:20:00 +0000 2025
>
--------------pmG9mb0CegYxhSB01l81wBsR
Content-Type: text/x-patch; charset=UTF-8; name="netbsd-clone3.patch"
Content-Disposition: attachment; filename="netbsd-clone3.patch"
Content-Transfer-Encoding: base64
LS0tIHNyYy5iYWQvc3lzL2NvbXBhdC9saW51eC9jb21tb24vbGludXhfc2NoZWQuaAkyMDI0
LTA5LTI4IDIxOjM1OjU2LjAwMDAwMDAwMCArMDIwMAorKysgc3JjLm9rL3N5cy9jb21wYXQv
bGludXgvY29tbW9uL2xpbnV4X3NjaGVkLmgJMjAyNS0wOC0yNSAyMDo0ODoxMC41MzExMTU3
MzggKzAyMDAKQEAgLTg1LDcgKzg1LDcgQEAKICAgICBMSU5VWF9DTE9ORV9WTSB8IExJTlVY
X0NMT05FX0ZTIHwgTElOVVhfQ0xPTkVfRklMRVMgfCBcCiAgICAgTElOVVhfQ0xPTkVfU0lH
SEFORCB8IExJTlVYX0NMT05FX1RIUkVBRCB8IExJTlVYX0NMT05FX1ZGT1JLIHwgXAogICAg
IExJTlVYX0NMT05FX1BBUkVOVF9TRVRUSUQgfCBMSU5VWF9DTE9ORV9DSElMRF9DTEVBUlRJ
RCB8IFwKLSAgICBMSU5VWF9DTE9ORV9DSElMRF9TRVRUSUQgfCBMSU5VWF9DTE9ORV9TRVRU
TFMpCisgICAgTElOVVhfQ0xPTkVfQ0hJTERfU0VUVElEIHwgTElOVVhfQ0xPTkVfU0VUVExT
IHwgTElOVVhfQ0xPTkVfU1lTVlNFTSkKIAogI2RlZmluZSBMSU5VWF9DTE9ORV9VTklNUExF
TUVOVEVEX0ZMQUdTICggXAogICAgIExJTlVYX0NMT05FX05FV05TIHwgTElOVVhfQ0xPTkVf
TkVXVVRTIHwgTElOVVhfQ0xPTkVfTkVXSVBDIHwgXAotLS0gc3JjLmJhZC9zeXMvY29tcGF0
L2xpbnV4L2NvbW1vbi9saW51eF9zY2hlZC5jCTIwMjQtMTAtMDMgMTQ6NTY6NDkuMDAwMDAw
MDAwICswMjAwCisrKyBzcmMub2svc3lzL2NvbXBhdC9saW51eC9jb21tb24vbGludXhfc2No
ZWQuYwkyMDI1LTA4LTI3IDA5OjAzOjU2LjU3MTMzODI4NSArMDIwMApAQCAtMjMwLDcgKzIz
MCwxMSBAQAogICAgLy8gWFhYOiBjbG9uZTMgaGFzIHN0YWNrc2l6ZSwgaW5zdGVhZCBpbXBs
ZW1lbnQgY2xvbmUgYXMgYSBjbG9uZTMKICAgIC8vIHdyYXBwZXIuCiAgICBTQ0FSRygmY2xv
bmVfYXJncywgZmxhZ3MpID0gZmxhZ3M7CisjaWZkZWYgX19NQUNISU5FX1NUQUNLX0dST1dT
X1VQCiAgICBTQ0FSRygmY2xvbmVfYXJncywgc3RhY2spID0gKHZvaWQgKikodWludHB0cl90
KWNsX2FyZ3Muc3RhY2s7CisjZWxzZQorCVNDQVJHKCZjbG9uZV9hcmdzLCBzdGFjaykgPSAo
dm9pZCAqKSgodWludHB0cl90KWNsX2FyZ3Muc3RhY2sgKyAodWludHB0cl90KWNsX2FyZ3Mu
c3RhY2tfc2l6ZSk7CisjZW5kaWYKICAgIFNDQVJHKCZjbG9uZV9hcmdzLCBwYXJlbnRfdGlk
cHRyKSA9CiAgICAgICAgKHZvaWQgKikoaW50cHRyX3QpY2xfYXJncy5wYXJlbnRfdGlkOwog
ICAgU0NBUkcoJmNsb25lX2FyZ3MsIHRscykgPQo=
--------------pmG9mb0CegYxhSB01l81wBsR--
--- src.bad/sys/compat/linux/common/linux_sched.h 2024-09-28 21:35:56.000000000 +0200
+++ src.ok/sys/compat/linux/common/linux_sched.h 2025-08-25 20:48:10.531115738 +0200
@@ -85,7 +85,7 @@
LINUX_CLONE_VM | LINUX_CLONE_FS | LINUX_CLONE_FILES | \
LINUX_CLONE_SIGHAND | LINUX_CLONE_THREAD | LINUX_CLONE_VFORK | \
LINUX_CLONE_PARENT_SETTID | LINUX_CLONE_CHILD_CLEARTID | \
- LINUX_CLONE_CHILD_SETTID | LINUX_CLONE_SETTLS)
+ LINUX_CLONE_CHILD_SETTID | LINUX_CLONE_SETTLS | LINUX_CLONE_SYSVSEM)
#define LINUX_CLONE_UNIMPLEMENTED_FLAGS ( \
LINUX_CLONE_NEWNS | LINUX_CLONE_NEWUTS | LINUX_CLONE_NEWIPC | \
--- src.bad/sys/compat/linux/common/linux_sched.c 2024-10-03 14:56:49.000000000 +0200
+++ src.ok/sys/compat/linux/common/linux_sched.c 2025-09-11 08:10:27.302327397 +0200
@@ -230,7 +230,11 @@
// XXX: clone3 has stacksize, instead implement clone as a clone3
// wrapper.
SCARG(&clone_args, flags) = flags;
+#ifdef __MACHINE_STACK_GROWS_UP
SCARG(&clone_args, stack) = (void *)(uintptr_t)cl_args.stack;
+#else
+ SCARG(&clone_args, stack) = (void *)((uintptr_t)cl_args.stack + (uintptr_t)cl_args.stack_size);
+#endif
SCARG(&clone_args, parent_tidptr) =
(void *)(intptr_t)cl_args.parent_tid;
SCARG(&clone_args, tls) =
Home |
Main Index |
Thread Index |
Old Index