From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) by sourceware.org (Postfix) with ESMTPS id 10146385841B for ; Fri, 23 Feb 2024 16:36:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 10146385841B Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 10146385841B Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::102e ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708706182; cv=none; b=WT6Wq+XRAzADPl1agnD+/6jAI7IatgsNH5WWhN9Bho2uo2nNhIbIAvV8owy1bL5MCSbaC0rn8+s13W7s8t00zjv3d7LtWZ6aD2nmrE/XdzD+Z1/CEclye7YmU1ROUEN50Dv1gW+RxOopgOxAU/Std/usl/4ouAzSyx1eGpH0mXs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1708706182; c=relaxed/simple; bh=1zb8QImlQPFWW7QnEkowrRQf1H0lO8ifBlw3kdUIZqA=; h=DKIM-Signature:Message-ID:Date:MIME-Version:Subject:To:From; b=ilBqcqww25dH0JCUfbfK5K6LDND/VrdgvujlVMUsIf3WkJslV4+RTOHhutAZtvnwKw+x/lPfMGnEQu13tBF1hnhnolPKJhUEfC7PzZ+5pCQgeFNiNrCXtPr9DrqVWLodLQspAKwJxR3AIGXiZ5cSrLSMVIjn4LI+zRrtQ9FTVK0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-299dba8fd24so328052a91.2 for ; Fri, 23 Feb 2024 08:36:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1708706171; x=1709310971; darn=sourceware.org; h=content-transfer-encoding:in-reply-to:organization:from:references :cc:to:content-language:subject:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=T/Avep5RIIrOWUbdR4zzBNxXgRHOAp/0pdxZFAepAFo=; b=uzl0xAjrRazp2h8ewTpfaQqpAEp/J3lPp15PYHY02WcCIh4dZAdLuzo5i3hhNnFv7q WxWtZCseue4D2YWfBKnUW97kboNtCsCcB2aeNU6T6wpq83NAoeBUtpEYQppX//ktPKuw lDu6jDOFCp+8udQoSFP/OaFaQeG3K8VdlnckX0VuMwn1HOIgxpo2rYXgi3p5YNHlfZp1 QE4OPaldxEAAinf4uhl0iEb+dlq0VKfVqXTCAOAwukdLxfAMlsrbjmHKRNOmNWoz6RLQ KdunGifx2JEaloO2JfOI8uVNClyC04Nnp2Fw4NzJh0E0LK9O1XqD5tGE5zNi24X5eGsU ZlXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1708706171; x=1709310971; h=content-transfer-encoding:in-reply-to:organization:from:references :cc:to:content-language:subject:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=T/Avep5RIIrOWUbdR4zzBNxXgRHOAp/0pdxZFAepAFo=; b=g7lDRTJDu94+596dk52OqgJ00/GjzjM0Z/bak5WfWulTRDessYRrFxdX0+GtNOTu2v QKac5hzBcLOxg67FVdQ/srbXUz3t2fm4KYLQyVsjk0L+88VRpUFSZ8K74oWXRuAX80sN f/u9WYfTi1K9iogt/S4NmoRR9uS/39jhEfzCnxYAK0FNsq1DKo2APO9jVwoaTzgueUgP zLJ0NKUtUVftg70tI+2BOvifi7VvFkw2H6qN5M2Kd1udFH36bOG8s2+LJyHo/5Lk+7hC Um49TyDBdEBqVA5yIG20D7mncgE/6OcDxN8YAV987tPyBBDaJrZprGsrb16MLciYyBic p2zA== X-Forwarded-Encrypted: i=1; AJvYcCUhPqewNrhjSWob5cf/8IYs8GOv66ip7CQg9+pf2Mue5rBz0RVx13ZpMdcl6KQSIx0SirqCDGVLoPfhR2ZTQWYRGfwjfSIEZ2JS X-Gm-Message-State: AOJu0Yz6F1TgamcyrIsl6QSGK5b5gxVvCgsetcqfK9VdNJncY2xXoJKJ LUmOg2AKgkrJLHCoMUgB/5E2qsObb66BOHBd8rW2h2xbmdFhNqB3vUo23Sf9tes= X-Google-Smtp-Source: AGHT+IHp+NTiYfd2opjqm82B0tU57aD/gP1qmhacc/l0ANtQJDKnTiMzw6o5GtybP4scjElDNnnQpA== X-Received: by 2002:a17:90a:5607:b0:29a:88d8:c502 with SMTP id r7-20020a17090a560700b0029a88d8c502mr320448pjf.1.1708706170840; Fri, 23 Feb 2024 08:36:10 -0800 (PST) Received: from ?IPV6:2804:1b3:a7c1:3a1a:3875:1d0a:19b:ea3e? ([2804:1b3:a7c1:3a1a:3875:1d0a:19b:ea3e]) by smtp.gmail.com with ESMTPSA id sc9-20020a17090b510900b00298c633bd5fsm1694176pjb.30.2024.02.23.08.36.07 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 23 Feb 2024 08:36:09 -0800 (PST) Message-ID: Date: Fri, 23 Feb 2024 13:36:06 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2] S390: Do not clobber r7 in clone [BZ #31402] Content-Language: en-US To: Stefan Liebler , libc-alpha@sourceware.org Cc: schwab@linux-m68k.org, jakub@redhat.com References: <20240222140327.277646-1-stli@linux.ibm.com> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: <20240222140327.277646-1-stli@linux.ibm.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-12.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On 22/02/24 11:03, Stefan Liebler wrote: > Starting with commit e57d8fc97b90127de4ed3e3a9cdf663667580935 > "S390: Always use svc 0" > clone clobbers the call-saved register r7 in error case: > function or stack is NULL. > > This patch restores the saved registers also in the error case. > Furthermore the existing test misc/tst-clone is extended to check > all error cases and that clone does not clobber registers in this > error case. LGTM, thanks. > --- > sysdeps/unix/sysv/linux/s390/s390-32/clone.S | 1 + > sysdeps/unix/sysv/linux/s390/s390-64/clone.S | 1 + > sysdeps/unix/sysv/linux/tst-clone.c | 73 ++++++++++++++++---- > 3 files changed, 63 insertions(+), 12 deletions(-) > > diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S > index 4c882ef2ee..a7a863242c 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-32/clone.S > +++ b/sysdeps/unix/sysv/linux/s390/s390-32/clone.S > @@ -53,6 +53,7 @@ ENTRY(__clone) > br %r14 > error: > lhi %r2,-EINVAL > + lm %r6,%r7,24(%r15) /* Load registers. */ > j SYSCALL_ERROR_LABEL > PSEUDO_END (__clone) > > diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S > index 4eb104be71..c552a6b8de 100644 > --- a/sysdeps/unix/sysv/linux/s390/s390-64/clone.S > +++ b/sysdeps/unix/sysv/linux/s390/s390-64/clone.S > @@ -54,6 +54,7 @@ ENTRY(__clone) > br %r14 > error: > lghi %r2,-EINVAL > + lmg %r6,%r7,48(%r15) /* Restore registers. */ > jg SYSCALL_ERROR_LABEL > PSEUDO_END (__clone) > > diff --git a/sysdeps/unix/sysv/linux/tst-clone.c b/sysdeps/unix/sysv/linux/tst-clone.c > index 470676ab2b..060fdf5c66 100644 > --- a/sysdeps/unix/sysv/linux/tst-clone.c > +++ b/sysdeps/unix/sysv/linux/tst-clone.c > @@ -16,12 +16,16 @@ > License along with the GNU C Library; if not, see > . */ > > -/* BZ #2386 */ > +/* BZ #2386, BZ #31402 */ > #include > #include > #include > #include > #include > +#include /* For _STACK_GROWS_{UP,DOWN}. */ > +#include > + > +volatile unsigned v = 0xdeadbeef; > > int child_fn(void *arg) > { > @@ -30,22 +34,67 @@ int child_fn(void *arg) > } > > static int > -do_test (void) > +__attribute__((noinline)) > +do_clone (int (*fn)(void *_Nullable), void *stack) Not sure why you need _Nullable here, the rest looks ok. > { > int result; > + unsigned int a = v; > + unsigned int b = v; > + unsigned int c = v; > + unsigned int d = v; > + unsigned int e = v; > + unsigned int f = v; > + unsigned int g = v; > + unsigned int h = v; > + unsigned int i = v; > + unsigned int j = v; > + unsigned int k = v; > + unsigned int l = v; > + unsigned int m = v; > + unsigned int n = v; > + unsigned int o = v; > + > + result = clone (fn, stack, 0, NULL); > + > + /* Check that clone does not clobber call-saved registers. */ > + TEST_VERIFY (a == v && b == v && c == v && d == v && e == v && f == v > + && g == v && h == v && i == v && j == v && k == v && l == v > + && m == v && n == v && o == v); > + > + return result; > +} > + > +static void > +__attribute__((noinline)) > +do_test_single (int (*fn)(void *_Nullable), void *stack) > +{ > + printf ("%s (fn=%p, stack=%p)\n", __FUNCTION__, fn, stack); > + errno = 0; > + > + int result = do_clone (fn, stack); > + > + TEST_COMPARE (errno, EINVAL); > + TEST_COMPARE (result, -1); > +} > > - result = clone (child_fn, NULL, 0, NULL); > +static int > +do_test (void) > +{ > + char st[128 * 1024] __attribute__ ((aligned)); > + void *stack = NULL; > +#if _STACK_GROWS_DOWN > + stack = st + sizeof (st); > +#elif _STACK_GROWS_UP > + stack = st; > +#else > +# error "Define either _STACK_GROWS_DOWN or _STACK_GROWS_UP" > +#endif > > - if (errno != EINVAL || result != -1) > - { > - printf ("FAIL: clone()=%d (wanted -1) errno=%d (wanted %d)\n", > - result, errno, EINVAL); > - return 1; > - } > + do_test_single (child_fn, NULL); > + do_test_single (NULL, stack); > + do_test_single (NULL, NULL); > > - puts ("All OK"); > return 0; > } > > -#define TEST_FUNCTION do_test () > -#include "../test-skeleton.c" > +#include