From 8a6d1724d9d9f4598d15338be9723542ba79467e Mon Sep 17 00:00:00 2001 From: Emily Shaffer Date: Fri, 15 Sep 2023 13:26:38 -0700 Subject: [PATCH] git_superproject: tell git that superproject is bare The superproject is initialized as a bare repo in Superproject:_Init(). That means that later operations must treat it as a bare repository, specifying the gitdir and setting 'bare' appropriately when launching GitCommand()s. It's also OK not to specify cwd here because GitCommand() will drop cwd if bare == True anyways. With this change, it's possible to run `repo init` and `repo sync` with the Git config 'safe.bareRepository' set to 'explicit'. This config strengthens Git's security posture against embedded bare repository attacks like https://github.com/justinsteven/advisories/blob/main/2022_git_buried_bare_repos_and_fsmonitor_various_abuses.md. Bug: b/227257481 Change-Id: I954a64c6883d2ca2af9c603e7076fd83b52584e9 Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/389794 Reviewed-by: Mike Frysinger Tested-by: Jason R. Coombs Tested-by: Emily Shaffer Reviewed-by: Emily Shaffer Commit-Queue: Jason R. Coombs --- git_superproject.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/git_superproject.py b/git_superproject.py index b80f01303..fca0e6f76 100644 --- a/git_superproject.py +++ b/git_superproject.py @@ -69,9 +69,9 @@ class UpdateProjectsResult(NamedTuple): class Superproject: """Get commit ids from superproject. - Initializes a local copy of a superproject for the manifest. This allows - lookup of commit ids for all projects. It contains _project_commit_ids which - is a dictionary with project/commit id entries. + Initializes a bare local copy of a superproject for the manifest. This + allows lookup of commit ids for all projects. It contains + _project_commit_ids which is a dictionary with project/commit id entries. """ def __init__( @@ -235,7 +235,8 @@ def _Fetch(self): p = GitCommand( None, cmd, - cwd=self._work_git, + gitdir=self._work_git, + bare=True, capture_stdout=True, capture_stderr=True, ) @@ -271,7 +272,8 @@ def _LsTree(self): p = GitCommand( None, cmd, - cwd=self._work_git, + gitdir=self._work_git, + bare=True, capture_stdout=True, capture_stderr=True, )