From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on starla X-Spam-Level: X-Spam-Status: No, score=-1.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 Received: from nue.mailmanlists.eu (nue.mailmanlists.eu [94.130.110.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id A9DF21F4CC for ; Tue, 24 Dec 2024 19:32:48 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=pass (1024-bit key; unprotected) header.d=ml.ruby-lang.org header.i=@ml.ruby-lang.org header.a=rsa-sha256 header.s=mail header.b=X438S+q8; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.a=rsa-sha256 header.s=s1 header.b=ug/s+xW/; dkim-atps=neutral DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ml.ruby-lang.org; s=mail; t=1735068735; bh=QfimuLp8tFICnNbqrCwfOGuoiRBOuwgAFg+j9lMu6ro=; h=Date:References:To:Reply-To:Subject:List-Id:List-Archive: List-Help:List-Owner:List-Post:List-Subscribe:List-Unsubscribe: From:Cc:From; b=X438S+q8RWub84YFTt0g1W/35Yc8/wxPxVRvdcC08sexnbY5Nel5uwj/stz16Nw7Z PyHDuwL1PD6U6LTZ/ErhCLlR2Z4Y2lFqeFuU+5cPBMHeMTtrHG0owSiFUEyzCRzH1V G3QvRsai5ke6k2BQE1ndH9O2DQeWHrhVN5TX6Qf0= Received: from nue.mailmanlists.eu (localhost [IPv6:::1]) by nue.mailmanlists.eu (Postfix) with ESMTP id 6C19A45F5A for ; Tue, 24 Dec 2024 19:32:15 +0000 (UTC) Authentication-Results: nue.mailmanlists.eu; dkim=pass (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.a=rsa-sha256 header.s=s1 header.b=ug/s+xW/; dkim-atps=neutral Received: from s.wrqvtbkv.outbound-mail.sendgrid.net (s.wrqvtbkv.outbound-mail.sendgrid.net [149.72.123.24]) by nue.mailmanlists.eu (Postfix) with ESMTPS id 6F6C745F34 for ; Tue, 24 Dec 2024 19:32:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ruby-lang.org; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc:content-type:from:subject:to; s=s1; bh=QraKSYFnfTdCYsGvHNfxSP0ieOGjqUXMY6C/ZWwkCwg=; b=ug/s+xW/CtrNYwuFTzIkaqrgQMNYDwR5uTOcKFwKrbDH9yrt+cjrFNMbeheLZcfROP/n 0t7ikGHognGxF6l2Br4cuFfQHHsi1Csb4cMs5Ftqnm0QQhp1CjGBRTXRaMHm/qA6t/C+6Y 3WYitjLKbxor2bpc/TlO3ZsL7tChCmZ8HOOAF9Cqj7KyLo+6Kzd2/RC4WZmuPkhIAVU9Vl jsYnzURXToRbzOp9+nUAfm/OqRJ7vuxQdQMFlZydUCMMiyIs9eQit6jpufwy6sK/IBhKoR czJzjv2s84Cvw4MBFnqPA2H0pjup1i4cNTvZ5NS9EtV/t/jhG2SLDv5RVjeQR/wA== Received: by recvd-5f9ffdf494-9p2dl with SMTP id recvd-5f9ffdf494-9p2dl-1-676B0C3A-C 2024-12-24 19:32:10.33115815 +0000 UTC m=+3449573.623699421 Received: from herokuapp.com (unknown) by geopod-ismtpd-17 (SG) with ESMTP id IVmVMA1oQhanvJoTVa69Wg for ; Tue, 24 Dec 2024 19:32:10.298 +0000 (UTC) Date: Tue, 24 Dec 2024 19:32:10 +0000 (UTC) Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Bug X-Redmine-Issue-Id: 20934 X-Redmine-Issue-Author: wanabe X-Redmine-Issue-Priority: Normal X-Redmine-Sender: luke-gru X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-Redmine-MailingListIntegration-Message-Ids: 97076 X-SG-EID: =?us-ascii?Q?u001=2Eu2jV1cZCX3JeC9XuCMpKrPL8QYex4qqdacL0+MyIJYZ8T98+Yamf0oq9z?= =?us-ascii?Q?aSwYa9OgKS1yrZArj33QXc1KJqA8PopG+kgVPq9?= =?us-ascii?Q?cjRbGB5G3hdLXLLLY24oEhP31zl4X+7hq9vEaIP?= =?us-ascii?Q?jYu=2FKNcxCJ4GFeNUw74XVqNQLKRSGUCOqUSlZTE?= =?us-ascii?Q?+DXIYkdMrRfyJSgNqXTCflcIwd4K9H7k88OuhX6?= =?us-ascii?Q?wPnmw5iCS7lJNYIPoEHGz0=2FJYNLCgbQVWlipFYx?= =?us-ascii?Q?xh1+XyasvrEyqnzdWrIgigXgcA=3D=3D?= To: ruby-core@ml.ruby-lang.org X-Entity-ID: u001.I8uzylDtAfgbeCOeLBYDww== Message-ID-Hash: MSKVC2T726P2SHA5QM4MX4BSDQ3GFUJ5 X-Message-ID-Hash: MSKVC2T726P2SHA5QM4MX4BSDQ3GFUJ5 X-MailFrom: bounces+313651-b711-ruby-core=ml.ruby-lang.org@em5188.ruby-lang.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.9 Precedence: list Reply-To: Ruby developers Subject: [ruby-core:120399] [Ruby master Bug#20934] `UnboundMethod#bind_call` may cause "double free or corruption" with Ractor List-Id: Ruby developers Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: "luke-gru (Luke Gruber) via ruby-core" Cc: "luke-gru (Luke Gruber)" Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Issue #20934 has been updated by luke-gru (Luke Gruber). I think that's probably a good solution as long as you check `if rb_multi_ractor_p()` before locking the GVL. Also in `rb_method_definition_set`, I would do the same at the top of the function like: ```c if (rb_multi_ractor_p()) { RB_VM_LOCK_ENTER(); rb_method_definition_release(me->def); *(rb_method_definition_t **)&me->def = method_definition_addref(def, METHOD_ENTRY_COMPLEMENTED(me)); RB_VM_LOCK_LEAVE(); } else { rb_method_definition_release(me->def); *(rb_method_definition_t **)&me->def = method_definition_addref(def, METHOD_ENTRY_COMPLEMENTED(me)); } ``` This avoids locking twice in a row (once in `release`, once in `addref`). ---------------------------------------- Bug #20934: `UnboundMethod#bind_call` may cause "double free or corruption" with Ractor https://bugs.ruby-lang.org/issues/20934#change-111179 * Author: wanabe (_ wanabe) * Status: Open * ruby -v: ruby 3.4.0dev (2024-12-06T18:51:08Z :detached: 8ad6860ff7) +PRISM [x86_64-linux] * Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN ---------------------------------------- When I call `UnboundMethod#bind_call` on both main Ractor and child Ractor, probable errors can be encountered. Here is an issue reproduce script `ractor_issue.rb`. ``` def foo 10000.times do Object.instance_method(:object_id).bind_call(self) end end Ractor.new { foo } foo ``` And there are some examples of execution results. ``` $ ./miniruby -v ractor_issue.rb ruby 3.4.0dev (2024-12-06T18:51:08Z :detached: 8ad6860ff7) +PRISM [x86_64-linux] ractor_issue.rb:7: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues. double free or corruption (fasttop) Aborted (core dumped) ``` ``` $ ./miniruby -v ractor_issue.rb ruby 3.4.0dev (2024-12-06T18:51:08Z :detached: 8ad6860ff7) +PRISM [x86_64-linux] ractor_issue.rb:7: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues. # terminated with exception (report_on_exception is true): ractor_issue.rb:3:in 'UnboundMethod#bind_call': undefined method 'object_id' for main (NoMethodError) from ractor_issue.rb:3:in 'block in Object#foo' from :257:in 'Integer#times' from ractor_issue.rb:2:in 'Object#foo' from ractor_issue.rb:8:in '
' ``` Please try running it several times, as there is a probability of successful completion. -- https://bugs.ruby-lang.org/ ______________________________________________ ruby-core mailing list -- ruby-core@ml.ruby-lang.org To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/