From 1736799d2a15d912cfc46b7089c2bff02a1cbd0e Mon Sep 17 00:00:00 2001 From: Russell Belfer Date: Mon, 12 Mar 2012 23:06:31 -0700 Subject: [PATCH] Add map.c with shared p_mmap param validation Forgot to add this file in the previous commit --- src/map.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 src/map.c diff --git a/src/map.c b/src/map.c new file mode 100644 index 000000000..56a37f3f6 --- /dev/null +++ b/src/map.c @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2009-2012 the libgit2 contributors + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ +#include +#include "map.h" + +int validate_map_args( + git_map *out, size_t len, int prot, int flags, int fd, git_off_t offset) +{ + GIT_UNUSED(fd); + GIT_UNUSED(offset); + + if (out == NULL || len == 0) { + errno = EINVAL; + giterr_set(GITERR_OS, "Failed to mmap. No map or zero length"); + return -1; + } + + if (!(prot & GIT_PROT_WRITE) && !(prot & GIT_PROT_READ)) { + errno = EINVAL; + giterr_set(GITERR_OS, "Failed to mmap. Invalid protection parameters"); + return -1; + } + + if (flags & GIT_MAP_FIXED) { + errno = EINVAL; + giterr_set(GITERR_OS, "Failed to mmap. FIXED not set"); + return -1; + } + + return 0; +} +