Commit 9c0463530d8e96d08e7c87e5a5d07949ea71b77c

Stefan Sperling 2014-11-03T13:46:56

Fix segmentation fault observed on OpenBSD/sparc64 A non-readable mapping of a file causes an access violation in the pack tests. Always use PROT_READ to work around this.

diff --git a/src/unix/map.c b/src/unix/map.c
index 3d0cbba..2965d86 100644
--- a/src/unix/map.c
+++ b/src/unix/map.c
@@ -20,7 +20,7 @@ long git__page_size(void)
 
 int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offset)
 {
-	int mprot = 0;
+	int mprot = PROT_READ;
 	int mflag = 0;
 
 	GIT_MMAP_VALIDATE(out, len, prot, flags);
@@ -29,9 +29,7 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, git_off_t offs
 	out->len = 0;
 
 	if (prot & GIT_PROT_WRITE)
-		mprot = PROT_WRITE;
-	else if (prot & GIT_PROT_READ)
-		mprot = PROT_READ;
+		mprot |= PROT_WRITE;
 
 	if ((flags & GIT_MAP_TYPE) == GIT_MAP_SHARED)
 		mflag = MAP_SHARED;