Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp420417rdb; Tue, 5 Dec 2023 08:57:23 -0800 (PST) X-Google-Smtp-Source: AGHT+IEJixuCPsmwiVi7fcxtoeejGprPT/v7ge4A2OQN4kX5XcGNrMdzQ1okWOT126/vFoeaNJ43 X-Received: by 2002:a17:902:6a84:b0:1d0:6ffd:f1fa with SMTP id n4-20020a1709026a8400b001d06ffdf1famr2925286plk.80.1701795443023; Tue, 05 Dec 2023 08:57:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701795443; cv=none; d=google.com; s=arc-20160816; b=S92+mx1WFYWIXDqWNRw/VUp5XB3SX3nCwh1lvETT7n9Hyh3L387d7z2pEYb9VrdFte SYks/4BAbth4zJwpwyhglCyT/cJs7qepSoSzVTrMuT0bBzZwm1O18fWyuE8fh3njdbTU wLggcpJaVriaar7LnhxBggLDGBUE1neZsdApkfvEiqBZGkVMKNom/S+1ZuPFD93OlORt S54cXy4G7/qOlxwo1H4BHPRMTjxS8CtqJoflnN6X/bOUr1jYLmxdthQ+hsRgrBwn6npq 7XGwoE6JRqJ12TsB3C4VPrv2GmqvV7KUE21GHFtvdTJycIN6oShffns8A31upa/vGR/l MK3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=tQzklovssjEa8OFQkRGN+RRrucqT5cqWfSz3JYOJMeg=; fh=6WvU0nT5zFVRgavOlciXfZyT46E2rRaGp53nOeB/eb0=; b=rBn8bw5zW2DYeFozEOUSdyQ7VwNTswqxudWDP5uJrpsDVW6WOd8OrUnpop+Dzm8GUL YxvImmdr6dNb/KtU2yZ2HY9cerkrRoM+YpYzPmqPL9FwRIuvaagcmWdpEBMSBi1AE2li wEegnrvvyOpAL45fV+e/HXB7Po2FZCCRsQeDJE1iuV3cLmtYdtG2Wl1upwcZ774AnxQe Ems3G+rG2ATp/US3XQYrx0Sl2fe0acj8JC4XXOOfvo+DeskqUstA4Qquxbnszak4+YTt P/wPm7tbffOgFkUZhLg4sqKZzKoDX1364Sjumr9bzUN7BFgiSkpyg20Ai6/y2hfktVF+ qrbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=cYk14YHq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id ij8-20020a170902ab4800b001d0068a4a3dsi778485plb.410.2023.12.05.08.57.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 05 Dec 2023 08:57:23 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=cYk14YHq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 75EE080A9AAC; Tue, 5 Dec 2023 08:57:09 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231932AbjLEQ4y (ORCPT + 99 others); Tue, 5 Dec 2023 11:56:54 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60404 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232511AbjLEQ4p (ORCPT ); Tue, 5 Dec 2023 11:56:45 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 37E3D1B2 for ; Tue, 5 Dec 2023 08:56:51 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 66FD1C433C8; Tue, 5 Dec 2023 16:56:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1701795410; bh=vnVlZzqZdVGwXpKfqdKy0p7fnqLtksgs6J1ySIaSR9E=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=cYk14YHqwKu/eQeU5wvHKIl9+iR73IzAs5hZk7hrajH5Fs7/jfaxhNuguireTAqgg NPxTRIdxGIMIn8lXXWqQaHOHfZGE4uNcMJ4SrZ0oU87SPTIqK3tEhZlgYHZSi1SkwN QxXWMl1Yb+rbgU5mSsOwLfjdCYQl9+0FVwvSWyXkG506yjZA/lqErMy+uhPXtFwcLF O8i7eVKSgLWBuKoZhyO1A38bJMBH8L+b403kvRSSpLOGR0NMIqN2lumxAIG52teTkS bZteHHYuDnXknMPNrKxiwySMgtSVEyhb483Y4oxSOsB7lrLLcgnEL12hwlVhgEJZr7 fiPENfQVHPKdA== Date: Tue, 5 Dec 2023 09:56:48 -0700 From: Nathan Chancellor To: Jialu Xu Cc: ndesaulniers@google.com, morbo@google.com, justinstitt@google.com, llvm@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] gen_compile_commands.py: fix path resolve with symlinks in it Message-ID: <20231205165648.GA391810@dev-arch.thelio-3990X> References: <20231204165920.GA16980@dev-arch.thelio-3990X> <20231205021523.4152128-2-xujialu@vimux.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20231205021523.4152128-2-xujialu@vimux.org> X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Tue, 05 Dec 2023 08:57:09 -0800 (PST) Hi Jialu, On Tue, Dec 05, 2023 at 10:15:26AM +0800, Jialu Xu wrote: > When symbolic links are involved in the path, os.path.abspath might not > resolve the symlinks and instead return the absolute path with the > symlinks intact. > > Use pathlib.Path resolve() instead of os.path.abspath() > > Signed-off-by: Jialu Xu Thanks for the clarification in your previous message [1], I suppose that makes sense as to why nobody has reported this to us because that is a rather odd situation that the upstream kernel would not experience. I think that some of those details should be in the commit message, along with a short example like you provided, so that we know exactly what the situation was and how this patch resolves it. Perhaps something like (please feel free to correct or reword as you feel necessary): "When a path contains relative symbolic links, os.path.abspath() might not follow the symlinks and instead return the absolute path with just the relative paths resolved, resulting in an incorrect path. Use pathlib.Path.resolve(), which resolves the symlinks and normalizes the paths correctly. " The actual fix seems fine to me. Feel free to add Reviewed-by: Nathan Chancellor to the subsequent submission and please include both Masahiro Yamada linux-kbuild@vger.kernel.org on it in addition to the people you have here, as he is the one who actually applies gen_compile_commands.py changes (I am going to send a MAINTAINERS change for this). [1]: https://lore.kernel.org/20231205021523.4152128-1-xujialu@vimux.org/ Cheers, Nathan > --- > scripts/clang-tools/gen_compile_commands.py | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/scripts/clang-tools/gen_compile_commands.py b/scripts/clang-tools/gen_compile_commands.py > index 180952fb91c1b..99e28b7152c19 100755 > --- a/scripts/clang-tools/gen_compile_commands.py > +++ b/scripts/clang-tools/gen_compile_commands.py > @@ -11,6 +11,7 @@ import argparse > import json > import logging > import os > +from pathlib import Path > import re > import subprocess > import sys > @@ -172,8 +173,9 @@ def process_line(root_directory, command_prefix, file_path): > # by Make, so this code replaces the escaped version with '#'. > prefix = command_prefix.replace('\#', '#').replace('$(pound)', '#') > > - # Use os.path.abspath() to normalize the path resolving '.' and '..' . > - abs_path = os.path.abspath(os.path.join(root_directory, file_path)) > + # Make the path absolute, resolving all symlinks on the way and also normalizing it. > + # Convert Path object to a string because 'PosixPath' is not JSON serializable. > + abs_path = str(Path(root_directory, file_path).resolve()) > if not os.path.exists(abs_path): > raise ValueError('File %s not found' % abs_path) > return { > -- > 2.39.2 > >