2
* Author: Colin King <colin.king@canonical.com>
4
* Copyright (C) 2012 Canonical, Ltd.
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
28
#include <sys/types.h>
32
#define TEST_PASSED (0)
33
#define TEST_FAILED (1)
34
#define TEST_ERROR (2)
36
#define MMAP_LEN (4096)
39
* https://bugs.launchpad.net/ecryptfs/+bug/400443
41
* mmap() on a directory should return -ENODEV, but bug LP: #400443
42
* ecryptfs returns a mmap'd address which causes SIGBUS on access.
44
int main(int argc, char **argv)
51
fprintf(stderr, "Usage: path\n");
54
snprintf(path, sizeof(path), "%s/.", argv[1]);
56
if ((fd = open(path, O_RDONLY)) < 0) {
57
fprintf(stderr, "Cannot open ./. : %s\n", strerror(errno));
61
ptr = mmap(NULL, MMAP_LEN, PROT_READ, MAP_PRIVATE, fd, 0);
64
if (ptr != MAP_FAILED) {
65
/* Should not be able to mmap onto a directory */
66
fprintf(stderr, "mmap() on a directory should produce return "
67
"MAP_FAILED, instead got %p\n", ptr);
68
munmap(ptr, MMAP_LEN);
72
if (errno != ENODEV) {
73
fprintf(stderr, "mmap() on a directory should return ENODEV, "
74
"instead got %d (%s)\n", errno, strerror(errno));