I read that MAP_SHARED_VALIDATE will return EOPNOTSUPP and mmap() would fail when there are unknown flags but, when I use the LEGACY_MAP_MASK (All are valid flags), the mmap( ) is failing.
#define LEGACY_MAP_MASK (MAP_SHARED \
| MAP_PRIVATE \
| MAP_FIXED\
| MAP_ANONYMOUS \
| MAP_DENYWRITE \
| MAP_EXECUTABLE \
| MAP_UNINITIALIZED \
| MAP_GROWSDOWN \
| MAP_LOCKED \
| MAP_NORESERVE \
| MAP_POPULATE \
| MAP_NONBLOCK \
| MAP_STACK \
| MAP_HUGETLB \
| MAP_32BIT \
| MAP_HUGE_2MB \
static int fd_file;
static void *mapped_address;
#define TEST_FILE "sample"
#define TEST_FILE_SIZE 1024
#define TEST_FILE_MODE 0600
fd_file = open(TEST_FILE, O_CREAT | O_RDWR, TEST_FILE_MODE);
mapped_address = mmap(NULL, TEST_FILE_SIZE, PROT_READ | PROT_WRITE, LEGACY_MAP_MASK | MAP_SHARED_VALIDATE, fd_file, 0);
if (mapped_address == MAP_FAILED)
printf("Oops mmap() failed");
Error:
mmap( ) failed with the unexpected error: EINVAL (22)
====================================================================
Edit: After the response from the comment:
#define LEGACY_MAP_MASK (MAP_SHARED \
| MAP_PRIVATE \
| MAP_DENYWRITE \
| MAP_EXECUTABLE \
| MAP_UNINITIALIZED \
| MAP_LOCKED \
| MAP_NORESERVE \
| MAP_POPULATE \
| MAP_NONBLOCK \
| MAP_STACK \
| MAP_32BIT \
| MAP_HUGE_2MB \
| MAP_HUGE_1GB)
mapped_address = mmap(NULL, TEST_FILE_SIZE, PROT_READ | PROT_WRITE, LEGACY_MAP_MASK | MAP_SHARED_VALIDATE, fd_file, 0);
mmap( ) is successful,