From patchwork Thu Aug 31 20:20:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joe Simmons-Talbott X-Patchwork-Id: 75091 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 3095A3858C2B for ; Thu, 31 Aug 2023 20:21:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 3095A3858C2B DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1693513312; bh=mX0w5BMjTHMna03TKDGKgb+kp0mHFMHhSHdEV39tL0A=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=V1SdAefdZlfHbxJoJJ2/HOBPEmJUojs+cs9YMaApx2fpaeGUYeBOYagbb0C5UC2OM NFeZjCJatlPWVn7sQsvnYx/a6H+Fz55gsqltCMbTMDOT6A8JpS3UONeauXru+l2YHt WUP1eO7UY6y7d3VmGh/ZE3/b8g8wMJaGPaF8PJ9Q= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id AF5D23858D20 for ; Thu, 31 Aug 2023 20:21:28 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AF5D23858D20 Received: from mail-qk1-f200.google.com (mail-qk1-f200.google.com [209.85.222.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-3-KS1Uo3bIN5aVF4GN-SkJ2w-1; Thu, 31 Aug 2023 16:21:26 -0400 X-MC-Unique: KS1Uo3bIN5aVF4GN-SkJ2w-1 Received: by mail-qk1-f200.google.com with SMTP id af79cd13be357-76e26652e6fso137457685a.2 for ; Thu, 31 Aug 2023 13:21:26 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693513286; x=1694118086; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=mX0w5BMjTHMna03TKDGKgb+kp0mHFMHhSHdEV39tL0A=; b=W3mZZfKjuEGQMahHlZLyrbKa4G+kFjlY9OAIL0RpwoN2Gm9hVMp5RG1c0HfdlPu/sA S4wUHghGg/rx32hi5K3W4OoFyDmjJ5uQ4tI3F8NzHQ7xvKJ1SgXtYhCimz3UCPQzVv+I 4L4aBEEo2rPReXtu0YBJ1ib/4cvWQXXHc47bAj5LtCza1MOykRFLvQ+p5PAHncBEXKwJ dBh+nXZznBKGsvzPyYIRrcTY4gaOqpGkQymd3eWIRzV6nIeAMsBSdvcScgfNGJhr3w4c FyA1tk1IeQt7vZUU1ZAeh2aYX5gepqxGVECsb2OsrIurU0e3B/mV5DtvH5YDOrfVy3oC K1Ig== X-Gm-Message-State: AOJu0Yyta2KGAI/wm/N2877kG8bojrqgnC2r7YjSEby8gBSjWM9LTeAQ CT8fGxVo+4elsojyupPi60jQ9xX1ekqxgD8S9XulkWBNrxayEjWJd6fYToMJTB0gY6qbl9K9RhX J7dnAye99lhBfoNYZ3YRbfQuEOKYD94n27n3f5pi7KolqzjWSrYp9baAuOK1/suh8VzMt0ggkLp zGpSjk X-Received: by 2002:a05:620a:2914:b0:76d:49b7:6ac3 with SMTP id m20-20020a05620a291400b0076d49b76ac3mr555738qkp.58.1693513285931; Thu, 31 Aug 2023 13:21:25 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFXxp/BNzngpL5yFtnoazjzuCauuVQvQoxaeb5g7cB3U1FjXh5pNIgelTSh4PGb2hYP8cYoGQ== X-Received: by 2002:a05:620a:2914:b0:76d:49b7:6ac3 with SMTP id m20-20020a05620a291400b0076d49b76ac3mr555720qkp.58.1693513285675; Thu, 31 Aug 2023 13:21:25 -0700 (PDT) Received: from oak.redhat.com (c-71-206-142-238.hsd1.va.comcast.net. [71.206.142.238]) by smtp.gmail.com with ESMTPSA id bw13-20020a05622a098d00b0040331a24f16sm885458qtb.3.2023.08.31.13.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Aug 2023 13:21:25 -0700 (PDT) To: libc-alpha@sourceware.org Subject: [PATCH v2] libc_fatal: Get rid of alloca Date: Thu, 31 Aug 2023 16:20:59 -0400 Message-ID: <20230831202122.2239619-1-josimmon@redhat.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com X-Spam-Status: No, score=-12.6 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Joe Simmons-Talbott via Libc-alpha From: Joe Simmons-Talbott Reply-To: Joe Simmons-Talbott Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" Use fixed size arrays in place of alloca to avoid potential stack overflow. Limit the number of varargs to __libc_message to 10. --- Changes to v1: * Use a fixed size array rather than scratch_buffers since we can only call async signal safe functions. sysdeps/posix/libc_fatal.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sysdeps/posix/libc_fatal.c b/sysdeps/posix/libc_fatal.c index 70edcc10c1..16929addab 100644 --- a/sysdeps/posix/libc_fatal.c +++ b/sysdeps/posix/libc_fatal.c @@ -45,6 +45,9 @@ writev_for_fatal (int fd, const struct iovec *iov, size_t niov, size_t total) } #endif +/* The maximum number of varargs allowed in a __libc_message format string */ +#define MAX_NLIST 10 + struct str_list { const char *str; @@ -58,6 +61,7 @@ __libc_message (const char *fmt, ...) { va_list ap; int fd = -1; + struct str_list _newp[MAX_NLIST]; va_start (ap, fmt); @@ -70,6 +74,7 @@ __libc_message (const char *fmt, ...) struct str_list *list = NULL; int nlist = 0; + struct iovec iov[MAX_NLIST]; const char *cp = fmt; while (*cp != '\0') @@ -100,17 +105,18 @@ __libc_message (const char *fmt, ...) cp = next; } - struct str_list *newp = alloca (sizeof (struct str_list)); + struct str_list *newp = &_newp[nlist]; newp->str = str; newp->len = len; newp->next = list; list = newp; ++nlist; + if (nlist > MAX_NLIST) + goto fail_out; } if (nlist > 0) { - struct iovec *iov = alloca (nlist * sizeof (struct iovec)); ssize_t total = 0; for (int cnt = nlist - 1; cnt >= 0; --cnt) @@ -146,6 +152,7 @@ __libc_message (const char *fmt, ...) va_end (ap); +fail_out: /* Kill the application. */ abort (); }