From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from [87.239.111.99] (localhost [127.0.0.1]) by dev.tarantool.org (Postfix) with ESMTP id 5F51515496A3; Mon, 27 Oct 2025 11:16:25 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 5F51515496A3 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=tarantool.org; s=dev; t=1761552985; bh=vYoPlftnF7aaiU6qI/8u61nEGvZhbqUu4sG0kpBzs0E=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=jjrIlAUDtT/g0ES9IS0GOudy4+Pfkqx8dK5LM+OlgEnVSFFNlSY+lacjkGZf4opmO NpvIbC/lPeIbF5Bki+4Y54guogcm85uQPnlBCCWoaCySx/s8nAnE07O5ImKe1PQ2Ue /PjZpveCv6qw2QkB3QucQwzoJOfM5jsuMdez1zkM= Received: from send173.i.mail.ru (send173.i.mail.ru [95.163.59.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by dev.tarantool.org (Postfix) with ESMTPS id 4E7C7154969C for ; Mon, 27 Oct 2025 11:16:23 +0300 (MSK) DKIM-Filter: OpenDKIM Filter v2.11.0 dev.tarantool.org 4E7C7154969C Received: by exim-smtp-855f5997bb-p2zp8 with esmtpa (envelope-from ) id 1vDIOs-000000004R9-0cy2; Mon, 27 Oct 2025 11:16:22 +0300 Date: Mon, 27 Oct 2025 11:16:25 +0300 To: Sergey Bronnikov Cc: Sergey Bronnikov , tarantool-patches@dev.tarantool.org Message-ID: References: <43f2870a9d46587fde4b3dd31c46af0563dac455.1756287598.git.sergeyb@tarantool.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Mailru-Src: smtp X-4EC0790: 10 X-7564579A: 646B95376F6C166E X-77F55803: 4F1203BC0FB41BD9DAB542EDD08389FE5747FF4E83FD1C179EDF99FC6F4B40A8182A05F538085040E2614DD7A307D03B3DE06ABAFEAF6705CDE16DFEFEA783555242AD116B6AA1A00134F15712FB01B7 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE7F12ABE79F2AB44EAEA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F7900637AC83A81C8FD4AD23D82A6BABE6F325AC2E85FA5F3EDFCBAA7353EFBB55337566E1DD76BE5280C645F553BCC8813FA1681FF0B88BAFD4432856C1E3CA4A8E02BE389733CBF5DBD5E913377AFFFEAFD269176DF2183F8FC7C0D9442B0B5983000E8941B15DA834481FCF19DD082D7633A0EF3E4896CB9E6436389733CBF5DBD5E9D5E8D9A59859A8B652D31B9D28593E51CC7F00164DA146DA6F5DAA56C3B73B237318B6A418E8EAB86D1867E19FE14079C09775C1D3CA48CF3D321E7403792E342EB15956EA79C166A417C69337E82CC275ECD9A6C639B01B78DA827A17800CE7EE061C4D93700B7A731C566533BA786AA5CC5B56E945C8DA X-C1DE0DAB: 0D63561A33F958A504BD5811B8B759B75002B1117B3ED696277E8BCD45A32170E99897350C7C491E823CB91A9FED034534781492E4B8EEAD5E90D3DD2A5B7EAFBDAD6C7F3747799A X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF3FED46C3ACD6F73ED3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CFAFA5C1B19A9A8D743ED4A6E46A80B4A894596300F07CFE1B8554F64F919587DC30FDAC359DA24632207B9AD3C65F81D2EEFA00BE62B960584E79DEC4983AA3E232A2C404A8A054AF5F4332CA8FE04980913E6812662D5F2A5EAB5682573093F7837F15F2B5E4A70B33F2C28C22F508233FCF178C6DD14203 X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu53w8ahmwBjZKM/YPHZyZHvz5uv+WouB9+ObcCpyrx6l7KImUglyhkEat/+ysWwi0gdhEs0JGjl6ggRWTy1haxBpVdbIX1nthFXMZebaIdHP2ghjoIc/363UZI6Kf1ptIMVRN2q9QiacRuXp+yp2GZhRo= X-DA7885C5: EB77679FED8989BCF255D290C0D534F9ED6DAE17F1B6BD94E803D487190AA8FCA9E1429DAC2265535B1A4C17EAA7BC4BEF2421ABFA55128DAF83EF9164C44C7E X-Mailru-Sender: 689FA8AB762F7393DDD5FD59B456EAD2370423AD093192CB0B28B87A3B9B499ED4707138CDEB0281E49D44BB4BD9522A059A1ED8796F048DB274557F927329BE89D5A3BC2B10C37545BD1C3CC395C826B4A721A3011E896F X-Mras: Ok Subject: Re: [Tarantool-patches] [PATCH luajit 1/2] LJ_FR2: Fix stack checks in vararg calls. X-BeenThere: tarantool-patches@dev.tarantool.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Tarantool development patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Sergey Kaplun via Tarantool-patches Reply-To: Sergey Kaplun Errors-To: tarantool-patches-bounces@dev.tarantool.org Sender: "Tarantool-patches" Hi, Sergey! Thanks for the fixes! Please consider my comments below. Also, please send the next version via v2 series to simplify the review. On 23.09.25, Sergey Bronnikov wrote: > Hi, Sergey, > > thanks for review! Please see my comments below. > > Sergey > > On 9/1/25 16:07, Sergey Kaplun via Tarantool-patches wrote: > > Hi, Sergey! > > Thanks for the patch! > > Please consider my comments below. > > > > On 27.08.25, Sergey Bronnikov wrote: > >> Sergey Bronnikov: > >> * added the description and the test for the problem > >> > >> Part of tarantool/tarantool#11691 > >> --- > >> src/lj_def.h | 2 +- > >> src/lj_dispatch.c | 2 +- > >> src/vm_arm64.dasc | 1 + > >> src/vm_mips64.dasc | 1 + > >> ...048-fix-stack-checks-vararg-calls.test.lua | 56 +++++++++++++++++++ > >> 5 files changed, 60 insertions(+), 2 deletions(-) > >> create mode 100644 test/tarantool-tests/lj-1048-fix-stack-checks-vararg-calls.test.lua > >> > >> diff --git a/src/lj_def.h b/src/lj_def.h > > > > > >> diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c > >> index a44a5adf..431cb3c2 100644 > >> --- a/src/lj_dispatch.c > >> +++ b/src/lj_dispatch.c > >> @@ -453,7 +453,7 @@ static int call_init(lua_State *L, GCfunc *fn) > >> int numparams = pt->numparams; > >> int gotparams = (int)(L->top - L->base); > >> int need = pt->framesize; > >> - if ((pt->flags & PROTO_VARARG)) need += 1+gotparams; > >> + if ((pt->flags & PROTO_VARARG)) need += 1+LJ_FR2+gotparams; > > I can't see the test related to this change. Not `prober_1()` nor > > `prober_2()` lead to the assertion failure for x86_64 or aarch64 without > > it. > > Please check again. Both testcases trigger segfault on AArch64 (odroid). Double checked: | root@odroid:/home/skaplun/lj-1048-review# git diff | diff --git a/src/lj_dispatch.c b/src/lj_dispatch.c | index 431cb3c2..a44a5adf 100644 | --- a/src/lj_dispatch.c | +++ b/src/lj_dispatch.c | @@ -453,7 +453,7 @@ static int call_init(lua_State *L, GCfunc *fn) | int numparams = pt->numparams; | int gotparams = (int)(L->top - L->base); | int need = pt->framesize; | - if ((pt->flags & PROTO_VARARG)) need += 1+LJ_FR2+gotparams; | + if ((pt->flags & PROTO_VARARG)) need += 1+gotparams; | lj_state_checkstack(L, (MSize)need); | numparams -= gotparams; | return numparams >= 0 ? numparams : 0; | Test project /home/skaplun/lj-1048-review | Start 118: test/tarantool-tests/lj-1048-fix-stack-checks-vararg-calls.test.lua | 1/1 Test #118: test/tarantool-tests/lj-1048-fix-stack-checks-vararg-calls.test.lua ... Passed 3.38 sec | | 100% tests passed, 0 tests failed out of 1 | | Label Time Summary: | tarantool-tests = 3.38 sec*proc (1 test) | | Total Test time (real) = 3.42 sec > >> +-- patch. > >> +local function prober_1(...) -- luacheck: no unused > >> + pcall(pcall, pcall, pcall, pcall, pcall, pcall, pcall, pcall, pairs, {}) > >> +end > > Why do we want to use probber_1 here? Why is this different from the > > second example? Only because of the metamethods? Still need an explanation. > > > > If we want to keep it, please describe why we need at least 9 pcall-s. > As I got right, exactly this number of pcall's is needed to trigger a > stack overflow. Yes, but why 9 is minimum number of pcall's when the issue is reproduced? -- Best regards, Sergey Kaplun