From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1791) id C5962385700F; Thu, 1 Jun 2023 17:49:14 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org C5962385700F DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1685641754; bh=uUKKfxyBylK5VfNOPCF07V7lH1jvMRLoBBiC1WQfaOE=; h=From:To:Subject:Date:From; b=ppewkVpx1v9fI/9eMux5AVMKF/fuZI5B2oItl5yOc0RBczY24fhcIxoumdFNtQN+M I20oxtm6Ts1K7z4Eq/8VbCiWOzFzSFoJYD4vHV2jrhMbxsetl8OlZ2jzsaHfmclWuL 2hcwufl+Sy5zmgla1VXt/saV+LkgLTD0FXfLAGc8= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Adhemerval Zanella To: glibc-cvs@sourceware.org Subject: [glibc] getipv4sourcefilter: Get rid of alloca X-Act-Checkin: glibc X-Git-Author: Joe Simmons-Talbott X-Git-Refname: refs/heads/master X-Git-Oldrev: d1eaab5a7932cda190cbbfa657c684059b141c19 X-Git-Newrev: 884012db2046fce17bea0f35210ee424cc60ae06 Message-Id: <20230601174914.C5962385700F@sourceware.org> Date: Thu, 1 Jun 2023 17:49:14 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=884012db2046fce17bea0f35210ee424cc60ae06 commit 884012db2046fce17bea0f35210ee424cc60ae06 Author: Joe Simmons-Talbott Date: Tue May 30 14:32:55 2023 -0400 getipv4sourcefilter: Get rid of alloca Use a scratch_buffer rather than alloca to avoid potential stack overflows. Reviewed-by: Adhemerval Zanella Diff: --- sysdeps/unix/sysv/linux/getipv4sourcefilter.c | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/sysdeps/unix/sysv/linux/getipv4sourcefilter.c b/sysdeps/unix/sysv/linux/getipv4sourcefilter.c index 8a367b1048..ce72becead 100644 --- a/sysdeps/unix/sysv/linux/getipv4sourcefilter.c +++ b/sysdeps/unix/sysv/linux/getipv4sourcefilter.c @@ -16,9 +16,9 @@ License along with the GNU C Library; if not, see . */ -#include #include #include +#include #include #include #include @@ -33,17 +33,12 @@ getipv4sourcefilter (int s, struct in_addr interface, struct in_addr group, /* We have to create an struct ip_msfilter object which we can pass to the kernel. */ socklen_t needed = IP_MSFILTER_SIZE (*numsrc); - int use_alloca = __libc_use_alloca (needed); - struct ip_msfilter *imsf; - if (use_alloca) - imsf = (struct ip_msfilter *) alloca (needed); - else - { - imsf = (struct ip_msfilter *) malloc (needed); - if (imsf == NULL) - return -1; - } + struct scratch_buffer buf; + scratch_buffer_init (&buf); + if (!scratch_buffer_set_array_size (&buf, 1, needed)) + return -1; + struct ip_msfilter *imsf = buf.data; imsf->imsf_multiaddr = group; imsf->imsf_interface = interface; @@ -61,12 +56,7 @@ getipv4sourcefilter (int s, struct in_addr interface, struct in_addr group, *numsrc = imsf->imsf_numsrc; } - if (! use_alloca) - { - int save_errno = errno; - free (imsf); - __set_errno (save_errno); - } + scratch_buffer_free (&buf); return result; }