From patchwork Tue Oct 26 21:01:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585667 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 719C0C433F5 for ; Tue, 26 Oct 2021 21:01:10 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 55C1460720 for ; Tue, 26 Oct 2021 21:01:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239350AbhJZVDc (ORCPT ); Tue, 26 Oct 2021 17:03:32 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33126 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239351AbhJZVDb (ORCPT ); Tue, 26 Oct 2021 17:03:31 -0400 Received: from mail-il1-x133.google.com (mail-il1-x133.google.com [IPv6:2607:f8b0:4864:20::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 851E9C061570 for ; Tue, 26 Oct 2021 14:01:07 -0700 (PDT) Received: by mail-il1-x133.google.com with SMTP id j3so668172ilr.6 for ; Tue, 26 Oct 2021 14:01:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:content-transfer-encoding:in-reply-to; bh=lrFvOvandisktvz6zA26AkghajF9mLwRnXfkHlapEoE=; b=St4G6sGNEqFvBq/6+Swa4RQMIQg2QR71+g56697Da0qXSJlhGqIyScnaU8uPU5JwW3 VK749dHB3/fRXPDXnB4eO5q6ZpTCs7pXPFQQgC5aFfqehtsOYmc6NMsHBsEbPNKcT2gI 2Er3ceWUubNkFmdrah+Sfh46r99qgwEYbxikw/JnbXS9LSGNV1shvmuSybG0W8NW/ZyF JLMsnjfC4rePwnEq+6puP43rpVPuNczHUgK7m7zViws8DBVCkaD2K4y7bHuuZ/IdHuCn yHmNTl0V1SzufTQQygifsiXs4BGOxn08UvxuxTZ+HZZ20TMTK8ZybaROyY8c82DMvBsF P6+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:content-transfer-encoding :in-reply-to; bh=lrFvOvandisktvz6zA26AkghajF9mLwRnXfkHlapEoE=; b=3b1dzEQsYn3r0SVc174fRv4NYpNzSw4OOgFuJ9cTxnZjLDhJyelDrb4pV+KuzG0C7S yqlydrYREdzW5PDdhoOltUSNTc66zkdftOs8PRVKbcxzYgxhjyJpkf4/Xe6ee13mDGte rpLRQITrkH2rMBQ2M1/xT1fAFUzqIjw1I8SSri78ZIzl03xW30I9Lgz2W2r0PeMR7kCi FikRSLYehuid+0i5peyJv9JknB+J3yoYYMrPECBCGRADvGpiZ9SI/TfWyODrJhqwQg+U 8xXqHvg3ADx1YhPr690oBn+6qUDgH0Kn/uw8Sa0oVV2IpgE6Es/BjH9HT/pZTMwymTH7 04KQ== X-Gm-Message-State: AOAM5305ctU6QmeWK0jUFProXCxaUcFAog3SXaLueSSrLsejYLOdVjXn QZ5mz4id7Rfm0kF3FEC/LbVZ4C1CThaoXA== X-Google-Smtp-Source: ABdhPJzioLOuZtZSsIzKBUjMjpQNnjiX4olFOr4XfsbXHEqk+DC8qOn0gbRHbvrOmWhaGOKAQEX7sQ== X-Received: by 2002:a92:c264:: with SMTP id h4mr13032547ild.101.1635282066327; Tue, 26 Oct 2021 14:01:06 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id k16sm10565260ior.50.2021.10.26.14.01.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:05 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:05 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 1/9] midx.c: clean up chunkfile after reading the MIDX Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org In order to read the contents of a MIDX, we initialize a chunkfile structure which can read the table of contents and assign pointers into different sections of the file for us. We do call free(), since the chunkfile struct is heap allocated, but not the more appropriate free_chunkfile(), which also frees memory that the structure itself owns. Call that instead to avoid leaking memory in this function. Signed-off-by: Ævar Arnfjörð Bjarmason Signed-off-by: Taylor Blau --- midx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/midx.c b/midx.c index 8433086ac1..36e4754767 100644 --- a/midx.c +++ b/midx.c @@ -179,12 +179,13 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local trace2_data_intmax("midx", the_repository, "load/num_packs", m->num_packs); trace2_data_intmax("midx", the_repository, "load/num_objects", m->num_objects); + free_chunkfile(cf); return m; cleanup_fail: free(m); free(midx_name); - free(cf); + free_chunkfile(cf); if (midx_map) munmap(midx_map, midx_size); if (0 <= fd) From patchwork Tue Oct 26 21:01:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585669 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 87D3CC433F5 for ; Tue, 26 Oct 2021 21:01:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6554D60FE8 for ; Tue, 26 Oct 2021 21:01:18 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239367AbhJZVDl (ORCPT ); Tue, 26 Oct 2021 17:03:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33144 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239351AbhJZVDf (ORCPT ); Tue, 26 Oct 2021 17:03:35 -0400 Received: from mail-il1-x12a.google.com (mail-il1-x12a.google.com [IPv6:2607:f8b0:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80C5BC061570 for ; Tue, 26 Oct 2021 14:01:10 -0700 (PDT) Received: by mail-il1-x12a.google.com with SMTP id 3so661263ilq.7 for ; Tue, 26 Oct 2021 14:01:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=ywGIn9LL+WdWZrY9v/GGM+XQz0CjxBSr644Hb+5V47Q=; b=v59hPcD3FmpTn2oQt8V4iMsjMCr0Pk4LUB1ROivjE4auHmArUA91q/3UbC/k9VStLK sCFua0jbCK6f6s+cps4VjljEICVHWxE7VIJzSmw9f6aZqjtmkgPflxr65T9Fhc5BlzCX lFB8CSQ12MfakRpXf4EzRvG0ybXdW5PwYLHrCofls7N00IXPbeeyMiYIVQMRQDDFw9wh ZvR+HX+4zi+wVmfUSe0RF6cxzT63/KeYIOJ/yDqd5bDFrEypqAmbvZSfHpTuTPE7jR5E UIcqGZ3G8OodRwi9ZZkX9xAaD42be3CsXri/YFzzE01Wq/R7p4D8wJqGGhvsL6IRzkhZ cEbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=ywGIn9LL+WdWZrY9v/GGM+XQz0CjxBSr644Hb+5V47Q=; b=lH9K0/pNRxPFBYEmQ8ZkBETdr2bxMDMW44wLVqfze0HuzAnHOJz8V7VWuC11p/3U4B 4u9k9VUeBRYHXf1PJGyVkKlX3PDIv8q9okoX11N9UOevB50XSqLhl6FBwgkMU5av+LjE 7ENeEk7VQw2MCtWIm1wtGkRwueLxvtbV5F9OIBrauXJEBuG/pP9b6snPtcn/H40+fEOy d+k6/dpwPKvX3+6FckhKasYF0hZHgjentZqNgAQ05gOuMMeUJvNu8KbWfg/vbyNjxIfw h6dIJMxPWLotDWs0YLURn17SVfyvuCiJooLasPnoIxi6vxX1RzQhppcjN9sst4sJ1U81 EKsw== X-Gm-Message-State: AOAM530gfbGI99lRYKnwPy2aul/Tlc/blaU90nJRaYw8+FZFAa/Ykk0s lbc7LPQOXN4HPvsGTfDTM3hseYAQ8e0vLg== X-Google-Smtp-Source: ABdhPJyQ+fyYU92VGnHq/STB4VU/L0vKFqzDN7OjaYc/5kC763lwWt4ida6weayH+unCXetRgSG8fQ== X-Received: by 2002:a05:6e02:1bce:: with SMTP id x14mr16255584ilv.9.1635282069425; Tue, 26 Oct 2021 14:01:09 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id r11sm10429990ill.20.2021.10.26.14.01.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:08 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:08 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 2/9] midx.c: don't leak MIDX from verify_midx_file Message-ID: <258a9e2e57eaa81c906a05f1d7f8c193d7efebae.1635282024.git.me@ttaylorr.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The function midx.c:verify_midx_file() allocates a MIDX struct by calling load_multi_pack_index(). But when cleaning up, it calls free() without freeing any resources associated with the MIDX. Call the more appropriate close_midx() which does free those resources, which causes t5319.3 to pass when Git is compiled with SANITIZE=leak. Signed-off-by: Taylor Blau --- midx.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/midx.c b/midx.c index 36e4754767..ad60e48468 100644 --- a/midx.c +++ b/midx.c @@ -1611,7 +1611,7 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag * Remaining tests assume that we have objects, so we can * return here. */ - return verify_midx_error; + goto cleanup; } if (flags & MIDX_PROGRESS) @@ -1689,7 +1689,9 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag } stop_progress(&progress); +cleanup: free(pairs); + close_midx(m); return verify_midx_error; } From patchwork Tue Oct 26 21:01:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585671 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 37C14C433EF for ; Tue, 26 Oct 2021 21:01:20 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2177561039 for ; Tue, 26 Oct 2021 21:01:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237081AbhJZVDn (ORCPT ); Tue, 26 Oct 2021 17:03:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33182 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239361AbhJZVDl (ORCPT ); Tue, 26 Oct 2021 17:03:41 -0400 Received: from mail-il1-x131.google.com (mail-il1-x131.google.com [IPv6:2607:f8b0:4864:20::131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D28A9C061227 for ; Tue, 26 Oct 2021 14:01:12 -0700 (PDT) Received: by mail-il1-x131.google.com with SMTP id h2so633161ili.11 for ; Tue, 26 Oct 2021 14:01:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=LCphwRaPGY8QsBu1ReFAnc9TeEz7ZWhd41/xcUdARxg=; b=4cSnf+ZvJOW3TS97Mncw4mmKpIyvBSypwBlAx9YTVurqkM1B5IZT9hU4PTf8fao63Y M1uZbpZU3b9/5cK7MmMvuRALh2dj1i9qW5nC6XkLjds/0MUISJcAdgDJmj0lqTBKk8aL TOBW9EaJI6N/dH5R0edl249grHLHh6ujIH74UwT+CxlLAn0j1eB5MmPD0gPA+NFW61nA +qf8zXF4/HDVO4s89rpUUqz8rAZrEU5/xfNgCHXsd5tGkvH3kZI80qzabem/bBqlpHW4 lLv70oOFjxZiDmh9HwLnxF9hpnjZbOtpSoqExQ8YbS3qt8Ivc/pOL092yBSLUfFMGeq+ +qNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=LCphwRaPGY8QsBu1ReFAnc9TeEz7ZWhd41/xcUdARxg=; b=eDXu6RLkWxqT0YrySd2H2dvkjrnqOxlbhq/OeqecF9iHWBRfBEMflwnS9ZFRjLIpXY QSFZI5t23diLWZJKPJdBd+NUmiJBQsG16StIgpd/gPn1vbCNJvKXlR3GHua0ztwlhJKz sPW0Mvpr+qWZVj/95Y7sbv5eBFAbP6FT7uOB9kj+jhLr4J2OWjQvsD5nWQfEfYIO7075 ElzJ/2PuQsgHpSfbF0sjPRCb9zErirD2870SM8GQKm0LgXrvTCAzt0Ip2zde0/H2TYYj 7MAhPYbSOiEn743FUWyDTk26MAIGRg7aHMjZhxlUHzPljtGfUkwIATkua7mxzTnwZqtN b+jQ== X-Gm-Message-State: AOAM5320Ta6KJQLrUCsR4rbQAJ+XJSDTTbhbTxTEfKAbjzcN3p2hHVfo Irv+IMhiv1C1bENsWYxOVzk1AeygPykB2Q== X-Google-Smtp-Source: ABdhPJwoQKvQhazRIL3NNR7GL2jBvXkpInWk2ozRaJVOsRPmCL6Z6aBnJn4+M1xqZkgaOCX0myuF0w== X-Received: by 2002:a05:6e02:1bae:: with SMTP id n14mr10509600ili.269.1635282072143; Tue, 26 Oct 2021 14:01:12 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id x13sm4837604ile.9.2021.10.26.14.01.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:11 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:11 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 3/9] t/helper/test-read-midx.c: free MIDX within read_midx_file() Message-ID: <84859d5b534606ab243b82afa119514f71ca1c03.1635282024.git.me@ttaylorr.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org When calling `read_midx_file()` to show information about a MIDX or list the objects contained within it we fail to call `close_midx()`, leaking the memory allocated to store that MIDX. Fix this by calling `close_midx()` before exiting the function. We can drop the "early" return when `show_objects` is non-zero, since the next instruction is also a return. (We could just as easily put a `cleanup` label here as with previous patches. But the only other time we terminate the function early is when we fail to load a MIDX in the first place. `close_midx()` does handle a NULL argument, but the extra complexity is likely not warranted). Signed-off-by: Taylor Blau --- t/helper/test-read-midx.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/t/helper/test-read-midx.c b/t/helper/test-read-midx.c index 9d6fa7a377..27072ba94d 100644 --- a/t/helper/test-read-midx.c +++ b/t/helper/test-read-midx.c @@ -55,9 +55,10 @@ static int read_midx_file(const char *object_dir, int show_objects) printf("%s %"PRIu64"\t%s\n", oid_to_hex(&oid), e.offset, e.p->pack_name); } - return 0; } + close_midx(m); + return 0; } From patchwork Tue Oct 26 21:01:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585673 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 20F65C433F5 for ; Tue, 26 Oct 2021 21:01:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0367C60FE8 for ; Tue, 26 Oct 2021 21:01:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239364AbhJZVDo (ORCPT ); Tue, 26 Oct 2021 17:03:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239362AbhJZVDl (ORCPT ); Tue, 26 Oct 2021 17:03:41 -0400 Received: from mail-il1-x129.google.com (mail-il1-x129.google.com [IPv6:2607:f8b0:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 688EEC061745 for ; Tue, 26 Oct 2021 14:01:15 -0700 (PDT) Received: by mail-il1-x129.google.com with SMTP id w15so676239ilv.5 for ; Tue, 26 Oct 2021 14:01:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=jnvYuC9YIyrSRrdpUg3msJq8OxB1kQRC4M327pK9p1w=; b=1X9YqqYoGZJQnN/5fdUdqtnWv/BvpVH4e4tUKhuQntdZ9wLFd8AhQmJMlpR0wb7WsQ YwaxMIYgFFdFQR6nhITzg8tcKzwjbwpp7F1W8TrA4cibgbe4UU6Ha0K4l8gqs/x1o7zc WUEmGWbFVIePRucRBbXTebU0mu54V++0CzjX50KUrfPXlLf+HOAqSSU1oojYR3iAwEr5 oDe/nlQ/SmfVrxCk0+KBgHcRskCGri+mvSnd05MiduyVB2mkyI60QN1VJFD4ocOUM+WZ VbNjtSycDc50TT6FNczI/0cdFPD4eizr/zs4YqrFV9k320ct/cT32HLmh7/6KxbupFmr KkEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=jnvYuC9YIyrSRrdpUg3msJq8OxB1kQRC4M327pK9p1w=; b=K/Wa/qKVeU7Sm8N6+0yoDQfl+9C0wk8MCyzZR7J/dp57+/5458ntt8I2bxzGvjqSAK piNFqEsyrTT4Xsv8no7niUZFWlbFg1YYwTjhcv1l8EI6QL3dG5ZQOWUWhhE7ENIaEQxU 3psyyWaqTiLuWMmyaiQN/ondO13/K7S4ULbYRi6fmAKevscP8zMeDfg7/Z9qjfD+eb7x jz9w8oUJgMg+erGBJCGL6VplgxpCp54a8wU65tTrQV4D84+THmYtvjaA8vm9FtgylBjs fqFPDXJ8kM4sDdhLYKvOqhtAHAMXTIwEy9qhdVsxHPwIDNC7uFWUnodHcDCnoOGZXs+A rMVA== X-Gm-Message-State: AOAM531eZWp1sU8cEX1M+myHjgrROmt6jPdWkX9P2v+TBpTabLJ2wNDL UdMcoBGaab6FXEnVP2kD7plklN4+xamLbA== X-Google-Smtp-Source: ABdhPJwGJMKSJ52zcvIU5/UFF2fVpeYqiK1dUriGCAasYDAKIplqfD52YJKzt6VWZI+coGlGn9ksDQ== X-Received: by 2002:a92:3642:: with SMTP id d2mr16265563ilf.91.1635282074684; Tue, 26 Oct 2021 14:01:14 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id y20sm8850136ilq.74.2021.10.26.14.01.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:14 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:13 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 4/9] builtin/pack-objects.c: don't leak memory via arguments Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org When constructing arguments to pass to setup_revision(), pack-objects only frees the memory used by that array after calling get_object_list(). Ensure that we call strvec_clear() whether or not we use the arguments array by cleaning up whenever we exit the function (and rewriting one early return to jump to a label which frees the memory and then returns). We could avoid setting this array up altogether unless we are in the if-else block that calls get_object_list(), but setting up the argument array is intermingled with lots of other side-effects, e.g.: if (exclude_promisor_objects) { use_internal_rev_list = 1; fetch_if_missing = 0; strvec_push(&rp, "--exclude-promisor-objects"); } So it would be awkward to check exclude_promisor_objects twice: first to set use_internal_rev_list and fetch_if_missing, and then again above get_object_list() to push the relevant argument onto the array. Instead, leave the array's construction alone and make sure to free it unconditionally. Signed-off-by: Taylor Blau --- builtin/pack-objects.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 1a3dd445f8..857be7826f 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -4148,11 +4148,10 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) read_packs_list_from_stdin(); if (rev_list_unpacked) add_unreachable_loose_objects(); - } else if (!use_internal_rev_list) + } else if (!use_internal_rev_list) { read_object_list_from_stdin(); - else { + } else { get_object_list(rp.nr, rp.v); - strvec_clear(&rp); } cleanup_preferred_base(); if (include_tag && nr_result) @@ -4162,7 +4161,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) the_repository); if (non_empty && !nr_result) - return 0; + goto cleanup; if (nr_result) { trace2_region_enter("pack-objects", "prepare-pack", the_repository); @@ -4183,5 +4182,9 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) " pack-reused %"PRIu32), written, written_delta, reused, reused_delta, reuse_packfile_objects); + +cleanup: + strvec_clear(&rp); + return 0; } From patchwork Tue Oct 26 21:01:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585675 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3A0BCC433EF for ; Tue, 26 Oct 2021 21:01:25 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 1FEAB61039 for ; Tue, 26 Oct 2021 21:01:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239375AbhJZVDr (ORCPT ); Tue, 26 Oct 2021 17:03:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33166 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239351AbhJZVDm (ORCPT ); Tue, 26 Oct 2021 17:03:42 -0400 Received: from mail-il1-x132.google.com (mail-il1-x132.google.com [IPv6:2607:f8b0:4864:20::132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 27907C061570 for ; Tue, 26 Oct 2021 14:01:18 -0700 (PDT) Received: by mail-il1-x132.google.com with SMTP id w15so676362ilv.5 for ; Tue, 26 Oct 2021 14:01:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=W4T2W1htd3p2LLktcrdA5PdgIx+a3UO+/AQGYzg0OHs=; b=QH5Dd/f+L4qbK4dkCICTmAiYBD7v95Yd7ShTSJQDljRNZFFC2nI2jTSZVn67ZcHIpo RRytzn+J6Zr9SzG46ubOhXO2m9SWWFrk4IRqb6KMLgvcuBnbRJSnsN/iqa0YES67SaGU 5zPeA9PL6X5qX9CziLLeUL1vdN7UdCrFf2fEd0jHNiBKlmfQbLiuOXHRXSPizled5mik NgS6tH5imFlRV0tCOBePZL7vd0TyPteYwHmibL1rnter2MDAfa01E14TUVzr0SKvw85p 7HcO9Dda3Mef2R776tX5AwqrR0y1e7GMfSihGw+k/GzUH4rknhNwC1NPp8Br2c/TL4N6 50bQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=W4T2W1htd3p2LLktcrdA5PdgIx+a3UO+/AQGYzg0OHs=; b=5d+Xc6nUSu1n9lWnZP/ynQIeWu4jE9clwUq2Xuro4ptxDUnQo/qLQPmhK8tM6G8h/l E3dYiQXAt3IPue7R5TdX1JX6rI867GAxVM1JVi+kgRslTmA6k20ZdFwDvQSkxBMCuf57 V756QRkAlXNPmgP5iv/UBPxYvZzxxOwZpPqUgM4PYSXiUjJKerlKMBMh6BzNIMKQ/x4Z Oo+67pxLd1fmmL+CjZFpLGC6cYeSO+6G+TaPi0PYP4+pc57efICcKJMXcdO3PT4lQvY5 hb0W9Mc3V8bDwhbMScDPiSsrechNWp1d6SK0MWe2GC2SjmQaecuzQKtcV6D2/I0XRrvE V4BA== X-Gm-Message-State: AOAM530KHitmThVcxYWMxTpWKXRWNbOpmwfcNzf+3IMLGf091XQiOYgh g6MPuoDs0xwWZcxxYbBmqOvmcbnFsBNcTQ== X-Google-Smtp-Source: ABdhPJxRK0QBnWBSUEESOBRaKrHKYhWWZ4dc89XZvoqpOejYoj4Ds9m3jaNsVuU7Bru1NiogKZ+ILA== X-Received: by 2002:a05:6e02:1b0f:: with SMTP id i15mr4231656ilv.21.1635282077223; Tue, 26 Oct 2021 14:01:17 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id s7sm11953541iow.31.2021.10.26.14.01.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:16 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:16 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 5/9] builtin/repack.c: avoid leaking child arguments Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org `git repack` invokes a handful of child processes: one to write the actual pack, and optionally ones to repack promisor objects and update the MIDX. In none of these cases do we bother to call child_process_clear(), which frees the memory associated with each child's arguments and environment. Make sure that we call child_process_clear() in any functions which initialize a struct child_process before returning along a path which did not call finish_command(). In cmd_repack(), take a slightly different approach to use a cleanup label to clear the child_process, unless finish_command() was called. This allows us to free other memory allocated during the lifetime of that function. But it avoids calling child_process_clear() twice (the other call coming from inside of finish_command()) to avoid assuming the function's implementation is idempotent. Signed-off-by: Taylor Blau Signed-off-by: Taylor Blau --- builtin/repack.c | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/builtin/repack.c b/builtin/repack.c index 0b2d1e5d82..b82f6b485c 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -258,9 +258,11 @@ static void repack_promisor_objects(const struct pack_objects_args *args, for_each_packed_object(write_oid, &cmd, FOR_EACH_OBJECT_PROMISOR_ONLY); - if (cmd.in == -1) + if (cmd.in == -1) { /* No packed objects; cmd was never started */ + child_process_clear(&cmd); return; + } close(cmd.in); @@ -586,8 +588,10 @@ static int write_midx_included_packs(struct string_list *include, strvec_pushf(&cmd.args, "--refs-snapshot=%s", refs_snapshot); ret = start_command(&cmd); - if (ret) + if (ret) { + child_process_clear(&cmd); return ret; + } in = xfdopen(cmd.in, "w"); for_each_string_list_item(item, include) @@ -608,9 +612,10 @@ int cmd_repack(int argc, const char **argv, const char *prefix) struct pack_geometry *geometry = NULL; struct strbuf line = STRBUF_INIT; struct tempfile *refs_snapshot = NULL; - int i, ext, ret; + int i, ext, ret = 0; FILE *out; int show_progress = isatty(2); + int cmd_cleared = 0; /* variables to be filled by option parsing */ int pack_everything = 0; @@ -794,7 +799,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix) ret = start_command(&cmd); if (ret) - return ret; + goto cleanup; if (geometry) { FILE *in = xfdopen(cmd.in, "w"); @@ -818,8 +823,9 @@ int cmd_repack(int argc, const char **argv, const char *prefix) } fclose(out); ret = finish_command(&cmd); + cmd_cleared = 1; if (ret) - return ret; + goto cleanup; if (!names.nr && !po_args.quiet) printf_ln(_("Nothing new to pack.")); @@ -893,7 +899,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix) string_list_clear(&include, 0); if (ret) - return ret; + goto cleanup; } reprepare_packed_git(the_repository); @@ -946,12 +952,15 @@ int cmd_repack(int argc, const char **argv, const char *prefix) write_midx_file(get_object_directory(), NULL, NULL, flags); } +cleanup: string_list_clear(&names, 0); string_list_clear(&rollback, 0); string_list_clear(&existing_nonkept_packs, 0); string_list_clear(&existing_kept_packs, 0); clear_pack_geometry(geometry); strbuf_release(&line); + if (!cmd_cleared) + child_process_clear(&cmd); - return 0; + return ret; } From patchwork Tue Oct 26 21:01:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585677 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 853FDC433F5 for ; Tue, 26 Oct 2021 21:01:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 648E961039 for ; Tue, 26 Oct 2021 21:01:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239383AbhJZVDu (ORCPT ); Tue, 26 Oct 2021 17:03:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33190 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239357AbhJZVDo (ORCPT ); Tue, 26 Oct 2021 17:03:44 -0400 Received: from mail-io1-xd33.google.com (mail-io1-xd33.google.com [IPv6:2607:f8b0:4864:20::d33]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 80369C061220 for ; Tue, 26 Oct 2021 14:01:20 -0700 (PDT) Received: by mail-io1-xd33.google.com with SMTP id e144so1042548iof.3 for ; Tue, 26 Oct 2021 14:01:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=jH1fzBQ+o6N7ARCnMCP2GRXkwznvAiu34mObQxLor3A=; b=piQyJ56hShS7i5iGzOzT581L4iO6Bpf6oW4bkkoZcwskAkXOMi4UykTILF4i28Lpgx tC3PrETFAgcLd6QVX54bK5i3Uja9vbCHuFysPwaq/k/kp3zbGTntmlas8UM96s1zbSG8 UFChXN2sKWhbtS11W9TuHU8hp6+HEd7VrEI6RuBY6jkieoW1196yvHPR4ITV2pZvpB/D FU+NbO4PgPL+2q/Zz7AiavmEwlSgYLZFny/7SGddJDWu6DQ4gaw4OKw6vaRxqvwkB5yC J+jfyyaqtwFuMYdwgiXYCTAYDHI8+Qu74pQzjx1MUB4G3HcVhAMpXpGI0BXHrm8nYvqG 9Bfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=jH1fzBQ+o6N7ARCnMCP2GRXkwznvAiu34mObQxLor3A=; b=HXj3B6IfXx+E4x95s7FXoEN2XMjfiZZXeBrno7bCg4BjKDZT9dhQvLTvgNKAFQDUdw 4BSxvOOdi27XOZKK8n+D5RXVIUfhAGBrwL51189r9Yp334lNYDrAltKxBYnReRce/kBR gNN9DcfbAg4M3e9IlBwWXIx+pm2khRgtpSOSMUzzzDig1CLoJ9X71xvNd3ivWRdBFVBw OTXSHHMT1fYFvrDqYc4uAJWJ/bXoC9Ts0pTUkO3QCC7jXxJN2iWiW05sbXuK5pZ/wvCx /5bmAx0J1Rb5pZeP/HvWPrWnx7754eXTxzVtwWBn1zKvEIf4e5xQM0Q4eMjBQtWvSfnP MMVA== X-Gm-Message-State: AOAM533Fc+Sn0NNxK5MUxbzXaWvTduPINKyyVZOKwh+FkMLIcVKOiDsq 4MjfqfTVgFYyt/q7f2Mng+jRf+uEgM25rA== X-Google-Smtp-Source: ABdhPJzaxAberHzwqGIGBXe9q3bgHoedaShUzPNidmIJhqbgOlLey3pxZ1Y5hqDMvxU2LUZAnFmr1A== X-Received: by 2002:a05:6602:199:: with SMTP id m25mr16961242ioo.173.1635282079798; Tue, 26 Oct 2021 14:01:19 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id z5sm10439606ile.42.2021.10.26.14.01.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:19 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:18 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 6/9] builtin/multi-pack-index.c: don't leak concatenated options Message-ID: <0d252cd3239b9dca43fda37f7471b924440f6336.1635282024.git.me@ttaylorr.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The `multi-pack-index` builtin dynamically allocates an array of command-line option for each of its separate modes by calling add_common_options() to concatante the common options with sub-command specific ones. Because this operation allocates a new array, we have to be careful to remember to free it. We already do this in the repack and write sub-commands, but verify and expire don't. Rectify this by calling FREE_AND_NULL as the other modes do. Signed-off-by: Taylor Blau --- builtin/multi-pack-index.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/builtin/multi-pack-index.c b/builtin/multi-pack-index.c index 075d15d706..4480ba3982 100644 --- a/builtin/multi-pack-index.c +++ b/builtin/multi-pack-index.c @@ -167,6 +167,8 @@ static int cmd_multi_pack_index_verify(int argc, const char **argv) usage_with_options(builtin_multi_pack_index_verify_usage, options); + FREE_AND_NULL(options); + return verify_midx_file(the_repository, opts.object_dir, opts.flags); } @@ -191,6 +193,8 @@ static int cmd_multi_pack_index_expire(int argc, const char **argv) usage_with_options(builtin_multi_pack_index_expire_usage, options); + FREE_AND_NULL(options); + return expire_midx_packs(the_repository, opts.object_dir, opts.flags); } From patchwork Tue Oct 26 21:01:21 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585679 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8E3C1C433EF for ; Tue, 26 Oct 2021 21:01:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 748BD60FE8 for ; Tue, 26 Oct 2021 21:01:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239406AbhJZVD7 (ORCPT ); Tue, 26 Oct 2021 17:03:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33184 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239359AbhJZVDr (ORCPT ); Tue, 26 Oct 2021 17:03:47 -0400 Received: from mail-io1-xd2b.google.com (mail-io1-xd2b.google.com [IPv6:2607:f8b0:4864:20::d2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6CE53C061745 for ; Tue, 26 Oct 2021 14:01:23 -0700 (PDT) Received: by mail-io1-xd2b.google.com with SMTP id h196so1055003iof.2 for ; Tue, 26 Oct 2021 14:01:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=P14nP80u28N0gDZjjjFRzYGG4afkmA3T4lsXSvXgew4=; b=5e+NOyaOeDsWa6EiyUIc2Ez7a+GwvkIHvswV5QKTQvpW1xDOaVr0gY7mlmTZ2J/0p9 Dm17GpuIP7VJVHaHn0NWYpr0zDvOGMgFsOlHost0i+YKPMwFPcGyTlSqfUwIqeaGqW5c EpuRoHKj/rKfOObeekhYhH7zow6Ncyq5ariMu5apg44j8pkPsYGcccri7mXbelnnKLWN PumVtu7lyu22RuUH+B+p6+VPg+dQRjFlO4DIgoVLr61qoWtVjtU0CbFer/Cg3lBTbYYI ETXpBbr1ZZsoU51DtXiugXEIpuWaEBS62Bk7NZnU29Q2NOtHtmq4ttEGmhJ4dV/PbWtR nMKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=P14nP80u28N0gDZjjjFRzYGG4afkmA3T4lsXSvXgew4=; b=wInE/3JcB53HkLSKbHwtVEHqap4gKa4KDrltL69XHsXpJyOUHb8FCYkMC7NrlWSSJc OouzI6OC/ejjwpFRI/1+9Mz0ehdQSfLsv+6oUBnPYq0hn1HrkJXSp/1ouFjgjoW+gZWa SWFBzoSkgiyN6d5NMOYF1Tu2fp/BOHy81U8ydd4Pw2bHaNPgvh6y0oASVwS4NM45s+hO dA1CCjx87ynzDKiPzeIhpgAJ+zdfFIK1JD5A5gFj9xC9yTy9I5vnnEdg9uuwg2dM697R dw1JrqVHIzp1g2VjLx77lUYiGutKJvvVRolNvw5vvT+ylQM1V2QS+3TjiIJmX58ais0K aPfQ== X-Gm-Message-State: AOAM531iI2pgTqNtYPlPl7Pp8+/XYSaR1X3li7l/919TM/2T6HCBfg/T Cnjr/gskswS+TrKkgWvgnfo3ldjxH3dI+g== X-Google-Smtp-Source: ABdhPJxp0GUn5C+CXc8fGHczBnokawHgt5wyZyvTMGNMWQrhUhckrtDtT46M+5ZEgM9SpLonyOBCww== X-Received: by 2002:a05:6602:134d:: with SMTP id i13mr17047586iov.164.1635282082380; Tue, 26 Oct 2021 14:01:22 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id b13sm10243999ilj.55.2021.10.26.14.01.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:22 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:21 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 7/9] midx.c: write MIDX filenames to strbuf Message-ID: <0f293ab63825e767043876d951ef6c742a540096.1635282024.git.me@ttaylorr.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org To ask for the name of a MIDX and its corresponding .rev file, callers invoke get_midx_filename() and get_midx_rev_filename(), respectively. These both invoke xstrfmt(), allocating a chunk of memory which must be freed later on. This makes callers in pack-bitmap.c somewhat awkward. Specifically, midx_bitmap_filename(), which is implemented like: return xstrfmt("%s-%s.bitmap", get_midx_filename(midx->object_dir), hash_to_hex(get_midx_checksum(midx))); this leaks the second argument to xstrfmt(), which itself was allocated with xstrfmt(). This caller could assign both the result of get_midx_filename() and the outer xstrfmt() to a temporary variable, remembering to free() the former before returning. But that involves a wasteful copy. Instead, get_midx_filename() and get_midx_rev_filename() take a strbuf as an output parameter. This way midx_bitmap_filename() can manipulate and pass around a temporary buffer which it detaches back to its caller. That allows us to implement the function without copying or open-coding get_midx_filename() in a way that doesn't leak. Update the other callers of get_midx_filename() and get_midx_rev_filename() accordingly. Signed-off-by: Taylor Blau --- midx.c | 59 +++++++++++++++++++++++++++---------------------- midx.h | 4 ++-- pack-bitmap.c | 15 ++++++++----- pack-revindex.c | 8 +++---- 4 files changed, 49 insertions(+), 37 deletions(-) diff --git a/midx.c b/midx.c index ad60e48468..837b46b2af 100644 --- a/midx.c +++ b/midx.c @@ -57,15 +57,15 @@ const unsigned char *get_midx_checksum(struct multi_pack_index *m) return m->data + m->data_len - the_hash_algo->rawsz; } -char *get_midx_filename(const char *object_dir) +void get_midx_filename(struct strbuf *out, const char *object_dir) { - return xstrfmt("%s/pack/multi-pack-index", object_dir); + strbuf_addf(out, "%s/pack/multi-pack-index", object_dir); } -char *get_midx_rev_filename(struct multi_pack_index *m) +void get_midx_rev_filename(struct strbuf *out, struct multi_pack_index *m) { - return xstrfmt("%s/pack/multi-pack-index-%s.rev", - m->object_dir, hash_to_hex(get_midx_checksum(m))); + get_midx_filename(out, m->object_dir); + strbuf_addf(out, "-%s.rev", hash_to_hex(get_midx_checksum(m))); } static int midx_read_oid_fanout(const unsigned char *chunk_start, @@ -89,28 +89,30 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local size_t midx_size; void *midx_map = NULL; uint32_t hash_version; - char *midx_name = get_midx_filename(object_dir); + struct strbuf midx_name = STRBUF_INIT; uint32_t i; const char *cur_pack_name; struct chunkfile *cf = NULL; - fd = git_open(midx_name); + get_midx_filename(&midx_name, object_dir); + + fd = git_open(midx_name.buf); if (fd < 0) goto cleanup_fail; if (fstat(fd, &st)) { - error_errno(_("failed to read %s"), midx_name); + error_errno(_("failed to read %s"), midx_name.buf); goto cleanup_fail; } midx_size = xsize_t(st.st_size); if (midx_size < MIDX_MIN_SIZE) { - error(_("multi-pack-index file %s is too small"), midx_name); + error(_("multi-pack-index file %s is too small"), midx_name.buf); goto cleanup_fail; } - FREE_AND_NULL(midx_name); + strbuf_release(&midx_name); midx_map = xmmap(NULL, midx_size, PROT_READ, MAP_PRIVATE, fd, 0); close(fd); @@ -184,7 +186,7 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local cleanup_fail: free(m); - free(midx_name); + strbuf_release(&midx_name); free_chunkfile(cf); if (midx_map) munmap(midx_map, midx_size); @@ -1131,7 +1133,7 @@ static int write_midx_internal(const char *object_dir, const char *refs_snapshot, unsigned flags) { - char *midx_name; + struct strbuf midx_name = STRBUF_INIT; unsigned char midx_hash[GIT_MAX_RAWSZ]; uint32_t i; struct hashfile *f = NULL; @@ -1142,10 +1144,10 @@ static int write_midx_internal(const char *object_dir, int result = 0; struct chunkfile *cf; - midx_name = get_midx_filename(object_dir); - if (safe_create_leading_directories(midx_name)) + get_midx_filename(&midx_name, object_dir); + if (safe_create_leading_directories(midx_name.buf)) die_errno(_("unable to create leading directories of %s"), - midx_name); + midx_name.buf); if (!packs_to_include) { /* @@ -1374,7 +1376,7 @@ static int write_midx_internal(const char *object_dir, pack_name_concat_len += MIDX_CHUNK_ALIGNMENT - (pack_name_concat_len % MIDX_CHUNK_ALIGNMENT); - hold_lock_file_for_update(&lk, midx_name, LOCK_DIE_ON_ERROR); + hold_lock_file_for_update(&lk, midx_name.buf, LOCK_DIE_ON_ERROR); f = hashfd(get_lock_file_fd(&lk), get_lock_file_path(&lk)); if (ctx.nr - dropped_packs == 0) { @@ -1411,9 +1413,9 @@ static int write_midx_internal(const char *object_dir, ctx.pack_order = midx_pack_order(&ctx); if (flags & MIDX_WRITE_REV_INDEX) - write_midx_reverse_index(midx_name, midx_hash, &ctx); + write_midx_reverse_index(midx_name.buf, midx_hash, &ctx); if (flags & MIDX_WRITE_BITMAP) { - if (write_midx_bitmap(midx_name, midx_hash, &ctx, + if (write_midx_bitmap(midx_name.buf, midx_hash, &ctx, refs_snapshot, flags) < 0) { error(_("could not write multi-pack bitmap")); result = 1; @@ -1443,7 +1445,7 @@ static int write_midx_internal(const char *object_dir, free(ctx.entries); free(ctx.pack_perm); free(ctx.pack_order); - free(midx_name); + strbuf_release(&midx_name); return result; } @@ -1507,20 +1509,22 @@ static void clear_midx_files_ext(const char *object_dir, const char *ext, void clear_midx_file(struct repository *r) { - char *midx = get_midx_filename(r->objects->odb->path); + struct strbuf midx = STRBUF_INIT; + + get_midx_filename(&midx, r->objects->odb->path); if (r->objects && r->objects->multi_pack_index) { close_midx(r->objects->multi_pack_index); r->objects->multi_pack_index = NULL; } - if (remove_path(midx)) - die(_("failed to clear multi-pack-index at %s"), midx); + if (remove_path(midx.buf)) + die(_("failed to clear multi-pack-index at %s"), midx.buf); clear_midx_files_ext(r->objects->odb->path, ".bitmap", NULL); clear_midx_files_ext(r->objects->odb->path, ".rev", NULL); - free(midx); + strbuf_release(&midx); } static int verify_midx_error; @@ -1573,12 +1577,15 @@ int verify_midx_file(struct repository *r, const char *object_dir, unsigned flag if (!m) { int result = 0; struct stat sb; - char *filename = get_midx_filename(object_dir); - if (!stat(filename, &sb)) { + struct strbuf filename = STRBUF_INIT; + + get_midx_filename(&filename, object_dir); + + if (!stat(filename.buf, &sb)) { error(_("multi-pack-index file exists, but failed to parse")); result = 1; } - free(filename); + strbuf_release(&filename); return result; } diff --git a/midx.h b/midx.h index 6e32297fa3..b7d79a515c 100644 --- a/midx.h +++ b/midx.h @@ -48,8 +48,8 @@ struct multi_pack_index { #define MIDX_WRITE_BITMAP_HASH_CACHE (1 << 3) const unsigned char *get_midx_checksum(struct multi_pack_index *m); -char *get_midx_filename(const char *object_dir); -char *get_midx_rev_filename(struct multi_pack_index *m); +void get_midx_filename(struct strbuf *out, const char *object_dir); +void get_midx_rev_filename(struct strbuf *out, struct multi_pack_index *m); struct multi_pack_index *load_multi_pack_index(const char *object_dir, int local); int prepare_midx_pack(struct repository *r, struct multi_pack_index *m, uint32_t pack_int_id); diff --git a/pack-bitmap.c b/pack-bitmap.c index f47a0a7db4..3f603425c9 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -292,9 +292,12 @@ static int load_bitmap_entries_v1(struct bitmap_index *index) char *midx_bitmap_filename(struct multi_pack_index *midx) { - return xstrfmt("%s-%s.bitmap", - get_midx_filename(midx->object_dir), - hash_to_hex(get_midx_checksum(midx))); + struct strbuf buf = STRBUF_INIT; + + get_midx_filename(&buf, midx->object_dir); + strbuf_addf(&buf, "-%s.bitmap", hash_to_hex(get_midx_checksum(midx))); + + return strbuf_detach(&buf, NULL); } char *pack_bitmap_filename(struct packed_git *p) @@ -324,10 +327,12 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git, } if (bitmap_git->pack || bitmap_git->midx) { + struct strbuf buf = STRBUF_INIT; + get_midx_filename(&buf, midx->object_dir); /* ignore extra bitmap file; we can only handle one */ - warning("ignoring extra bitmap file: %s", - get_midx_filename(midx->object_dir)); + warning("ignoring extra bitmap file: %s", buf.buf); close(fd); + strbuf_release(&buf); return -1; } diff --git a/pack-revindex.c b/pack-revindex.c index 0e4a31d9db..70d0fbafcb 100644 --- a/pack-revindex.c +++ b/pack-revindex.c @@ -296,14 +296,14 @@ int load_pack_revindex(struct packed_git *p) int load_midx_revindex(struct multi_pack_index *m) { - char *revindex_name; + struct strbuf revindex_name = STRBUF_INIT; int ret; if (m->revindex_data) return 0; - revindex_name = get_midx_rev_filename(m); + get_midx_rev_filename(&revindex_name, m); - ret = load_revindex_from_disk(revindex_name, + ret = load_revindex_from_disk(revindex_name.buf, m->num_objects, &m->revindex_map, &m->revindex_len); @@ -313,7 +313,7 @@ int load_midx_revindex(struct multi_pack_index *m) m->revindex_data = (const uint32_t *)((const char *)m->revindex_map + RIDX_HEADER_SIZE); cleanup: - free(revindex_name); + strbuf_release(&revindex_name); return ret; } From patchwork Tue Oct 26 21:01:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585681 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 93F45C433FE for ; Tue, 26 Oct 2021 21:01:39 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 73B6760FE8 for ; Tue, 26 Oct 2021 21:01:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239359AbhJZVEC (ORCPT ); Tue, 26 Oct 2021 17:04:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33240 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239362AbhJZVDu (ORCPT ); Tue, 26 Oct 2021 17:03:50 -0400 Received: from mail-il1-x134.google.com (mail-il1-x134.google.com [IPv6:2607:f8b0:4864:20::134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 17843C06122B for ; Tue, 26 Oct 2021 14:01:25 -0700 (PDT) Received: by mail-il1-x134.google.com with SMTP id h20so679114ila.4 for ; Tue, 26 Oct 2021 14:01:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=b0QQ8cMtcjtTT22hoGkncPPVHt+E3hy22Eb3Oz0dKmA=; b=nCHRl3jAJfxgJWlKUWqfvpfY4/iuyc4hSN9lXvpnuTUqb5dDXijP3mLu/B2MksGGKU 44j2jImv3KyqrLI9qA4NEiiJ9UMjMGQ3r9XBqPdK+6+l0D39cfhb+kHGYhOBdRS38PSS l3V3IDq9BokGj1Sn95ObxcmWCiH+NFJErgdAQS008JQSFpXFIDsWBDfBQL0L22bpLv4c mxvlwK9F1dhhI1oSvvk5aExN3SbhqsYTozUwEZI7pJlpxRSx+cWPIRbG4OkRVY0ssA3Y X6R5YEKyODxoKTImlVr6TC9kKEiUzN4s6KadXwjMgTorzZneemB11NUOt01bJUThIBHu BIVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=b0QQ8cMtcjtTT22hoGkncPPVHt+E3hy22Eb3Oz0dKmA=; b=ezoBtd3KRjUTgNDCzD7NjUW7nYlMZ19VX3cIPt074ddTPhLxk6ckJ+Ls2MP73HSiIV X2u9VAgkkAfsGskI/NnCNmFVdyIKw4aR+8YKkHE8QMsgK2ZakfGTHJEG91xar36It7ld WXvnvOq4qtzfgRYYM7kx12sc3Mf2PRE9vJj5L8Yq0tq4h3VNOjVS7d7vimn8cN2Mz2OB Y0Q3UvBv6Wz6EQ2EuqiXkLt/WsjCpEkZ2/KSQ0ViYdAc4JM7RGhB5lH9YJgEIdqzho6B WqaI+76i/vSV7BvGzZvbosxDauSx89Z7XNu4HDi45zAqUjsvKWxx1sQS1mBSUxj0aYjf LYCQ== X-Gm-Message-State: AOAM532OQzhPkCtqrl8HUHNslHOxfjQr7aqupDiwjqIrS8GKvUoLuNpn ZM7MjQgeVot87H7Zk0UQUsVV6Q7p32k1ig== X-Google-Smtp-Source: ABdhPJxRvOZGS8C0x7D/aY3gDum5HNwP/A/vBlqqFuT1k+g18fmA+o60LemPpOArtmFZSAf6BRy6Vg== X-Received: by 2002:a92:3211:: with SMTP id z17mr692921ile.271.1635282084971; Tue, 26 Oct 2021 14:01:24 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id n17sm10973224ile.76.2021.10.26.14.01.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:24 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:23 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 8/9] pack-bitmap.c: don't leak type-level bitmaps Message-ID: <77a445463298cac69f00a0b9c5b5951bae80b2dd.1635282024.git.me@ttaylorr.com> References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org test_bitmap_walk() is used to implement `git rev-list --test-bitmap`, which compares the result of the on-disk bitmaps with ones generated on-the-fly during a revision walk. In fa95666a40 (pack-bitmap.c: harden 'test_bitmap_walk()' to check type bitmaps, 2021-08-24), we hardened those tests to also check the four special type-level bitmaps, but never freed those bitmaps. We should have, since each required an allocation when we EWAH-decompressed them. Free those, plugging that leak, and also free the base (the scratch-pad bitmap), too. Signed-off-by: Taylor Blau --- pack-bitmap.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pack-bitmap.c b/pack-bitmap.c index 3f603425c9..3d81425c29 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -1726,6 +1726,12 @@ void test_bitmap_walk(struct rev_info *revs) else die("mismatch in bitmap results"); + bitmap_free(result); + bitmap_free(tdata.base); + bitmap_free(tdata.commits); + bitmap_free(tdata.trees); + bitmap_free(tdata.blobs); + bitmap_free(tdata.tags); free_bitmap_index(bitmap_git); } From patchwork Tue Oct 26 21:01:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taylor Blau X-Patchwork-Id: 12585683 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8988BC433F5 for ; Tue, 26 Oct 2021 21:01:40 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 75CF261039 for ; Tue, 26 Oct 2021 21:01:40 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239381AbhJZVED (ORCPT ); Tue, 26 Oct 2021 17:04:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33266 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239352AbhJZVDz (ORCPT ); Tue, 26 Oct 2021 17:03:55 -0400 Received: from mail-io1-xd35.google.com (mail-io1-xd35.google.com [IPv6:2607:f8b0:4864:20::d35]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 71DD1C061235 for ; Tue, 26 Oct 2021 14:01:28 -0700 (PDT) Received: by mail-io1-xd35.google.com with SMTP id f9so953924ioo.11 for ; Tue, 26 Oct 2021 14:01:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ttaylorr-com.20210112.gappssmtp.com; s=20210112; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to; bh=B6Pe1TTYNS9Q8z0noJ4i5DWNrdimfhRp/iP6KRF7+tE=; b=sGAgiKCuCBUdg/tmDHhQ8g/3NWIWcqD6phcpfJdlLcQ0Y0HH3QZpqm9wTxsKpcATwa LbzwpljquQ2VdxA+aGuZ+/PMQyx//0wHBgEdQRrAqSF9bITGNGeKiKTnHlBiSI4mw0qi Le73FhGETP2wuO1bu/b1GlfMKWa5/PLYVMVAwpmsuJys4mfIlyiXGfXrnKAaCIXeinwq YWEyRUaEnDHPY8ZhMuML4oonO5nmj6sOyA2WE8nFomFW2gmyOkfWrlYtmAGzc8yH0W9w lTPX34pm+P0g6sgHbxUpfS0FKOCWLHGT5T1OsLs/rzW3mJGFBewh2stkwZhyOYmHXHl8 hI5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=B6Pe1TTYNS9Q8z0noJ4i5DWNrdimfhRp/iP6KRF7+tE=; b=SYUWP9GDDfwDVyKoWTDUmQ7W4nEIo98wyYKVRuTe2bTmLftBZOuq3gTPs+wI6v5w4O rthAKMYSLtJB6MbV5rlsRqnZHXNFkJFbtWA+UE7r2/HWl7neHwxVkhZg7L6Mhk35rpL3 QwrNl2DclRlplCOfdmrC211f8BdHH+2t5OjHS4jxra67wykhAZsFF4do29mp6vRUpafm vYlfzg26CMRiHIZHgXAiY8rOBbRmGFRBqBJgM4E9TEemLXnCNvIy5LJArhAa576pcXv6 ZVlILvvQGd3yIgsZ6OGqjX7TzblBfMRQcwRAfr/e0zlfuZkY3ruUyAGYmIpplb19NGUm Ghng== X-Gm-Message-State: AOAM530mVz+X4ylACJeGYZUnSnKB0KQ+wBzRrMhpZ6uZndm+OPqTWEVb TecznYNTlx2JrHHSKUUadJbWqjcHvXcmnQ== X-Google-Smtp-Source: ABdhPJwhWFMTbU5yEcDYsj/N/PvQIEmdcWmcW9e+O6VmUXpeJm/Ojjtk4KvF9vxyQBQCfaq1ztlSOw== X-Received: by 2002:a05:6602:1542:: with SMTP id h2mr16777239iow.190.1635282087764; Tue, 26 Oct 2021 14:01:27 -0700 (PDT) Received: from localhost (104-178-186-189.lightspeed.milwwi.sbcglobal.net. [104.178.186.189]) by smtp.gmail.com with ESMTPSA id v4sm616758ilq.57.2021.10.26.14.01.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Oct 2021 14:01:27 -0700 (PDT) Date: Tue, 26 Oct 2021 17:01:26 -0400 From: Taylor Blau To: git@vger.kernel.org Cc: avarab@gmail.com, dstolee@microsoft.com, peff@peff.net Subject: [PATCH v2 9/9] pack-bitmap.c: more aggressively free in free_bitmap_index() Message-ID: References: MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org The function free_bitmap_index() is somewhat lax in what it frees. There are two notable examples: - While it does call kh_destroy_oid_map on the "bitmaps" map, which maps commit OIDs to their corresponding bitmaps, the bitmaps themselves are not freed. Note here that we recycle already-freed ewah_bitmaps into a pool, but these are handled correctly by ewah_pool_free(). - We never bother to free the extended index's "positions" map, which we always allocate in load_bitmap(). Fix both of these. Signed-off-by: Taylor Blau --- pack-bitmap.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pack-bitmap.c b/pack-bitmap.c index 3d81425c29..a56ceb9441 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -1859,9 +1859,17 @@ void free_bitmap_index(struct bitmap_index *b) ewah_pool_free(b->trees); ewah_pool_free(b->blobs); ewah_pool_free(b->tags); + if (b->bitmaps) { + struct stored_bitmap *sb; + kh_foreach_value(b->bitmaps, sb, { + ewah_pool_free(sb->root); + free(sb); + }); + } kh_destroy_oid_map(b->bitmaps); free(b->ext_index.objects); free(b->ext_index.hashes); + kh_destroy_oid_pos(b->ext_index.positions); bitmap_free(b->result); bitmap_free(b->haves); if (bitmap_is_midx(b)) {