From patchwork Sun Apr 25 14:16:08 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223295 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 89BCEC43460 for ; Sun, 25 Apr 2021 14:16:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 682D96137D for ; Sun, 25 Apr 2021 14:16:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230286AbhDYORE (ORCPT ); Sun, 25 Apr 2021 10:17:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230297AbhDYORD (ORCPT ); Sun, 25 Apr 2021 10:17:03 -0400 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [IPv6:2a00:1450:4864:20::435]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9F215C061574 for ; Sun, 25 Apr 2021 07:16:23 -0700 (PDT) Received: by mail-wr1-x435.google.com with SMTP id k14so3203111wrv.5 for ; Sun, 25 Apr 2021 07:16:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=hbPMY0egvX/xuhI9Y219XI6BhrhsQmZJwQEpOrgISm4=; b=lt4E03CTiSRdjeVtyc2rLmZ8uO5677d9d8eoPXUBN/kaEGNVFKc1E4Inxs3xWvyufT yKGRteSs8VQDRToqsx7RAPEiAzJ1bGq/Bq96Z7ASBgN/Sb48H6sG46pbUQwwKUP1IlhD 7GhCAEgZd2OruNNQgy2k+9llT/U5kAo/4gyw2InxschirkTujCq6cVHvXAkmovCa6uEC PeMGKxHYAs1rqYbcsEEhEFYf5xfHDkOihL2KUs+08MhsO9FN/8Kl8hYUDuR7tBZ2BmkE j8z6mtX9F2SyZYzjHKUGakyzXPBNC1k/Hnaj+MeVVqYBjlR+wdotUY8clpx/ADQh7kJM tyiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=hbPMY0egvX/xuhI9Y219XI6BhrhsQmZJwQEpOrgISm4=; b=cf0y3ghb7iQOAK/VO7UR17Kq4A7+co1wk5EHp3J1nTujSrQEGgVa8UecBC0spqUEFo DrdNZc/hgdkZbtDnjYK13cjd32p1h958PAh7u36vJIJvDXelU7V5aABqJeXY0vgkCIIw BorHzeTJyxsLePIAnQY9GzWRtWUPVQ8Nge5n4+FIFbtQpU8tfrTAV92I8xXJncc29R8P 5bUbhkIxm+Z9ia3cvbISWn/0GLGnFpySwkG6ByDq+0/JCWwHPb09jF3IBcyEl6sqJwoT I6+n4Q0Z4+CvB9bF0nV2ZtB34GiEiAzv7pZkcd7U0KYUHoyR/AMDL4poHdgpCdu7zQPv Mebw== X-Gm-Message-State: AOAM531J0xLx4aOPai4G0wOkaq6kYGfFpnISg8rweeWNIleYfkCaMh7Z bk/bgWT3Wruolqmb8X4OnGRqbndAQgI= X-Google-Smtp-Source: ABdhPJzQhwia6W5+bBQappL7kt5D0YLhP5OAAbm5OpyzNrSAZ6xYdoafU+znjz3sL9ZC6zSD3UgdbA== X-Received: by 2002:adf:f2cf:: with SMTP id d15mr17600345wrp.114.1619360182483; Sun, 25 Apr 2021 07:16:22 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id d6sm2137348wrr.77.2021.04.25.07.16.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:22 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:08 +0000 Subject: [PATCH v2 01/12] revision: free remainder of old commit list in limit_list Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt limit_list() iterates over the original revs->commits list, and consumes many of its entries via pop_commit. However we might stop iterating over the list early (e.g. if we realise that the rest of the list is uninteresting). If we do stop iterating early, list will be pointing to the unconsumed portion of revs->commits - and we need to free this list to avoid a leak. (revs->commits itself will be an invalid pointer: it will have been free'd during the first pop_commit.) However the list pointer is later reused to iterate over our new list, but only for the limiting_can_increase_treesame() branch. We therefore need to introduce a new variable for that branch - and while we're here we can rename the original list to original_list as that makes its purpose more obvious. This leak was found while running t0090. It's not likely to be very impactful, but it can happen quite early during some checkout invocations, and hence seems to be worth fixing: Direct leak of 16 byte(s) in 1 object(s) allocated from: #0 0x49a85d in malloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145:3 #1 0x9ac084 in do_xmalloc wrapper.c:41:8 #2 0x9ac05a in xmalloc wrapper.c:62:9 #3 0x7175d6 in commit_list_insert commit.c:540:33 #4 0x71800f in commit_list_insert_by_date commit.c:604:9 #5 0x8f8d2e in process_parents revision.c:1128:5 #6 0x8f2f2c in limit_list revision.c:1418:7 #7 0x8f210e in prepare_revision_walk revision.c:3577:7 #8 0x514170 in orphaned_commit_warning builtin/checkout.c:1185:6 #9 0x512f05 in switch_branches builtin/checkout.c:1250:3 #10 0x50f8de in checkout_branch builtin/checkout.c:1646:9 #11 0x50ba12 in checkout_main builtin/checkout.c:2003:9 #12 0x5086c0 in cmd_checkout builtin/checkout.c:2055:8 #13 0x4cd91d in run_builtin git.c:467:11 #14 0x4cb5f3 in handle_builtin git.c:719:3 #15 0x4ccf47 in run_argv git.c:808:4 #16 0x4caf49 in cmd_main git.c:939:19 #17 0x69dc0e in main common-main.c:52:11 #18 0x7faaabd0e349 in __libc_start_main (/lib64/libc.so.6+0x24349) Indirect leak of 48 byte(s) in 3 object(s) allocated from: #0 0x49a85d in malloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145:3 #1 0x9ac084 in do_xmalloc wrapper.c:41:8 #2 0x9ac05a in xmalloc wrapper.c:62:9 #3 0x717de6 in commit_list_append commit.c:1609:35 #4 0x8f1f9b in prepare_revision_walk revision.c:3554:12 #5 0x514170 in orphaned_commit_warning builtin/checkout.c:1185:6 #6 0x512f05 in switch_branches builtin/checkout.c:1250:3 #7 0x50f8de in checkout_branch builtin/checkout.c:1646:9 #8 0x50ba12 in checkout_main builtin/checkout.c:2003:9 #9 0x5086c0 in cmd_checkout builtin/checkout.c:2055:8 #10 0x4cd91d in run_builtin git.c:467:11 #11 0x4cb5f3 in handle_builtin git.c:719:3 #12 0x4ccf47 in run_argv git.c:808:4 #13 0x4caf49 in cmd_main git.c:939:19 #14 0x69dc0e in main common-main.c:52:11 #15 0x7faaabd0e349 in __libc_start_main (/lib64/libc.so.6+0x24349) Signed-off-by: Andrzej Hunt --- revision.c | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/revision.c b/revision.c index 553c0faa9b38..568d73c0b331 100644 --- a/revision.c +++ b/revision.c @@ -1393,20 +1393,20 @@ static int limit_list(struct rev_info *revs) { int slop = SLOP; timestamp_t date = TIME_MAX; - struct commit_list *list = revs->commits; + struct commit_list *original_list = revs->commits; struct commit_list *newlist = NULL; struct commit_list **p = &newlist; struct commit_list *bottom = NULL; struct commit *interesting_cache = NULL; if (revs->ancestry_path) { - bottom = collect_bottom_commits(list); + bottom = collect_bottom_commits(original_list); if (!bottom) die("--ancestry-path given but there are no bottom commits"); } - while (list) { - struct commit *commit = pop_commit(&list); + while (original_list) { + struct commit *commit = pop_commit(&original_list); struct object *obj = &commit->object; show_early_output_fn_t show; @@ -1415,11 +1415,11 @@ static int limit_list(struct rev_info *revs) if (revs->max_age != -1 && (commit->date < revs->max_age)) obj->flags |= UNINTERESTING; - if (process_parents(revs, commit, &list, NULL) < 0) + if (process_parents(revs, commit, &original_list, NULL) < 0) return -1; if (obj->flags & UNINTERESTING) { mark_parents_uninteresting(commit); - slop = still_interesting(list, date, slop, &interesting_cache); + slop = still_interesting(original_list, date, slop, &interesting_cache); if (slop) continue; break; @@ -1452,14 +1452,17 @@ static int limit_list(struct rev_info *revs) * Check if any commits have become TREESAME by some of their parents * becoming UNINTERESTING. */ - if (limiting_can_increase_treesame(revs)) + if (limiting_can_increase_treesame(revs)) { + struct commit_list *list = NULL; for (list = newlist; list; list = list->next) { struct commit *c = list->item; if (c->object.flags & (UNINTERESTING | TREESAME)) continue; update_treesame(revs, c); } + } + free_commit_list(original_list); revs->commits = newlist; return 0; } From patchwork Sun Apr 25 14:16:09 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223299 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9E4CEC433ED for ; Sun, 25 Apr 2021 14:16:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 80B806128B for ; Sun, 25 Apr 2021 14:16:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230312AbhDYORF (ORCPT ); Sun, 25 Apr 2021 10:17:05 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230327AbhDYORE (ORCPT ); Sun, 25 Apr 2021 10:17:04 -0400 Received: from mail-wm1-x334.google.com (mail-wm1-x334.google.com [IPv6:2a00:1450:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 27B4BC06175F for ; Sun, 25 Apr 2021 07:16:24 -0700 (PDT) Received: by mail-wm1-x334.google.com with SMTP id y204so27142265wmg.2 for ; Sun, 25 Apr 2021 07:16:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=1WXyZDq5u1ON4ki7kVTGWTuwGUZchGrEtVmXJ+CkXXc=; b=Cckts4uSlu2ygt8CvJc+hHkGTHNg33ePYT7S1bXOc6wuUWkoIJEiuVynbLBZYFSErR 5nQmOJDc54Fcb3Y9ygqB5d3fYSR9/OvhG4UAH2E8mV7pCBVJNfRt0Ae9Hrk4oJwf7WJV w4dLudWIHx07MXVkhNVBXlWrA9H6avHJ9b9ja5hzGZ1VqA7VXIe9RkMyfScfQgZup89d Jyt90L4JnvxqrRUCfB/H38TnjF2EpETompm2E39CTRQMQAotvW5YhFW3b26p2K7ZYUrg 2sTVGLl4QHcxDBUlcf/fS9gS4IdZmHIGe3tgeI+eqn4WNFIHoaNdplwBkNig55lvtvZH qjAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=1WXyZDq5u1ON4ki7kVTGWTuwGUZchGrEtVmXJ+CkXXc=; b=VKrXsXS6Fi8vTYfJ6phRqt0RrT9lL6A5Zo/WlOYyitq3gM+HXKT8nYpjDUcjNgZiZE 0BZTOgqkxlCSoOg4JJ2OSVUWTljfRraDWWkeEgTmNSYW3lPtKX20x5xYEIshkoMPB8VQ F705UeL+7uKxVFrRZMK8oavM8XoH6xwyG1VBhGcGD8OG7ooLVAr52JLr4bF//NoVPDhL wVdrX+OVxd5I0cY88UHgAjFFYg4vNhFtuqJvMqCB2/DloHhlkHrzEmgX+7DHLxEITSRW IojTveiROhkrA3Mmia/+AeIUKas7+ZxiY3Qx+2oZ7rT3dKd+tYyF0GQX6Jx81c2ZIphm Xjzw== X-Gm-Message-State: AOAM530r6Z/YKLdvchbkFPQiNxpLneeGNhwNYXjXrXLqLFsfYTrIuApn Uo0uVZMBCWSH8usO7bC/993+v+6WdRY= X-Google-Smtp-Source: ABdhPJy9RiDwrsB9ZCtOts6g+HNXYLAMd8GoN65gMQWX/XFDJx+MsZPR27hH0B0lE4asdka0LSQh/Q== X-Received: by 2002:a1c:c3d4:: with SMTP id t203mr14696526wmf.32.1619360182987; Sun, 25 Apr 2021 07:16:22 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id f6sm15399523wrt.19.2021.04.25.07.16.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:22 -0700 (PDT) Message-Id: <9ad3d8e3fbf4ebb0622f3b68b13ae34908ac5b87.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:09 +0000 Subject: [PATCH v2 02/12] wt-status: fix multiple small leaks Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt rev.prune_data is populated (in multiple functions) via copy_pathspec, and therefore needs to be cleared after running the diff in those functions. rev(_info).pending is populated indirectly via setup_revisions, and also needs to be cleared once diffing is done. These leaks were found while running t0008 or t0021. The rev.prune_data leaks are small (80B) but noisy, hence I won't bother including their logs - the rev.pending leaks are bigger, and can happen early in the course of other commands, and therefore possibly more valuable to fix - see example log from a rebase below: Direct leak of 2048 byte(s) in 1 object(s) allocated from: #0 0x49ab79 in realloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:164:3 #1 0x9ac2a6 in xrealloc wrapper.c:126:8 #2 0x83da03 in add_object_array_with_path object.c:337:3 #3 0x8f5d8a in add_pending_object_with_path revision.c:329:2 #4 0x8ea50b in add_pending_object_with_mode revision.c:336:2 #5 0x8ea4fd in add_pending_object revision.c:342:2 #6 0x8ea610 in add_head_to_pending revision.c:354:2 #7 0x9b55f5 in has_uncommitted_changes wt-status.c:2474:2 #8 0x9b58c4 in require_clean_work_tree wt-status.c:2553:6 #9 0x606bcc in cmd_rebase builtin/rebase.c:1970:6 #10 0x4cd91d in run_builtin git.c:467:11 #11 0x4cb5f3 in handle_builtin git.c:719:3 #12 0x4ccf47 in run_argv git.c:808:4 #13 0x4caf49 in cmd_main git.c:939:19 #14 0x69dc0e in main common-main.c:52:11 #15 0x7f2d18909349 in __libc_start_main (/lib64/libc.so.6+0x24349) Indirect leak of 5 byte(s) in 1 object(s) allocated from: #0 0x486834 in strdup ../projects/compiler-rt/lib/asan/asan_interceptors.cpp:452:3 #1 0x9ac048 in xstrdup wrapper.c:29:14 #2 0x83da8d in add_object_array_with_path object.c:349:17 #3 0x8f5d8a in add_pending_object_with_path revision.c:329:2 #4 0x8ea50b in add_pending_object_with_mode revision.c:336:2 #5 0x8ea4fd in add_pending_object revision.c:342:2 #6 0x8ea610 in add_head_to_pending revision.c:354:2 #7 0x9b55f5 in has_uncommitted_changes wt-status.c:2474:2 #8 0x9b58c4 in require_clean_work_tree wt-status.c:2553:6 #9 0x606bcc in cmd_rebase builtin/rebase.c:1970:6 #10 0x4cd91d in run_builtin git.c:467:11 #11 0x4cb5f3 in handle_builtin git.c:719:3 #12 0x4ccf47 in run_argv git.c:808:4 #13 0x4caf49 in cmd_main git.c:939:19 #14 0x69dc0e in main common-main.c:52:11 #15 0x7f2d18909349 in __libc_start_main (/lib64/libc.so.6+0x24349) SUMMARY: AddressSanitizer: 2053 byte(s) leaked in 2 allocation(s). Signed-off-by: Andrzej Hunt --- wt-status.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/wt-status.c b/wt-status.c index 1aed68c43c26..34886655dbcc 100644 --- a/wt-status.c +++ b/wt-status.c @@ -616,6 +616,7 @@ static void wt_status_collect_changes_worktree(struct wt_status *s) rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score; copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_files(&rev, 0); + clear_pathspec(&rev.prune_data); } static void wt_status_collect_changes_index(struct wt_status *s) @@ -652,6 +653,8 @@ static void wt_status_collect_changes_index(struct wt_status *s) rev.diffopt.rename_score = s->rename_score >= 0 ? s->rename_score : rev.diffopt.rename_score; copy_pathspec(&rev.prune_data, &s->pathspec); run_diff_index(&rev, 1); + object_array_clear(&rev.pending); + clear_pathspec(&rev.prune_data); } static void wt_status_collect_changes_initial(struct wt_status *s) @@ -2480,6 +2483,7 @@ int has_uncommitted_changes(struct repository *r, diff_setup_done(&rev_info.diffopt); result = run_diff_index(&rev_info, 1); + object_array_clear(&rev_info.pending); return diff_result_code(&rev_info.diffopt, result); } From patchwork Sun Apr 25 14:16:10 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223301 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A0AF5C43461 for ; Sun, 25 Apr 2021 14:16:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 78E9960232 for ; Sun, 25 Apr 2021 14:16:28 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230340AbhDYORG (ORCPT ); Sun, 25 Apr 2021 10:17:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39026 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230329AbhDYORE (ORCPT ); Sun, 25 Apr 2021 10:17:04 -0400 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id AD0EAC061574 for ; Sun, 25 Apr 2021 07:16:24 -0700 (PDT) Received: by mail-wm1-x32e.google.com with SMTP id p10-20020a1c544a0000b02901387e17700fso3664623wmi.2 for ; Sun, 25 Apr 2021 07:16:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=/S2cCAihu244sZ8mK3Psrc+xkBPmsXsW5gez3ZTu/JU=; b=nSLfBqYuy5oNkqFHHBOt3wPAjMXgbzzjPEyc7ovjcOMSaPgQJMSo/6qLt5QfQiZJAG 2XsLJDrjJ1ZnfwmS4kbB4pLTIxHxXJe1/hu9aMakldRAgcKs7OWNb6XQr/jPo+tQDjma 7diPse5QsOvWrvyZ65baepp7xAHzc8U/SZD8cYvDd/8zfNi1EPshi/7Envr2CZFfWQkv 4WRIJOKgKSms7LaiHCu90c9wV0P80nL5K/OvDe40SF/T0K8d9biFo5XVFdzJoAK6GQFc lsJ6f76dTKnjT1+OZGQOK8m7h4rciw0hVuwm1aNV2DFFgqa/tRt6QWXSCprGEAiCkmZ9 xqmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=/S2cCAihu244sZ8mK3Psrc+xkBPmsXsW5gez3ZTu/JU=; b=iulbCgywljIIEGnYoKr+TnZ7BioeLmBwEXElQvL8lV9F9Xv8vjB8lbB+Do68mbcFzI N4ChlcOufAXNbUsIloeBTA0JZME4EydBHostFknbYVG3zQTGC52VXMAvrrLSb4Nhbqn5 2BEVHuNjL0OSUSZbVjt9YWCRp9dtDm1vsY0zGZJfJvMEO04J7eSNWs2hmSXeOQFnLOWq 5TDvcSxZ/3q9bhZitNWTDWhGzXSETA0qp5/KgIcBWKlO3IpCi9DiUmFgQUcfph6YZMTF 9drjBwZIiCSB/P+QDz9vRvMHDTg90Rpl1PSKK+yBR6OTE+6O7z3JnXs6KtwQlwjza3Tu CfIg== X-Gm-Message-State: AOAM5319eqhOaC0RKKKjDWjG0LUoMwiD2bMZjXEZ79InkDX4+BuqrDS9 s+fVLUi/guSBdR4PcvbMI4JwNXJTRc4= X-Google-Smtp-Source: ABdhPJwS2/9pd2DewL9ZxGRtvkfB52gp6IZ87tsOpj15R5UxzPDmb6pyyiG9ZdNZfGbR6krDMJHOFg== X-Received: by 2002:a1c:a7d1:: with SMTP id q200mr15255615wme.13.1619360183523; Sun, 25 Apr 2021 07:16:23 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id z7sm1744797wrl.11.2021.04.25.07.16.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:23 -0700 (PDT) Message-Id: <76519acdfee7b7f45dc1a8b52b2083fb4fa03b3f.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:10 +0000 Subject: [PATCH v2 03/12] ls-files: free max_prefix when done Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt common_prefix() returns a new string, which we store in max_prefix - this string needs to be freed to avoid a leak. This leak is happening in cmd_ls_files, hence is of no real consequence - an UNLEAK would be just as good, but we might as well free the string properly. Leak found while running t0002, see output below: Direct leak of 8 byte(s) in 1 object(s) allocated from: #0 0x49a85d in malloc /home/abuild/rpmbuild/BUILD/llvm-11.0.0.src/build/../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145:3 #1 0x9ab1b4 in do_xmalloc wrapper.c:41:8 #2 0x9ab248 in do_xmallocz wrapper.c:75:8 #3 0x9ab22a in xmallocz wrapper.c:83:9 #4 0x9ab2d7 in xmemdupz wrapper.c:99:16 #5 0x78d6a4 in common_prefix dir.c:191:15 #6 0x5aca48 in cmd_ls_files builtin/ls-files.c:669:16 #7 0x4cd92d in run_builtin git.c:453:11 #8 0x4cb5fa in handle_builtin git.c:704:3 #9 0x4ccf57 in run_argv git.c:771:4 #10 0x4caf49 in cmd_main git.c:902:19 #11 0x69ce2e in main common-main.c:52:11 #12 0x7f64d4d94349 in __libc_start_main (/lib64/libc.so.6+0x24349) Signed-off-by: Andrzej Hunt --- builtin/ls-files.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/builtin/ls-files.c b/builtin/ls-files.c index 60a2913a01e9..84448b360120 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -603,7 +603,7 @@ static int option_parse_exclude_standard(const struct option *opt, int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) { int require_work_tree = 0, show_tag = 0, i; - const char *max_prefix; + char *max_prefix; struct dir_struct dir; struct pattern_list *pl; struct string_list exclude_list = STRING_LIST_INIT_NODUP; @@ -781,5 +781,6 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) } dir_clear(&dir); + free(max_prefix); return 0; } From patchwork Sun Apr 25 14:16:11 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223305 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13DBCC433B4 for ; Sun, 25 Apr 2021 14:16:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E98C960232 for ; Sun, 25 Apr 2021 14:16:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230366AbhDYORH (ORCPT ); Sun, 25 Apr 2021 10:17:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39030 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230311AbhDYORF (ORCPT ); Sun, 25 Apr 2021 10:17:05 -0400 Received: from mail-wm1-x333.google.com (mail-wm1-x333.google.com [IPv6:2a00:1450:4864:20::333]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 65B44C061756 for ; Sun, 25 Apr 2021 07:16:25 -0700 (PDT) Received: by mail-wm1-x333.google.com with SMTP id f15-20020a05600c4e8fb029013f5599b8a9so1681588wmq.1 for ; Sun, 25 Apr 2021 07:16:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=y5a3mcCcFnlbBQlIZ6kqrlD9aVEgZBkUVW53CuJkvac=; b=G3TKTqYYnzTRtBHOpPceQnWDjiGi5Kt880495gGr0vyoE3JhJZLaHlxxnvfzn6Ep7G TIZi+H5gciNW8lBOdII8rFU4Zq68qAC7YMG0/jTxZ11je1C7XEQMYduSioIwXRav1h9a QFDe/DzUADVY6EChTAxwcp811qF2oGJqRSTaxZJOp+gKHWlQvnW2kJ5exWSVtRVF2z3a +i5sIe0yf21ImeH2Wo3PYWPPwSEJgM7S3pcnJCH4HLJmUhqvyHnSBtTL8F2Aqpq9HE0A aft8/NVovoW3lyUZ7zax9/p6mtNJMjAK3/SH8MqahPzjFtenjDBEqXGO/qprhcYyv7mG XT/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=y5a3mcCcFnlbBQlIZ6kqrlD9aVEgZBkUVW53CuJkvac=; b=EZHb+GNBpiLiRRxI5P0cbDgs1zf0M1YwMCEf1u20ubSuPViv1lCH/lITPpiQcK76Ki 5xnNxDXcWoeH3YTN+/Vj0KRuGWn28C8sFd1QoEQPvAPOBMNsHPjPEj+Q051mEtWQCisy DVBIyYI8mWd7mY9tBDgzH73GEXhU2j6P66GwTt8CQRUBPIm8cEuIvIXzy9NZqnOVeiQu CW3KIQnAZ/qAM+dTtHXHM77AixaJ2jeWmzxA/D93+lZWcOmtVle7wsbM42uP6BXRihi3 rjpTz6NqcAzW1JILeQiAgvmd/tSgeAxiNkCDYzksFVm3+5ZLc0D5sPDzCZwPv5s2eULF ZXEg== X-Gm-Message-State: AOAM530lq2uP3vHZTP7KadgGcpFREo0aTIRFXdiwuYuRUpkONvb+iYYl 7jCql3qNgozAcJ2hHNUVLyGer2bRTpw= X-Google-Smtp-Source: ABdhPJx1Iq0ODXp8qgDcMGjTUdAnI6VS7vYiZ4gAShs75jPgIUqknPCCxYaVZ3n9Pe2974XJoYkeWA== X-Received: by 2002:a1c:7516:: with SMTP id o22mr15876291wmc.91.1619360184011; Sun, 25 Apr 2021 07:16:24 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id a2sm15371767wmn.48.2021.04.25.07.16.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:23 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:11 +0000 Subject: [PATCH v2 04/12] bloom: clear each bloom_key after use Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt fill_bloom_key() allocates memory into bloom_key, we need to clean that up once the key is no longer needed. This leak was found while running t0002-t0099. Although this leak is happening in code being called from a test-helper, the same code is also used in various locations around git, and can therefore happen during normal usage too. Gabor's analysis shows that peak-memory usage during 'git commit-graph write' is reduced on the order of 10% for a selection of larger repos (along with an even larger reduction if we override modified path bloom filter limits): https://lore.kernel.org/git/20210411072651.GF2947267@szeder.dev/ LSAN output: Direct leak of 308 byte(s) in 11 object(s) allocated from: #0 0x49a5e2 in calloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:154:3 #1 0x6f4032 in xcalloc wrapper.c:140:8 #2 0x4f2905 in fill_bloom_key bloom.c:137:28 #3 0x4f34c1 in get_or_compute_bloom_filter bloom.c:284:4 #4 0x4cb484 in get_bloom_filter_for_commit t/helper/test-bloom.c:43:11 #5 0x4cb072 in cmd__bloom t/helper/test-bloom.c:97:3 #6 0x4ca7ef in cmd_main t/helper/test-tool.c:121:11 #7 0x4caace in main common-main.c:52:11 #8 0x7f798af95349 in __libc_start_main (/lib64/libc.so.6+0x24349) SUMMARY: AddressSanitizer: 308 byte(s) leaked in 11 allocation(s). Signed-off-by: Andrzej Hunt --- bloom.c | 1 + 1 file changed, 1 insertion(+) diff --git a/bloom.c b/bloom.c index 52b87474c6eb..5e297038bb1f 100644 --- a/bloom.c +++ b/bloom.c @@ -283,6 +283,7 @@ struct bloom_filter *get_or_compute_bloom_filter(struct repository *r, struct bloom_key key; fill_bloom_key(e->path, strlen(e->path), &key, settings); add_key_to_filter(&key, filter, settings); + clear_bloom_key(&key); } cleanup: From patchwork Sun Apr 25 14:16:12 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223303 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 27B26C43460 for ; Sun, 25 Apr 2021 14:16:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0A78E61364 for ; Sun, 25 Apr 2021 14:16:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230377AbhDYORI (ORCPT ); Sun, 25 Apr 2021 10:17:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39040 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230327AbhDYORF (ORCPT ); Sun, 25 Apr 2021 10:17:05 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D4886C061574 for ; Sun, 25 Apr 2021 07:16:25 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id n84so1358692wma.0 for ; Sun, 25 Apr 2021 07:16:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=wIX81AgrL0S6PqMg9w1doAN+VWSJB1WdVOmEUxYaW8g=; b=nL6cY6PtPB07NIOxujV+l4h6Zn+d8ZdlSm3+QxHnSxMNjOJTOfvd3qHTpCzq0Qu8xL AM/2E3NmutW2tdNyvkFNkvCxoayBTy9X/eQDN8qsKSQ7nME2+N3OXZVTF6g1/62fyd+N glq7BhTP8Ficfz2AhFpYnyIdW0tahTKUbn5BLeE8gqN0qqQ89s44cspOxAQ6XSPIeNUT KrBGLYF/mmFc1Ze4NZaLsu2UlFhlXxi1HwpsS8kS/1XzR5J1mwrfSc54s3MaiI4TFAO8 u07IIfULdEe4pNTc1KELZ9Vx2tc9pLgtHobpjSlqmw/2iXW4oxktxFgZ/qdxLsSeqPPw duTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=wIX81AgrL0S6PqMg9w1doAN+VWSJB1WdVOmEUxYaW8g=; b=Q7/pP7UEU+WgW7+TVavUsncGybo3vrCyeiiPZg50Hc9ICsBcF8VGe9QORkaD9JcIfN aXXP1HWfMEuL687AtHcprg7f7xy15QVd5/r2nCSFu6aQ6kR34o1AofxYQdx9nOSkxfE/ yccONWwTPHrGTqTMG46FtsKIrP1hmKrYTYDLOwWmVLr0G2BaTI3Utkw9yY/jVR96H7om cHEC+fNyRQ8PAoZhJ6V/jfnLC13ztFFXg3dpRGvN3KuqLS6QXU/XsUdUQ9sQx5KIpqXE 5W5JMvq6d4gCRsqEup7ceduSw6oh6YclzmrP2Tz5A/cqqlKrGlyKXQDevaB32uZR0TBq mZrQ== X-Gm-Message-State: AOAM531XinS2bnmdPE/84BJtVwuaaB+SU0FXPMwoTITx7+GJ+l0+XwxQ XnfVq1byaiG+us3FoVN2haEl2q0aLt8= X-Google-Smtp-Source: ABdhPJwZWEPrd2KSlFFF+IuXqQkIxIWp41sJ5r1OzVGLlCV+Us6v5mXzDzfjirjyBUrJ4Ii4UJs3Sw== X-Received: by 2002:a1c:7515:: with SMTP id o21mr14511512wmc.90.1619360184681; Sun, 25 Apr 2021 07:16:24 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id g197sm1052263wme.43.2021.04.25.07.16.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:24 -0700 (PDT) Message-Id: <154c6714f30596db84711b5cd639c62ace5b721b.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:12 +0000 Subject: [PATCH v2 05/12] branch: FREE_AND_NULL instead of NULL'ing real_ref Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt real_ref was previously populated by dwim_ref(), which allocates new memory. We need to make sure to free real_ref when discarding it. (real_ref is already being freed at the end of create_branch() - but if we discard it early then it will leak.) This fixes the following leak found while running t0002-t0099: Direct leak of 5 byte(s) in 1 object(s) allocated from: #0 0x486954 in strdup /home/abuild/rpmbuild/BUILD/llvm-11.0.0.src/build/../projects/compiler-rt/lib/asan/asan_interceptors.cpp:452:3 #1 0xdd6484 in xstrdup wrapper.c:29:14 #2 0xc0f658 in expand_ref refs.c:671:12 #3 0xc0ecf1 in repo_dwim_ref refs.c:644:22 #4 0x8b1184 in dwim_ref ./refs.h:162:9 #5 0x8b0b02 in create_branch branch.c:284:10 #6 0x550cbb in update_refs_for_switch builtin/checkout.c:1046:4 #7 0x54e275 in switch_branches builtin/checkout.c:1274:2 #8 0x548828 in checkout_branch builtin/checkout.c:1668:9 #9 0x541306 in checkout_main builtin/checkout.c:2025:9 #10 0x5395fa in cmd_checkout builtin/checkout.c:2077:8 #11 0x4d02a8 in run_builtin git.c:467:11 #12 0x4cbfe9 in handle_builtin git.c:719:3 #13 0x4cf04f in run_argv git.c:808:4 #14 0x4cb85a in cmd_main git.c:939:19 #15 0x820cf6 in main common-main.c:52:11 #16 0x7f30bd9dd349 in __libc_start_main (/lib64/libc.so.6+0x24349) Signed-off-by: Andrzej Hunt --- branch.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/branch.c b/branch.c index b71a2de29dbe..2260325d58c0 100644 --- a/branch.c +++ b/branch.c @@ -294,7 +294,7 @@ void create_branch(struct repository *r, if (explicit_tracking) die(_(upstream_not_branch), start_name); else - real_ref = NULL; + FREE_AND_NULL(real_ref); } break; default: From patchwork Sun Apr 25 14:16:13 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223307 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3CE77C43462 for ; Sun, 25 Apr 2021 14:16:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 22DFD6128B for ; Sun, 25 Apr 2021 14:16:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230382AbhDYORI (ORCPT ); Sun, 25 Apr 2021 10:17:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39042 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230332AbhDYORG (ORCPT ); Sun, 25 Apr 2021 10:17:06 -0400 Received: from mail-wm1-x32a.google.com (mail-wm1-x32a.google.com [IPv6:2a00:1450:4864:20::32a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6827EC061756 for ; Sun, 25 Apr 2021 07:16:26 -0700 (PDT) Received: by mail-wm1-x32a.google.com with SMTP id y5-20020a05600c3645b0290132b13aaa3bso3663013wmq.1 for ; Sun, 25 Apr 2021 07:16:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=NBCuBsyzyid5FYNFzT/nqU+gxu/TAB8898oEPkxFX2Q=; b=dxKEVanRMxloG/pW21QwesWNGkSqUY7iPS0ertcKPnQ11Y+rT0j0FGLNythVZbaw/x IOvfq7hkWQ4Igv1ugbLgdeG2bhckexNU453BpR7Qjo7T1cKfrSDQMkfAJCHN2U9XVNyM scMTSE7PKFOElGSD2Tx3ZjVNjwq8UPSqIbDkTcVMAo3EElIjnVH3slh7IS/n4/ubHUIm tp5ydv02fh0xE+zIH0uw0JnL/QiHAsWGOSuFDRn2UQDn+EYnAJzmCyErnfWrb1/+iyS8 /KH6QOe5e4quxLQvLNvDpJQFTGmykq9kRYvscXPiVLQP/PF8nndmr8LdgAwrm3rhVqd/ 6Dmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=NBCuBsyzyid5FYNFzT/nqU+gxu/TAB8898oEPkxFX2Q=; b=q6tlrEn5vJXGHixjTPZGWiWJsZOE8WFYOcV3fvYhHvhWb/0u0bfzs5AHz+X0C0KDOk 7GxmB8Kp9B8L1jJwfwo4lYRWnhEvHygHrNrNhEYZ/nvUfNj0YTgKFBGuwFaJONerCdmE 4Q+iXK4+0g4hCVIkcaBspEfPIo4FG8P/KkAg1H72q7nnVr7QE8pdgw5u3fbx/xBoTIgT pfirRPq0lgdTPqkkY6sJkh6iFay9EuR+GSRP5WvtNENrGwaoHdI4sV9Ieyj+HonKNDeZ J94BgUi5pruW2YGWhIAPmxREEtiHsTn1b2iaj1PFN2HJ+0eLzaIqtGV1jHUuGvnZoW5Y SlsA== X-Gm-Message-State: AOAM530wuom3hX++bmoRL1h2zhEHo7vFWw927985kewAJDs48t6Exsao 6ONValE8IugjQoJHe/LmC5HLw+4NWS8= X-Google-Smtp-Source: ABdhPJwTgGt5Pi8jhhL0QFn/yfUB5+i8sZpVABpvdhqppSExBVfAcwFYfKmS9g7ViHseVR815claLQ== X-Received: by 2002:a7b:c44d:: with SMTP id l13mr15615060wmi.160.1619360185226; Sun, 25 Apr 2021 07:16:25 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id p13sm18429088wrt.0.2021.04.25.07.16.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:24 -0700 (PDT) Message-Id: <0ae6224e01bc5d7da47b844600e64e44d7805fdb.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:13 +0000 Subject: [PATCH v2 06/12] builtin/bugreport: don't leak prefixed filename Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt prefix_filename() returns newly allocated memory, and strbuf_addstr() doesn't take ownership of its inputs. Therefore we have to make sure to store and free prefix_filename()'s result. As this leak is in cmd_bugreport(), we could just as well UNLEAK the prefix - but there's no good reason not to just free it properly. This leak was found while running t0091, see output below: Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x49ab79 in realloc /home/abuild/rpmbuild/BUILD/llvm-11.0.0.src/build/../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:164:3 #1 0x9acc66 in xrealloc wrapper.c:126:8 #2 0x93baed in strbuf_grow strbuf.c:98:2 #3 0x93c6ea in strbuf_add strbuf.c:295:2 #4 0x69f162 in strbuf_addstr ./strbuf.h:304:2 #5 0x69f083 in prefix_filename abspath.c:277:2 #6 0x4fb275 in cmd_bugreport builtin/bugreport.c:146:9 #7 0x4cd91d in run_builtin git.c:467:11 #8 0x4cb5f3 in handle_builtin git.c:719:3 #9 0x4ccf47 in run_argv git.c:808:4 #10 0x4caf49 in cmd_main git.c:939:19 #11 0x69df9e in main common-main.c:52:11 #12 0x7f523a987349 in __libc_start_main (/lib64/libc.so.6+0x24349) Signed-off-by: Andrzej Hunt --- builtin/bugreport.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/builtin/bugreport.c b/builtin/bugreport.c index ad3cc9c02f62..9915a5841def 100644 --- a/builtin/bugreport.c +++ b/builtin/bugreport.c @@ -129,6 +129,7 @@ int cmd_bugreport(int argc, const char **argv, const char *prefix) char *option_output = NULL; char *option_suffix = "%Y-%m-%d-%H%M"; const char *user_relative_path = NULL; + char *prefixed_filename; const struct option bugreport_options[] = { OPT_STRING('o', "output-directory", &option_output, N_("path"), @@ -142,9 +143,9 @@ int cmd_bugreport(int argc, const char **argv, const char *prefix) bugreport_usage, 0); /* Prepare the path to put the result */ - strbuf_addstr(&report_path, - prefix_filename(prefix, - option_output ? option_output : "")); + prefixed_filename = prefix_filename(prefix, + option_output ? option_output : ""); + strbuf_addstr(&report_path, prefixed_filename); strbuf_complete(&report_path, '/'); strbuf_addstr(&report_path, "git-bugreport-"); @@ -189,6 +190,7 @@ int cmd_bugreport(int argc, const char **argv, const char *prefix) fprintf(stderr, _("Created new report at '%s'.\n"), user_relative_path); + free(prefixed_filename); UNLEAK(buffer); UNLEAK(report_path); return !!launch_editor(report_path.buf, NULL, NULL); From patchwork Sun Apr 25 14:16:14 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223309 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 221D2C43460 for ; Sun, 25 Apr 2021 14:16:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id F0A006128B for ; Sun, 25 Apr 2021 14:16:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230394AbhDYORK (ORCPT ); Sun, 25 Apr 2021 10:17:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39048 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230350AbhDYORH (ORCPT ); Sun, 25 Apr 2021 10:17:07 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 00E01C061761 for ; Sun, 25 Apr 2021 07:16:27 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id c4so14212963wrt.8 for ; Sun, 25 Apr 2021 07:16:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=6Cly6c+pVEn0MrqzZoU7qCjU5jWrqrApZjLclDmdUlc=; b=OprIiKCXlBRR5rl2VsXhDAomCd7VAM5kzuo1nZ3yLG/rwnY1UgNtOlx+Y2JCv3udSM yHempRyoMlfu6MjqOmBhgYxdebq4xiwmN8XpzFWZnzvPrbvR/nM/E9hSsSIh5fkNi5jA EdeLjUt8NSWLpBwlHmlLSRzuLYdi3VIAyODCXIyoqSCNsuP2Gnq2Gv19Z/Fsu1R5Y9E1 UWtNHscF3DpQnMqZr3WtNEkRWEMWtb9F3RGhPpgPKTHTaRLXGDABkIyyPSpsIFdTUqi4 B2TFQuaNrwUCK8CA4+K29jq6UtbkgAl7bRwerB/HAqdCxAv7hL1ftNe23oz2cXABYQa6 YMgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=6Cly6c+pVEn0MrqzZoU7qCjU5jWrqrApZjLclDmdUlc=; b=VzbpyS/fYduP+FIJMe/ZmgafiEoJ7tK0E0p7m30F44zExworpI13Fw0F8qPQ7jxGUw 6Gu+wfevz7qRY2zsGU9yx2tqbQWhxNW2WoMEq8qKLL6d090238sKLj+TFV5ULi0toYwA 9P42TNp+e0UMOfE2624T13rO+2rKNqXlha+Mt/nMvK7aXPjs/ux7mU8DgoAc2wWzg4pe vkNFI14CohWm1ycLsIKs062KkT0g1Ktt371DhS+82jw3gH8/JXQvyEOsfOshC90rNjAm M4c7ApU0IQvUEIaiJdtNQgWv4mePW7M/+EJhDG/XoPhOZCtqBneS62weCPs1XylTz4oa f9uA== X-Gm-Message-State: AOAM532yV9ZteXvocFkgpJE5H6vOXE4otp7meoVhm0VlLbFl/kb43Xkt +DQLKXgS3Qa14TQ4vc+Xebk6LOaPr3g= X-Google-Smtp-Source: ABdhPJzMMjMV1Kc45kdYJWetA5jIWny1bGBKegXSui2SDLZk3VJ8xhLqcy+IwaOeg0/0511AMM0buA== X-Received: by 2002:a5d:6a89:: with SMTP id s9mr17398995wru.157.1619360185794; Sun, 25 Apr 2021 07:16:25 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id u8sm15114876wrp.66.2021.04.25.07.16.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:25 -0700 (PDT) Message-Id: <693ea82490df68a013582a1f3e4aa8920bfa0cee.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:14 +0000 Subject: [PATCH v2 07/12] builtin/check-ignore: clear_pathspec before returning Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt parse_pathspec() allocates new memory into pathspec, therefore we need to free it when we're done. An UNLEAK would probably be just as good here - but clear_pathspec() is not much more work so we might as well use it. check_ignore() is either called once directly from cmd_check_ignore() (in which case the leak really doesnt matter), or it can be called multiple times in a loop from check_ignore_stdin_paths(), in which case we're potentially leaking multiple times - but even in this scenario the leak is so small as to have no real consequence. Found while running t0008: Direct leak of 112 byte(s) in 1 object(s) allocated from: #0 0x49a85d in malloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145:3 #1 0x9aca44 in do_xmalloc wrapper.c:41:8 #2 0x9aca1a in xmalloc wrapper.c:62:9 #3 0x873c17 in parse_pathspec pathspec.c:582:2 #4 0x503eb8 in check_ignore builtin/check-ignore.c:90:2 #5 0x5038af in cmd_check_ignore builtin/check-ignore.c:190:17 #6 0x4cd91d in run_builtin git.c:467:11 #7 0x4cb5f3 in handle_builtin git.c:719:3 #8 0x4ccf47 in run_argv git.c:808:4 #9 0x4caf49 in cmd_main git.c:939:19 #10 0x69e43e in main common-main.c:52:11 #11 0x7f18bb0dd349 in __libc_start_main (/lib64/libc.so.6+0x24349) Indirect leak of 65 byte(s) in 1 object(s) allocated from: #0 0x49ab79 in realloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:164:3 #1 0x9acc46 in xrealloc wrapper.c:126:8 #2 0x93baed in strbuf_grow strbuf.c:98:2 #3 0x93d696 in strbuf_vaddf strbuf.c:392:3 #4 0x9400c6 in xstrvfmt strbuf.c:979:2 #5 0x940253 in xstrfmt strbuf.c:989:8 #6 0x92b72a in prefix_path_gently setup.c:115:15 #7 0x87442d in init_pathspec_item pathspec.c:439:11 #8 0x873cef in parse_pathspec pathspec.c:589:3 #9 0x503eb8 in check_ignore builtin/check-ignore.c:90:2 #10 0x5038af in cmd_check_ignore builtin/check-ignore.c:190:17 #11 0x4cd91d in run_builtin git.c:467:11 #12 0x4cb5f3 in handle_builtin git.c:719:3 #13 0x4ccf47 in run_argv git.c:808:4 #14 0x4caf49 in cmd_main git.c:939:19 #15 0x69e43e in main common-main.c:52:11 #16 0x7f18bb0dd349 in __libc_start_main (/lib64/libc.so.6+0x24349) Indirect leak of 2 byte(s) in 1 object(s) allocated from: #0 0x486834 in strdup ../projects/compiler-rt/lib/asan/asan_interceptors.cpp:452:3 #1 0x9ac9e8 in xstrdup wrapper.c:29:14 #2 0x874542 in init_pathspec_item pathspec.c:468:20 #3 0x873cef in parse_pathspec pathspec.c:589:3 #4 0x503eb8 in check_ignore builtin/check-ignore.c:90:2 #5 0x5038af in cmd_check_ignore builtin/check-ignore.c:190:17 #6 0x4cd91d in run_builtin git.c:467:11 #7 0x4cb5f3 in handle_builtin git.c:719:3 #8 0x4ccf47 in run_argv git.c:808:4 #9 0x4caf49 in cmd_main git.c:939:19 #10 0x69e43e in main common-main.c:52:11 #11 0x7f18bb0dd349 in __libc_start_main (/lib64/libc.so.6+0x24349) SUMMARY: AddressSanitizer: 179 byte(s) leaked in 3 allocation(s). Signed-off-by: Andrzej Hunt --- builtin/check-ignore.c | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/check-ignore.c b/builtin/check-ignore.c index 3c652748d58c..467e92cc7b80 100644 --- a/builtin/check-ignore.c +++ b/builtin/check-ignore.c @@ -118,6 +118,7 @@ static int check_ignore(struct dir_struct *dir, num_ignored++; } free(seen); + clear_pathspec(&pathspec); return num_ignored; } From patchwork Sun Apr 25 14:16:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223315 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 097CDC433ED for ; Sun, 25 Apr 2021 14:16:36 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E06B461369 for ; Sun, 25 Apr 2021 14:16:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230414AbhDYORM (ORCPT ); Sun, 25 Apr 2021 10:17:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39058 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230369AbhDYORI (ORCPT ); Sun, 25 Apr 2021 10:17:08 -0400 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [IPv6:2a00:1450:4864:20::32f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7CC86C06138B for ; Sun, 25 Apr 2021 07:16:27 -0700 (PDT) Received: by mail-wm1-x32f.google.com with SMTP id f195-20020a1c1fcc0000b029012eb88126d7so3670045wmf.3 for ; Sun, 25 Apr 2021 07:16:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=xBQHDAQkmLXliEEpOaUXRyoJMpH3nXNNFwi39q0+Dhw=; b=VFao026D/Qa2wipdrTNrsyFT4CG1kIaipccvxA3fEcn9ebxnf3BxkhZNFEnJ1zleVw da9IjSUwwO8pI5/H+AkjSvjVgFxRRz75IFTUq+lrTxZzdy6BhutKERHWvvUa9Eb6xUm4 hY4mbXo1V1GThOOlmQGWAYs6gXrpfzezhBp1s4ROxbFqLUcP6x4yCptk0PKEFnGakgi3 34u8KFgjDFMs8hY9VK4VkVMhWg5SHj07+KHZ7gdHHg/srnLVqAuecjYX7b6VSpEPNAzx YGP53Ktr5viAKGqBOGhXg93fqWOq383I50oqGobwrypjMAId2znRonckrlQT3FtpZlzW ZzDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=xBQHDAQkmLXliEEpOaUXRyoJMpH3nXNNFwi39q0+Dhw=; b=ABn4ZsI5nMnP24s9eny7jF3v1XasvzVkNssY6uVatvSy3a23VKLSFAXjQvpUUrbPIy rKPBoBsociLrSFNuWvx3R3zNowzaSEGVwG6yfAMhzREdUWMyfuZl++zU3S30sXkQZuR9 tG7YDCeY0zVbQk5CVLqGL6pkcdJ2d7D357HBSRJpQkEtOb+xsxg7+UNwfqXU+up+ZTqt lYBLR7vi1eaLfgUhqwSZ8dtLUk8fwzNNW2QcbeQALnhn4UfM00Y+w1o4bklaKPlKuymQ ZduUshzK+BFW4RCDAmpdvvI9cEzapSVmk+hv3RZXEpDdD4FISzeIzJRbSL30TKhyJlr0 pPmA== X-Gm-Message-State: AOAM531x3Dfz7nrx0Ka/kFGQood9D6pREPpBYKw7bf4kZ5oE4gmHTJhk x+wvse7Lf24R51/mWU4PJN/7QJY2ysc= X-Google-Smtp-Source: ABdhPJwRuPxQ7aZsiPaiuCfZ6EDKyr0HlxAwG1etJH+24FjOgc0tob6olbKIt6VTsGL5XchdydJJUA== X-Received: by 2002:a7b:c4d9:: with SMTP id g25mr16071271wmk.182.1619360186266; Sun, 25 Apr 2021 07:16:26 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id c77sm13376042wme.37.2021.04.25.07.16.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:26 -0700 (PDT) Message-Id: <20c5f2e68c54bdd7d07acdc256f8895cabbca6c2.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:15 +0000 Subject: [PATCH v2 08/12] builtin/checkout: clear pending objects after diffing Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt add_pending_object() populates rev.pending, we need to take care of clearing it once we're done. This code is run close to the end of a checkout, therefore this leak seems like it would have very little impact. See also LSAN output from t0020 below: Direct leak of 2048 byte(s) in 1 object(s) allocated from: #0 0x49ab79 in realloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:164:3 #1 0x9acc46 in xrealloc wrapper.c:126:8 #2 0x83e3a3 in add_object_array_with_path object.c:337:3 #3 0x8f672a in add_pending_object_with_path revision.c:329:2 #4 0x8eaeab in add_pending_object_with_mode revision.c:336:2 #5 0x8eae9d in add_pending_object revision.c:342:2 #6 0x5154a0 in show_local_changes builtin/checkout.c:602:2 #7 0x513b00 in merge_working_tree builtin/checkout.c:979:3 #8 0x512cb3 in switch_branches builtin/checkout.c:1242:9 #9 0x50f8de in checkout_branch builtin/checkout.c:1646:9 #10 0x50ba12 in checkout_main builtin/checkout.c:2003:9 #11 0x5086c0 in cmd_checkout builtin/checkout.c:2055:8 #12 0x4cd91d in run_builtin git.c:467:11 #13 0x4cb5f3 in handle_builtin git.c:719:3 #14 0x4ccf47 in run_argv git.c:808:4 #15 0x4caf49 in cmd_main git.c:939:19 #16 0x69e43e in main common-main.c:52:11 #17 0x7f5dd1d50349 in __libc_start_main (/lib64/libc.so.6+0x24349) SUMMARY: AddressSanitizer: 2048 byte(s) leaked in 1 allocation(s). Signed-off-by: Andrzej Hunt --- builtin/checkout.c | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/checkout.c b/builtin/checkout.c index 4c696ef4805b..190153c81571 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -602,6 +602,7 @@ static void show_local_changes(struct object *head, diff_setup_done(&rev.diffopt); add_pending_object(&rev, head, NULL); run_diff_index(&rev, 0); + object_array_clear(&rev.pending); } static void describe_detached_head(const char *msg, struct commit *commit) From patchwork Sun Apr 25 14:16:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223311 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BC0AFC433ED for ; Sun, 25 Apr 2021 14:16:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A2B9761370 for ; Sun, 25 Apr 2021 14:16:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230406AbhDYORL (ORCPT ); Sun, 25 Apr 2021 10:17:11 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230372AbhDYORH (ORCPT ); Sun, 25 Apr 2021 10:17:07 -0400 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E6F76C061756 for ; Sun, 25 Apr 2021 07:16:27 -0700 (PDT) Received: by mail-wm1-x32b.google.com with SMTP id n84so1358716wma.0 for ; Sun, 25 Apr 2021 07:16:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=eZaOHLbd9c9hwOiQ1D59vt9rFpyoV3rXsJbli+E796U=; b=WfsQ7oGT+NCYD+Jsk91yDfceaPcLzFHlvANRYIpqhFlos6zpIcfNKOfg6hOKa99nQr nHb/jFE5utMWJSv/pZ4vk/K/bUWyL+tSXK33T09J7Xov6GAjsHbFJfMyBEvokpACW1Ht /j6E4QGpUhdZ5UzjuDy3GYSZ6oSA5mh1c5yn+Jr9xNWFpmt7EfjvLqyRagQ7IePu7n0r t8cLF0dPhtTPv1+fbRKt+jRp36YT3ungTg3n14wCS56OHNV3Amycl0q2elZs0F0z0PZd rjlru2RQOH/tzzQUdOENsD1pCuUlCIC7C9U4uwMqyDvObrUSpJlBDif6leLyK6w0XZ1B TPkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=eZaOHLbd9c9hwOiQ1D59vt9rFpyoV3rXsJbli+E796U=; b=oi7f1jGp6bE5UC3hgyj4BNt0tavaX6/VwSEe0dsvVqcUrt94xpjUeoLM7W7bCgECDK j/FHD0+MEiBVa2U7iddD7V/5qr0QrTfZK/Eo9aeKRQL6UeB6b2Uq1w+XHSQsJRlc2LfI jUZK4zufIfjDUq3N8UhgJBMtOKPKZPS57XrEdMHgl38K10T2AbkH0qxgtxuWgUlVEduG 0e3xJKPUEOZcuIO7vLap/EzATJt93BY8lMD7dp6inYoNwf9NahJk4aACP7ohHfWvCJbb iCyMwfmjiAZnEIAOQ7pG7SKUc4O3fLWV8t3LmvpN0llfXC+EL4yVq066fjjAxIOxMBGo tSug== X-Gm-Message-State: AOAM530iGEhTCtT0RYu7UErosNX68Pzia8tG0kYc5HIhSiRatXJxjaAT q9Mlc7LTtxD2M4lTi9dSHlWdV+Ol0iw= X-Google-Smtp-Source: ABdhPJzd/uzhOiz+BRe9/9hEo7bn7LK1u8z7EE4vSZE1uWfyMl3oSQ8mehzSaA6z6+fZQ9XfVeiQnw== X-Received: by 2002:a1c:e444:: with SMTP id b65mr14784452wmh.49.1619360186752; Sun, 25 Apr 2021 07:16:26 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id t6sm15920913wrx.38.2021.04.25.07.16.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:26 -0700 (PDT) Message-Id: <217f571f8ef5f3a46c0cbb1ceca022a18e5b43d2.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:16 +0000 Subject: [PATCH v2 09/12] mailinfo: also free strbuf lists when clearing mailinfo Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt mailinfo.p_hdr_info/s_hdr_info are null-terminated lists of strbuf's, with entries pointing either to NULL or an allocated strbuf. Therefore we need to free those strbuf's (and not just the data they contain) whenever we're done with a given entry. (See handle_header() where those new strbufs are malloc'd.) Once we no longer need the list (and not just its entries) we can switch over to strbuf_list_free() instead of manually iterating over the list, which takes care of those additional details for us. We can only do this in clear_mailinfo() - in handle_commit_message() we are only clearing the array contents but want to reuse the array itself, hence we can't use strbuf_list_free() there. However, strbuf_list_free() cannot handle a NULL input, and the lists we are freeing might be NULL. Therefore we add a NULL check in strbuf_list_free() to make it safe to use with a NULL input (which is a pattern used by some of the other *_free() functions around git). Leak output from t0023: Direct leak of 72 byte(s) in 3 object(s) allocated from: #0 0x49a85d in malloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145:3 #1 0x9ac9f4 in do_xmalloc wrapper.c:41:8 #2 0x9ac9ca in xmalloc wrapper.c:62:9 #3 0x7f6cf7 in handle_header mailinfo.c:205:10 #4 0x7f5abf in check_header mailinfo.c:583:4 #5 0x7f5524 in mailinfo mailinfo.c:1197:3 #6 0x4dcc95 in parse_mail builtin/am.c:1167:6 #7 0x4d9070 in am_run builtin/am.c:1732:12 #8 0x4d5b7a in cmd_am builtin/am.c:2398:3 #9 0x4cd91d in run_builtin git.c:467:11 #10 0x4cb5f3 in handle_builtin git.c:719:3 #11 0x4ccf47 in run_argv git.c:808:4 #12 0x4caf49 in cmd_main git.c:939:19 #13 0x69e43e in main common-main.c:52:11 #14 0x7fc1fadfa349 in __libc_start_main (/lib64/libc.so.6+0x24349) SUMMARY: AddressSanitizer: 72 byte(s) leaked in 3 allocation(s). Signed-off-by: Andrzej Hunt --- mailinfo.c | 14 +++----------- strbuf.c | 2 ++ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/mailinfo.c b/mailinfo.c index 5681d9130db6..95ce191f385b 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -821,7 +821,7 @@ static int handle_commit_msg(struct mailinfo *mi, struct strbuf *line) for (i = 0; header[i]; i++) { if (mi->s_hdr_data[i]) strbuf_release(mi->s_hdr_data[i]); - mi->s_hdr_data[i] = NULL; + FREE_AND_NULL(mi->s_hdr_data[i]); } return 0; } @@ -1236,22 +1236,14 @@ void setup_mailinfo(struct mailinfo *mi) void clear_mailinfo(struct mailinfo *mi) { - int i; - strbuf_release(&mi->name); strbuf_release(&mi->email); strbuf_release(&mi->charset); strbuf_release(&mi->inbody_header_accum); free(mi->message_id); - if (mi->p_hdr_data) - for (i = 0; mi->p_hdr_data[i]; i++) - strbuf_release(mi->p_hdr_data[i]); - free(mi->p_hdr_data); - if (mi->s_hdr_data) - for (i = 0; mi->s_hdr_data[i]; i++) - strbuf_release(mi->s_hdr_data[i]); - free(mi->s_hdr_data); + strbuf_list_free(mi->p_hdr_data); + strbuf_list_free(mi->s_hdr_data); while (mi->content < mi->content_top) { free(*(mi->content_top)); diff --git a/strbuf.c b/strbuf.c index e3397cc4c72a..4df30b45494d 100644 --- a/strbuf.c +++ b/strbuf.c @@ -209,6 +209,8 @@ void strbuf_list_free(struct strbuf **sbs) { struct strbuf **s = sbs; + if (!s) + return; while (*s) { strbuf_release(*s); free(*s++); From patchwork Sun Apr 25 14:16:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223313 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5A9C2C433B4 for ; Sun, 25 Apr 2021 14:16:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 445D4600EF for ; Sun, 25 Apr 2021 14:16:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230411AbhDYORM (ORCPT ); Sun, 25 Apr 2021 10:17:12 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39060 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230359AbhDYORI (ORCPT ); Sun, 25 Apr 2021 10:17:08 -0400 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [IPv6:2a00:1450:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7A17AC061574 for ; Sun, 25 Apr 2021 07:16:28 -0700 (PDT) Received: by mail-wm1-x32e.google.com with SMTP id a26-20020a05600c225ab029013f5867af96so1190197wmm.0 for ; Sun, 25 Apr 2021 07:16:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=1nKP0yaXjr4MwVeYdNA48ZKHdlQ2SyIoLZPfwwX2iB4=; b=KGsxautbn9nHXr7RNqA76u60du+36q4xEn7uNT1/ylIADHLjkBoW2XA9zPmYjiaynj eTa9ygPHXo8b8J3xlDng6q+lennd393xGrkSr0KHDkxgYyhCWML8j0wku2P7AbkJRlZ3 CtmKyhP5s9E0NiSMFUO9QyvXy3xDQX7aTF9L7z+W5oAtKSF/sgupI8IeZCvs71iy6J8o 6/fjGi6z9qqlh1QAWA1zl6XBVfUnxbVA8pIS29oheJ/1Qo+NZsoG1Hp9wgBMZhZmzE3U wlSLwNLyUcKTmv8GRRwvOk2FWvALF/ShOKj2yGro0LBcDcnr4K4C5fiQvZ3IHDUcLgDX wZ5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=1nKP0yaXjr4MwVeYdNA48ZKHdlQ2SyIoLZPfwwX2iB4=; b=Z0eALb04e9PyyKUE1CRCUJaaIe8Q0qkKBJ7H41rAOQEpBrMeqCtZokg8Iw5ZqON9Xu AJd/KlO3Iclp7+w4lkmeP02aHQPfZr8ebsQ+m9YWX90yUjk3iUzxYgte1Z5vItHYOVPu CCOtUoTEnPLhGkOopcWZGggZyomLNs1Q/GTqpW8yuLjfxjpAoRtD/v8EYsfOvj0tpLn1 mMEppPRscRRI6FxsHk3q+XGGfiaEQwhQrhrQ/yMINqOTvo7uisZcSRR1SGOmDhayzUlY svTCjS1HBnyNrobFG6H6qdzTek2cawdIXUHspgzxhAbO+eNptnVj3OuIMi3GVLqKyu/n eI7Q== X-Gm-Message-State: AOAM532qd5PQw9CXFmIbOqcx5mKpIWDTVOmKS4lq+boas3bZzzfMOMiV GYVNQ6cCDGoOovUdno0tYXUvlrzTiZo= X-Google-Smtp-Source: ABdhPJxnYwRPgHLED0VZcdfdToRuH0j63034iEkcqnXbesufFzyMbcLtHu3YMKhbdH5KwFQ8qc46Cw== X-Received: by 2002:a1c:f701:: with SMTP id v1mr15924584wmh.69.1619360187275; Sun, 25 Apr 2021 07:16:27 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id q17sm16554494wro.33.2021.04.25.07.16.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:27 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:17 +0000 Subject: [PATCH v2 10/12] builtin/for-each-ref: free filter and UNLEAK sorting. Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt sorting might be a list allocated in ref_default_sorting() (in this case it's a fixed single item list, which has nevertheless been xcalloc'd), or it might be a list allocated in parse_opt_ref_sorting(). In either case we could free these lists - but instead we UNLEAK as we're at the end of cmd_for_each_ref. (There's no existing implementation of clear_ref_sorting(), and writing a loop to free the list seems more trouble than it's worth.) filter.with_commit/no_commit are populated via OPT_CONTAINS/OPT_NO_CONTAINS, both of which create new entries via parse_opt_commits(), and also need to be free'd or UNLEAK'd. Because free_commit_list() already exists, we choose to use that over an UNLEAK. LSAN output from t0041: Direct leak of 16 byte(s) in 1 object(s) allocated from: #0 0x49a9d2 in calloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:154:3 #1 0x9ac252 in xcalloc wrapper.c:140:8 #2 0x8a4a55 in ref_default_sorting ref-filter.c:2486:32 #3 0x56c6b1 in cmd_for_each_ref builtin/for-each-ref.c:72:13 #4 0x4cd91d in run_builtin git.c:467:11 #5 0x4cb5f3 in handle_builtin git.c:719:3 #6 0x4ccf47 in run_argv git.c:808:4 #7 0x4caf49 in cmd_main git.c:939:19 #8 0x69dabe in main common-main.c:52:11 #9 0x7f2bdc570349 in __libc_start_main (/lib64/libc.so.6+0x24349) Direct leak of 16 byte(s) in 1 object(s) allocated from: #0 0x49a85d in malloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145:3 #1 0x9abf54 in do_xmalloc wrapper.c:41:8 #2 0x9abf2a in xmalloc wrapper.c:62:9 #3 0x717486 in commit_list_insert commit.c:540:33 #4 0x8644cf in parse_opt_commits parse-options-cb.c:98:2 #5 0x869bb5 in get_value parse-options.c:181:11 #6 0x8677dc in parse_long_opt parse-options.c:378:10 #7 0x8659bd in parse_options_step parse-options.c:817:11 #8 0x867fcd in parse_options parse-options.c:870:10 #9 0x56c62b in cmd_for_each_ref builtin/for-each-ref.c:59:2 #10 0x4cd91d in run_builtin git.c:467:11 #11 0x4cb5f3 in handle_builtin git.c:719:3 #12 0x4ccf47 in run_argv git.c:808:4 #13 0x4caf49 in cmd_main git.c:939:19 #14 0x69dabe in main common-main.c:52:11 #15 0x7f2bdc570349 in __libc_start_main (/lib64/libc.so.6+0x24349) Signed-off-by: Andrzej Hunt --- builtin/for-each-ref.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/builtin/for-each-ref.c b/builtin/for-each-ref.c index cb9c81a04606..84efb71f82fc 100644 --- a/builtin/for-each-ref.c +++ b/builtin/for-each-ref.c @@ -83,5 +83,8 @@ int cmd_for_each_ref(int argc, const char **argv, const char *prefix) for (i = 0; i < maxcount; i++) show_ref_array_item(array.items[i], &format); ref_array_clear(&array); + free_commit_list(filter.with_commit); + free_commit_list(filter.no_commit); + UNLEAK(sorting); return 0; } From patchwork Sun Apr 25 14:16:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223317 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D2137C433ED for ; Sun, 25 Apr 2021 14:16:37 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B6C7461364 for ; Sun, 25 Apr 2021 14:16:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230415AbhDYORP (ORCPT ); Sun, 25 Apr 2021 10:17:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39050 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230384AbhDYORJ (ORCPT ); Sun, 25 Apr 2021 10:17:09 -0400 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [IPv6:2a00:1450:4864:20::42d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 030E7C06175F for ; Sun, 25 Apr 2021 07:16:29 -0700 (PDT) Received: by mail-wr1-x42d.google.com with SMTP id a4so53135795wrr.2 for ; Sun, 25 Apr 2021 07:16:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=Wcg85AEdtfOMCaUZXhnfDMMdyHFv/3Ywlth4J1G5IVM=; b=WqnzotVj5cdUYyF8F/cxNGeQssAYRAbclNnqbFIDqkb+gz8grmQW346TSombbkxDFy quyGyVmvweZTICeduZtskPfnMZ1y1tsl1yWxP8GrQrUb3KKxjk55ZzX8vXBDKIrEYNsM AOaIrOuLxQ9PvZd/sXsm2Z+wduw9djfVDjdlqirGEDV+wnRpL6Ur2AB8pfZHJ23TGV2i HAjg1f0qfrRtCQgTxSbRSfvdkf14KU4CQHu1V3TCl7TwD7kYPZj6dBuDEwXK+5RiHkw3 Dc+7QSh/YkseOSqcxKfUrk7F7w8EB/9vemLhd43xI9hsetZhhkF1kl3CcB0RH/AptQKY DVvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=Wcg85AEdtfOMCaUZXhnfDMMdyHFv/3Ywlth4J1G5IVM=; b=ENaxzYp379OaCzAv8HUrFBetYxAVblJiYwBtRhpgTc7oA395lk+siQxFmZMa4mfTcL VByWRZW7EfakGrOBAcieSExsxG9h96xNvCZXTv4gUPB5w4d7PBiUcsIHlrI/9OV3kwie We5b5Y/vKfD8OPe5MPlyLnLJXRX/k9dB4HsUKzJWk+iu0l+WwzG8UL/svfGHx5WSyOL3 mcywoNgyHCPF7EK0TVO9IwN/UD0E2Ew5EXshItdN1W06jKeffOlEaKSonOUdN1yOoGUN vOcq+SEKmJFKtqt7Dh33raVS5y/IzB+pLsFj++6DrFCAMqonCaOu9BOfc5r8hK/GDJN6 mbDQ== X-Gm-Message-State: AOAM531s9+yjZwN3Y5YbqklvPH2JcBOg9xGIlE+GSNV8iR8o3i+VHmTL ySs7cyY1UZIvkrR3fwhQtaCMYomrjSk= X-Google-Smtp-Source: ABdhPJwnYOPUSSGIeiCFdW+tB72PhGXOv3lTxIpPdyByuZ8uVBU3rQm3p8dU0mabFE4E9Z2GFFwF6w== X-Received: by 2002:adf:db4f:: with SMTP id f15mr17113774wrj.99.1619360187852; Sun, 25 Apr 2021 07:16:27 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id 2sm15986660wmi.19.2021.04.25.07.16.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:27 -0700 (PDT) Message-Id: In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:18 +0000 Subject: [PATCH v2 11/12] builtin/rebase: release git_format_patch_opt too Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt options.git_format_patch_opt can be populated during cmd_rebase's setup, and will therefore leak on return. Although we could just UNLEAK all of options, we choose to strbuf_release() the individual member, which matches the existing pattern (where we're freeing invidual members of options). Leak found when running t0021: Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x49ab79 in realloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:164:3 #1 0x9ac296 in xrealloc wrapper.c:126:8 #2 0x93b13d in strbuf_grow strbuf.c:98:2 #3 0x93bd3a in strbuf_add strbuf.c:295:2 #4 0x60ae92 in strbuf_addstr strbuf.h:304:2 #5 0x605f17 in cmd_rebase builtin/rebase.c:1759:3 #6 0x4cd91d in run_builtin git.c:467:11 #7 0x4cb5f3 in handle_builtin git.c:719:3 #8 0x4ccf47 in run_argv git.c:808:4 #9 0x4caf49 in cmd_main git.c:939:19 #10 0x69dbfe in main common-main.c:52:11 #11 0x7f66dae91349 in __libc_start_main (/lib64/libc.so.6+0x24349) SUMMARY: AddressSanitizer: 24 byte(s) leaked in 1 allocation(s). Signed-off-by: Andrzej Hunt --- builtin/rebase.c | 1 + 1 file changed, 1 insertion(+) diff --git a/builtin/rebase.c b/builtin/rebase.c index ed1da1760e4c..a756fba23330 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -2109,6 +2109,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) free(options.head_name); free(options.gpg_sign_opt); free(options.cmd); + strbuf_release(&options.git_format_patch_opt); free(squash_onto_name); return ret; } From patchwork Sun Apr 25 14:16:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrzej Hunt X-Patchwork-Id: 12223319 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 805F2C433B4 for ; Sun, 25 Apr 2021 14:16:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6638C600D1 for ; Sun, 25 Apr 2021 14:16:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230435AbhDYORR (ORCPT ); Sun, 25 Apr 2021 10:17:17 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230389AbhDYORK (ORCPT ); Sun, 25 Apr 2021 10:17:10 -0400 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [IPv6:2a00:1450:4864:20::32b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 78B44C061760 for ; Sun, 25 Apr 2021 07:16:29 -0700 (PDT) Received: by mail-wm1-x32b.google.com with SMTP id k128so28537748wmk.4 for ; Sun, 25 Apr 2021 07:16:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=message-id:in-reply-to:references:from:date:subject:fcc :content-transfer-encoding:mime-version:to:cc; bh=S6z0G57DdP3GQ5/enY3+6YG3xUz1kWofC9ozxQR0rBI=; b=ZX1p/kI/rrHCUOniYZ/vvV9iHU5XE3nWHPjbcnsIviGvgA0LiK7Qpb2lHsutT4Mvc7 6ZAVxYD9xe+2hdH0M5RqV9AEcqP23eEM5wYZ6+DXGmrbiAVPerDpfKGQswTIJA//Vlf9 KKaXOzuBMXvwyr8/cIiNantVkdg2ZiYRsRIqhtovEm7s2p/OHY25W3qBEY3GaBxmGNAy GLDSbOuspKUGFzwfzlYbsMljZRLPcjx5IshQXT2nrmjXle692GZbDvstiZmM0pW2gIQg Xk6DWCR9WTBJ6XQ8a8evGrQjQXiWZfKqUXEtzR24aBVm2qgfbn74lGzmQ2uvZ1jnF8aX YMCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:message-id:in-reply-to:references:from:date :subject:fcc:content-transfer-encoding:mime-version:to:cc; bh=S6z0G57DdP3GQ5/enY3+6YG3xUz1kWofC9ozxQR0rBI=; b=tsuP/r/dotUy9wdh24fhfHcdMrGYtaYr5+/c/2AfY4Sm0pzUoRbrCfjdEqIGsfFuWX +0LmsGq4ikc271573KbFYVTwPwFw29sgqfvQDIK92pFPypY4UnwiHoxkNEpD0ldXbKOZ TavvshrdVGaZDYe5x1ki+RGIwarPgSGfWbtbb0KwSQkLI2e+Tq/pRFKrsZceEJfukRxw QoK9PsrGe/zhv4XC2nhrrzijtLZ/bboqqztVi2217Y09jCcIhcb+vKL1xe9eh+1MPfh1 b2ffdMj/uoYKE5ToRL3G3xV904HisnongrfMVry+WgC8f5eOCB0OOQhvJsOkDNoJL8g5 Aq2A== X-Gm-Message-State: AOAM533vr+4z1tHVfujcYy+1wE6NO0gQVEUDT1j7YcIgK+PTKwnCz1s0 NErzwR4pVtGPWQU/wYkqZPRn6+Yr57U= X-Google-Smtp-Source: ABdhPJwj55LznK4l5LixC2Eyyo66rtV4Ur3oMdT+trrTuTYCQkP+sa2OwI5bTzhEkbmXr7JgPT3J/A== X-Received: by 2002:a1c:1d91:: with SMTP id d139mr6511868wmd.101.1619360188326; Sun, 25 Apr 2021 07:16:28 -0700 (PDT) Received: from [127.0.0.1] ([13.74.141.28]) by smtp.gmail.com with ESMTPSA id l14sm12522683wmq.4.2021.04.25.07.16.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 25 Apr 2021 07:16:28 -0700 (PDT) Message-Id: <703cd9656bf8827565469c71a6bcca58f1a5647a.1619360180.git.gitgitgadget@gmail.com> In-Reply-To: References: Date: Sun, 25 Apr 2021 14:16:19 +0000 Subject: [PATCH v2 12/12] builtin/rm: avoid leaking pathspec and seen Fcc: Sent MIME-Version: 1.0 To: git@vger.kernel.org Cc: =?utf-8?b?UmVuw6k=?= Scharfe , SZEDER =?utf-8?b?R8OhYm9y?= , Andrzej Hunt , Andrzej Hunt Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org From: Andrzej Hunt From: Andrzej Hunt parse_pathspec() populates pathspec, hence we need to clear it once it's no longer needed. seen is xcalloc'd within the same function and likewise needs to be freed once its no longer needed. cmd_rm() has multiple early returns, therefore we need to clear or free as soon as this data is no longer needed, as opposed to doing a cleanup at the end. LSAN output from t0020: Direct leak of 112 byte(s) in 1 object(s) allocated from: #0 0x49a85d in malloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:145:3 #1 0x9ac0a4 in do_xmalloc wrapper.c:41:8 #2 0x9ac07a in xmalloc wrapper.c:62:9 #3 0x873277 in parse_pathspec pathspec.c:582:2 #4 0x646ffa in cmd_rm builtin/rm.c:266:2 #5 0x4cd91d in run_builtin git.c:467:11 #6 0x4cb5f3 in handle_builtin git.c:719:3 #7 0x4ccf47 in run_argv git.c:808:4 #8 0x4caf49 in cmd_main git.c:939:19 #9 0x69dc0e in main common-main.c:52:11 #10 0x7f948825b349 in __libc_start_main (/lib64/libc.so.6+0x24349) Indirect leak of 65 byte(s) in 1 object(s) allocated from: #0 0x49ab79 in realloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:164:3 #1 0x9ac2a6 in xrealloc wrapper.c:126:8 #2 0x93b14d in strbuf_grow strbuf.c:98:2 #3 0x93ccf6 in strbuf_vaddf strbuf.c:392:3 #4 0x93f726 in xstrvfmt strbuf.c:979:2 #5 0x93f8b3 in xstrfmt strbuf.c:989:8 #6 0x92ad8a in prefix_path_gently setup.c:115:15 #7 0x873a8d in init_pathspec_item pathspec.c:439:11 #8 0x87334f in parse_pathspec pathspec.c:589:3 #9 0x646ffa in cmd_rm builtin/rm.c:266:2 #10 0x4cd91d in run_builtin git.c:467:11 #11 0x4cb5f3 in handle_builtin git.c:719:3 #12 0x4ccf47 in run_argv git.c:808:4 #13 0x4caf49 in cmd_main git.c:939:19 #14 0x69dc0e in main common-main.c:52:11 #15 0x7f948825b349 in __libc_start_main (/lib64/libc.so.6+0x24349) Indirect leak of 15 byte(s) in 1 object(s) allocated from: #0 0x486834 in strdup ../projects/compiler-rt/lib/asan/asan_interceptors.cpp:452:3 #1 0x9ac048 in xstrdup wrapper.c:29:14 #2 0x873ba2 in init_pathspec_item pathspec.c:468:20 #3 0x87334f in parse_pathspec pathspec.c:589:3 #4 0x646ffa in cmd_rm builtin/rm.c:266:2 #5 0x4cd91d in run_builtin git.c:467:11 #6 0x4cb5f3 in handle_builtin git.c:719:3 #7 0x4ccf47 in run_argv git.c:808:4 #8 0x4caf49 in cmd_main git.c:939:19 #9 0x69dc0e in main common-main.c:52:11 #10 0x7f948825b349 in __libc_start_main (/lib64/libc.so.6+0x24349) Direct leak of 1 byte(s) in 1 object(s) allocated from: #0 0x49a9d2 in calloc ../projects/compiler-rt/lib/asan/asan_malloc_linux.cpp:154:3 #1 0x9ac392 in xcalloc wrapper.c:140:8 #2 0x647108 in cmd_rm builtin/rm.c:294:9 #3 0x4cd91d in run_builtin git.c:467:11 #4 0x4cb5f3 in handle_builtin git.c:719:3 #5 0x4ccf47 in run_argv git.c:808:4 #6 0x4caf49 in cmd_main git.c:939:19 #7 0x69dbfe in main common-main.c:52:11 #8 0x7f4fac1b0349 in __libc_start_main (/lib64/libc.so.6+0x24349) Signed-off-by: Andrzej Hunt --- builtin/rm.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/builtin/rm.c b/builtin/rm.c index 4858631e0f02..2927678d37b6 100644 --- a/builtin/rm.c +++ b/builtin/rm.c @@ -327,6 +327,8 @@ int cmd_rm(int argc, const char **argv, const char *prefix) if (!seen_any) exit(0); } + clear_pathspec(&pathspec); + free(seen); if (!index_only) submodules_absorb_gitdir_if_needed();