From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2178) id 052D23839DCC; Thu, 15 Sep 2022 13:09:17 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 052D23839DCC DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1663247357; bh=QyhLFGUhsOEdQ0kEbRVyvj+T0Vt1g228BEdOMB3SpiI=; h=From:To:Subject:Date:From; b=kq3GszU0U3K7rhBxoLV5JzOHwU5/tv96+ldx2luTGzqCdMeropRRcLz+/sTwbgYZo DamEQaSnSlUv36Vg1WMdcHIjUna9k3EltEQInfQIoROkDun9gpWyhIzcNEO35yJsY7 w42fjAQDYSnFKg9vHbKqxp4onQzuCeHqI/XdLIJk= Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: Florian Weimer To: glibc-cvs@sourceware.org Subject: [glibc/release/2.36/master] elf: Fix hwcaps string size overestimation X-Act-Checkin: glibc X-Git-Author: Javier Pello X-Git-Refname: refs/heads/release/2.36/master X-Git-Oldrev: df51334828f2af214105aad82042140ee3a6de0a X-Git-Newrev: 4b95b6e8bbb5a2b6856f707bf3bc3308ebef595a Message-Id: <20220915130917.052D23839DCC@sourceware.org> Date: Thu, 15 Sep 2022 13:09:17 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=4b95b6e8bbb5a2b6856f707bf3bc3308ebef595a commit 4b95b6e8bbb5a2b6856f707bf3bc3308ebef595a Author: Javier Pello Date: Mon Sep 5 20:09:01 2022 +0200 elf: Fix hwcaps string size overestimation Commit dad90d528259b669342757c37dedefa8577e2636 added glibc-hwcaps support for LD_LIBRARY_PATH and, for this, it adjusted the total string size required in _dl_important_hwcaps. However, in doing so it inadvertently altered the calculation of the size required for the power set strings, as the computation of the power set string size depended on the first value assigned to the total variable, which is later shifted, resulting in overallocation of string space. Fix this now by using a different variable to hold the string size required for glibc-hwcaps. Signed-off-by: Javier Pello (cherry picked from commit a23820f6052a740246fdc7dcd9c43ce8eed0c45a) Diff: --- elf/dl-hwcaps.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/elf/dl-hwcaps.c b/elf/dl-hwcaps.c index 6f161f6ad5..92eb53790e 100644 --- a/elf/dl-hwcaps.c +++ b/elf/dl-hwcaps.c @@ -193,7 +193,7 @@ _dl_important_hwcaps (const char *glibc_hwcaps_prepend, /* Each hwcaps subdirectory has a GLIBC_HWCAPS_PREFIX string prefix and a "/" suffix once stored in the result. */ hwcaps_counts.maximum_length += strlen (GLIBC_HWCAPS_PREFIX) + 1; - size_t total = (hwcaps_counts.count * (strlen (GLIBC_HWCAPS_PREFIX) + 1) + size_t hwcaps_sz = (hwcaps_counts.count * (strlen (GLIBC_HWCAPS_PREFIX) + 1) + hwcaps_counts.total_length); /* Count the number of bits set in the masked value. */ @@ -229,11 +229,12 @@ _dl_important_hwcaps (const char *glibc_hwcaps_prepend, assert (m == cnt); /* Determine the total size of all strings together. */ + size_t total; if (cnt == 1) - total += temp[0].len + 1; + total = temp[0].len + 1; else { - total += temp[0].len + temp[cnt - 1].len + 2; + total = temp[0].len + temp[cnt - 1].len + 2; if (cnt > 2) { total <<= 1; @@ -255,6 +256,7 @@ _dl_important_hwcaps (const char *glibc_hwcaps_prepend, /* This is the overall result, including both glibc-hwcaps subdirectories and the legacy hwcaps subdirectories using the power set construction. */ + total += hwcaps_sz; struct r_strlenpair *overall_result = malloc (*sz * sizeof (*result) + total); if (overall_result == NULL)