diff options
author | Dhruva Krishnamurthy <dhruvakm@gmail.com> | 2020-11-23 10:14:00 -0800 |
---|---|---|
committer | Edward Thomson <ethomson@edwardthomson.com> | 2021-06-30 08:58:12 -0500 |
commit | d77c073f090f454da817080cecc77044e5436f1b (patch) | |
tree | 4e95298904810a945c3a6a62e7a7ec4533b5b1ed | |
parent | c0e16a467d4004dd137881f390746f502141a91a (diff) | |
download | libgit2-d77c073f090f454da817080cecc77044e5436f1b.tar.gz |
Remove broken support for write in emulated mmap
* Emulated mmap based write without pagefault handling is not
possible since IO happens outside of call to mmap and data is
written to mapped memory
* Potential emulation using userfaultfd() might be possible
-rw-r--r-- | src/posix.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/posix.c b/src/posix.c index fbaa7c3ca..541c60845 100644 --- a/src/posix.c +++ b/src/posix.c @@ -239,14 +239,15 @@ int p_mmap(git_map *out, size_t len, int prot, int flags, int fd, off64_t offset { GIT_MMAP_VALIDATE(out, len, prot, flags); - out->data = NULL; - out->len = 0; - - if ((prot & GIT_PROT_WRITE) && ((flags & GIT_MAP_TYPE) == GIT_MAP_SHARED)) { - git_error_set(GIT_ERROR_OS, "trying to map shared-writeable"); + /* writes cannot be emulated without handling pagefaults since write happens by + * writing to mapped memory */ + if (prot & GIT_PROT_WRITE) { + git_error_set(GIT_ERROR_OS, "trying to map %s-writeable", + ((flags & GIT_MAP_TYPE) == GIT_MAP_SHARED) ? "shared": "private"); return -1; } + out->len = 0; out->data = git__malloc(len); GIT_ERROR_CHECK_ALLOC(out->data); |