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