From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 3B70B3858D1E for ; Mon, 26 Jun 2023 13:16:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3B70B3858D1E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1687785385; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=BbLSehi3PF0djbaC6oJNT8kn3xCD2b/2zhCEubVCBnA=; b=SFDHqQ24h7oCG0SNuo7YTn/Uygedek9FEr2WSTTeGNRtM32eynHpGaoIGKZ7ooOkZGA4Vh bMl0Hoqn0v1D/ureB9W9YCZ4A3z8hDmVfJby93RknpR/lg7YrhL9GPOLrRF3S21sKVOCdv 6ycxkS+t6x/rynFXh5TjBRAEgt/gFqI= Received: from mail-qt1-f200.google.com (mail-qt1-f200.google.com [209.85.160.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-662-iQB4pNLmPmWiQEIj4UCdDQ-1; Mon, 26 Jun 2023 09:16:24 -0400 X-MC-Unique: iQB4pNLmPmWiQEIj4UCdDQ-1 Received: by mail-qt1-f200.google.com with SMTP id d75a77b69052e-3ff263bfb9bso50924391cf.2 for ; Mon, 26 Jun 2023 06:16:24 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1687785383; x=1690377383; 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=BbLSehi3PF0djbaC6oJNT8kn3xCD2b/2zhCEubVCBnA=; b=BZ9aeYtsH7VTzzeIj32/bqg5o/InOB8NvZw2yOrR9fq8OxrgcVgHkiWRbDUWIwDehg EQ18lFOaqxbQmgpQ7r54cjP08Qma2NpDN5Rw85+wCDZ5Edz3X291E9VI9cKESNSfEPUl cCbWfheX/9A+0k8AKbVXFAF28phF3apepP6hmfHpLl7oIvxqOQPRTgDv53g4c3W6ye23 RP9RIHUk2eHHe1jk3tBccOwgoBHZO82LfGkW2rw/8TUd+icj+nQ18Lvg7NNvt26srIBZ rzVYzhXtmMk5VthLPAa2I0LvGMyw5x4ZGMJI+1KF3jZUHpLisPre8YdHujVgtH1SZTkE Yz8g== X-Gm-Message-State: AC+VfDzqL9UoHdNUHabiuM1I4T6CbwoXTprBl8ynIsGHwWlF+K53qByi V4QI93gzEfaK1WewMZ5piHTgfO/zcSfgsUZL75gxVnV5YTE7rbyOqIqOnILoc4PbSzKO7CjzpCq iY3CgQ6ydIt7KyXjfoui+eGpUfqW4N8OKSTlLvHTOBS9kl77wJKalIoYBZm3O/IHTfCxl5+HrbT 0+FkNm X-Received: by 2002:a05:622a:48:b0:3fd:deb2:af1f with SMTP id y8-20020a05622a004800b003fddeb2af1fmr30934309qtw.7.1687785383595; Mon, 26 Jun 2023 06:16:23 -0700 (PDT) X-Google-Smtp-Source: ACHHUZ7AKDXJvsZD3gNhlZBweDRVg2UQgqfsKHrrfm6lOow+NHeLq1J4NXQ0HWxmMN9TN5+vgXGFeQ== X-Received: by 2002:a05:622a:48:b0:3fd:deb2:af1f with SMTP id y8-20020a05622a004800b003fddeb2af1fmr30934288qtw.7.1687785383348; Mon, 26 Jun 2023 06:16:23 -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 j1-20020ac84401000000b003f6a607cf22sm3023298qtn.84.2023.06.26.06.16.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jun 2023 06:16:22 -0700 (PDT) From: Joe Simmons-Talbott To: libc-alpha@sourceware.org Cc: Joe Simmons-Talbott Subject: [PATCH v3] mips: dl-machine-reject-phdr: Get rid of alloca. Date: Mon, 26 Jun 2023 09:16:21 -0400 Message-Id: <20230626131621.763381-1-josimmon@redhat.com> X-Mailer: git-send-email 2.40.1 MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-Spam-Status: No, score=-12.5 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_H5,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,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: Read directly into the mips_abiflags struct rather than reading the entire segment and using alloca when the passed buffer is not big enough. Checked with build-many-glibcs.py on mips-linux-gnu --- Changes to v2: * Rather than use a scratch buffer use the mips_abiflags struct itself for reading since we're now just reading that much data and not the whole segment. sysdeps/mips/dl-machine-reject-phdr.h | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/sysdeps/mips/dl-machine-reject-phdr.h b/sysdeps/mips/dl-machine-reject-phdr.h index 104b590661..b784697fc1 100644 --- a/sysdeps/mips/dl-machine-reject-phdr.h +++ b/sysdeps/mips/dl-machine-reject-phdr.h @@ -161,7 +161,7 @@ elf_machine_reject_phdr_p (const ElfW(Phdr) *phdr, unsigned int phnum, Lmid_t nsid; int in_abi = -1; struct abi_req in_req; - Elf_MIPS_ABIFlags_v0 *mips_abiflags = NULL; + Elf_MIPS_ABIFlags_v0 mips_abiflags; bool perfect_match = false; #if _MIPS_SIM == _ABIO32 unsigned int cur_mode = -1; @@ -176,25 +176,19 @@ elf_machine_reject_phdr_p (const ElfW(Phdr) *phdr, unsigned int phnum, /* Read the attributes section. */ if (ph != NULL) { - ElfW(Addr) size = ph->p_filesz; + ElfW(Addr) size = sizeof (Elf_MIPS_ABIFlags_v0); - if (ph->p_offset + size <= len) - mips_abiflags = (Elf_MIPS_ABIFlags_v0 *) (buf + ph->p_offset); - else - { - mips_abiflags = alloca (size); - __lseek (fd, ph->p_offset, SEEK_SET); - if (__libc_read (fd, (void *) mips_abiflags, size) != size) - REJECT (" unable to read PT_MIPS_ABIFLAGS\n"); - } - - if (size < sizeof (Elf_MIPS_ABIFlags_v0)) + if (ph->p_filesz < size) REJECT (" contains malformed PT_MIPS_ABIFLAGS\n"); - if (__glibc_unlikely (mips_abiflags->flags2 != 0)) - REJECT (" unknown MIPS.abiflags flags2: %u\n", mips_abiflags->flags2); + __lseek (fd, ph->p_offset, SEEK_SET); + if (__libc_read (fd, (void *) &mips_abiflags, size) != size) + REJECT (" unable to read PT_MIPS_ABIFLAGS\n"); + + if (__glibc_unlikely (mips_abiflags.flags2 != 0)) + REJECT (" unknown MIPS.abiflags flags2: %u\n", mips_abiflags.flags2); - in_abi = mips_abiflags->fp_abi; + in_abi = mips_abiflags.fp_abi; } /* ANY is compatible with anything. */ -- 2.39.2