From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oi1-x230.google.com (mail-oi1-x230.google.com [IPv6:2607:f8b0:4864:20::230]) by sourceware.org (Postfix) with ESMTPS id DEFF53858C33 for ; Wed, 19 Jul 2023 18:12:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DEFF53858C33 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=linaro.org Received: by mail-oi1-x230.google.com with SMTP id 5614622812f47-3a46da5cd6dso1848028b6e.0 for ; Wed, 19 Jul 2023 11:12:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1689790366; x=1690395166; h=content-transfer-encoding:in-reply-to:organization:from:references :to:content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=WB7/0OEBVZk3Fdd24V1++fy/AqlSaxw80Rp9Fraw/3k=; b=SoPwzvdoQM0O5AvnfPlnvyeFgNWqOuvKZsfS/eikDaqwZK4ZKiLSNMbFxmfvwGAlT1 tqwCg4HAwX0i7b+/+qMw4tEANBcn0iwlpnKiUDffdOmC1GHUQmf2QuiSXQpwXcfXp+Jc Qzsy5hCjlake9bY4qd7KZl2ff+TCwf2/Zx2EVsRKY6FKKwcHxESkAg5a4toP/fesi+/R 4Yp5b3ceo09FQ7VOsQHGrlCeH7/FdSashkjnVhCvwnJl4pHQvzjlXH0V+xE29nRsQklL VQXIqorFi8smDdhfCEr/W7sbqFHsPrHOokr87kBnr70AmauhrBqdMIwkgKkZ+8cROnqO Ox3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689790366; x=1690395166; h=content-transfer-encoding:in-reply-to:organization:from:references :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=WB7/0OEBVZk3Fdd24V1++fy/AqlSaxw80Rp9Fraw/3k=; b=VPWg7uJgwB6e1sIkP+e/C+G0w1Len0nHenoihHwUiXxgdzq0UvlaynXwbhti3lJ1zh 9sfVRx87Nyj/cPZWkhzGdoA5VHm46TWWHnBFc+9Xy+KVwVVh2UxcNVUXf0ECXkbPE2UI 5prjGsYZXXZvL4udfveQXiscO4TCy1aVkr9cl5I8pNKmyfb7ZogGZQUR/dwCIW/wywFc KV3peVy4nzs3vVcojDQ+iC09PwWILOlwDEZ6JqyAH6tgsafAYCld3ZSwbstOfvEOOkDG O+Ie2CNe5+Z9C+2qjiwlvoJ2WtnL1ITaOyCZT7TFR+ROCUWW0zCvT0MFYzN74hUC5i1A xPbQ== X-Gm-Message-State: ABy/qLYuSt7h6ll4Y03xDcnu92lkTF7WjZhbHfhTevkcpN49lP1UHRWi wmThQZz7RCc0kWpOvxPo0sfFGkHF+VxCBoYk3AUQww== X-Google-Smtp-Source: APBJJlG5AwR7z66YR7ZxFl5rq1qc+NtTLONHF8jH041cnuG6cVHmTjNSFdOlVk9ywRExO284k/UBhg== X-Received: by 2002:a05:6808:2224:b0:3a4:2485:85a1 with SMTP id bd36-20020a056808222400b003a4248585a1mr24833454oib.3.1689790366203; Wed, 19 Jul 2023 11:12:46 -0700 (PDT) Received: from ?IPV6:2804:1b3:a7c0:d4d2:214b:b6d7:d18d:b186? ([2804:1b3:a7c0:d4d2:214b:b6d7:d18d:b186]) by smtp.gmail.com with ESMTPSA id bj8-20020a056808198800b003a0619d78ebsm2006574oib.55.2023.07.19.11.12.44 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 19 Jul 2023 11:12:45 -0700 (PDT) Message-ID: Date: Wed, 19 Jul 2023 15:12:43 -0300 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: [PATCH] fxprintf: Get rid of alloca Content-Language: en-US To: Joe Simmons-Talbott , libc-alpha@sourceware.org References: <20230707175349.2096131-1-josimmon@redhat.com> From: Adhemerval Zanella Netto Organization: Linaro In-Reply-To: <20230707175349.2096131-1-josimmon@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,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 07/07/23 14:53, Joe Simmons-Talbott via Libc-alpha wrote: > Use a scratch_buffer rather than alloca/malloc to avoid potential stack > overflow. LGTM, thanks. Reviewed-by: Adhemerval Zanella > --- > stdio-common/fxprintf.c | 14 ++++++-------- > 1 file changed, 6 insertions(+), 8 deletions(-) > > diff --git a/stdio-common/fxprintf.c b/stdio-common/fxprintf.c > index f0ac9654ab..88501ab61f 100644 > --- a/stdio-common/fxprintf.c > +++ b/stdio-common/fxprintf.c > @@ -15,6 +15,7 @@ > License along with the GNU C Library; if not, see > . */ > > +#include > #include > #include > #include > @@ -34,20 +35,18 @@ locked_vfxprintf (FILE *fp, const char *fmt, va_list ap, > wchar_t *wfmt; > mbstate_t mbstate; > int res; > - int used_malloc = 0; > size_t len = strlen (fmt) + 1; > + struct scratch_buffer buf; > + scratch_buffer_init (&buf); > > if (__glibc_unlikely (len > SIZE_MAX / sizeof (wchar_t))) > { > __set_errno (EOVERFLOW); > return -1; > } This check is redundant, but scratch_buffer_set_array_size would return ENOMEM in this case. I guess it should not change this for now. > - if (__libc_use_alloca (len * sizeof (wchar_t))) > - wfmt = alloca (len * sizeof (wchar_t)); > - else if ((wfmt = malloc (len * sizeof (wchar_t))) == NULL) > + if (!scratch_buffer_set_array_size (&buf, sizeof (wchar_t), len)) > return -1; > - else > - used_malloc = 1; > + wfmt = buf.data; > > memset (&mbstate, 0, sizeof mbstate); > res = __mbsrtowcs (wfmt, &fmt, len, &mbstate); > @@ -55,8 +54,7 @@ locked_vfxprintf (FILE *fp, const char *fmt, va_list ap, > if (res != -1) > res = __vfwprintf_internal (fp, wfmt, ap, mode_flags); > > - if (used_malloc) > - free (wfmt); > + scratch_buffer_free (&buf); > > return res; > }