diff options
Diffstat (limited to 'openbsd-compat/xmmap.c')
-rw-r--r-- | openbsd-compat/xmmap.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/openbsd-compat/xmmap.c b/openbsd-compat/xmmap.c index 9dc4340a7..c8d59dee0 100644 --- a/openbsd-compat/xmmap.c +++ b/openbsd-compat/xmmap.c | |||
@@ -23,7 +23,7 @@ | |||
23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
24 | */ | 24 | */ |
25 | 25 | ||
26 | /* $Id: xmmap.c,v 1.3 2003/06/02 02:25:27 tim Exp $ */ | 26 | /* $Id: xmmap.c,v 1.5 2004/08/14 13:55:38 dtucker Exp $ */ |
27 | 27 | ||
28 | #include "includes.h" | 28 | #include "includes.h" |
29 | 29 | ||
@@ -40,25 +40,28 @@ void *xmmap(size_t size) | |||
40 | #ifdef HAVE_MMAP | 40 | #ifdef HAVE_MMAP |
41 | # ifdef MAP_ANON | 41 | # ifdef MAP_ANON |
42 | address = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_ANON|MAP_SHARED, | 42 | address = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_ANON|MAP_SHARED, |
43 | -1, 0); | 43 | -1, (off_t)0); |
44 | # else | 44 | # else |
45 | address = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_SHARED, | 45 | address = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_SHARED, |
46 | open("/dev/zero", O_RDWR), 0); | 46 | open("/dev/zero", O_RDWR), (off_t)0); |
47 | # endif | 47 | # endif |
48 | 48 | ||
49 | #define MM_SWAP_TEMPLATE "/var/run/sshd.mm.XXXXXXXX" | 49 | #define MM_SWAP_TEMPLATE "/var/run/sshd.mm.XXXXXXXX" |
50 | if (address == MAP_FAILED) { | 50 | if (address == MAP_FAILED) { |
51 | char tmpname[sizeof(MM_SWAP_TEMPLATE)] = MM_SWAP_TEMPLATE; | 51 | char tmpname[sizeof(MM_SWAP_TEMPLATE)] = MM_SWAP_TEMPLATE; |
52 | int tmpfd; | 52 | int tmpfd; |
53 | mode_t old_umask; | ||
53 | 54 | ||
55 | old_umask = umask(0177); | ||
54 | tmpfd = mkstemp(tmpname); | 56 | tmpfd = mkstemp(tmpname); |
57 | umask(old_umask); | ||
55 | if (tmpfd == -1) | 58 | if (tmpfd == -1) |
56 | fatal("mkstemp(\"%s\"): %s", | 59 | fatal("mkstemp(\"%s\"): %s", |
57 | MM_SWAP_TEMPLATE, strerror(errno)); | 60 | MM_SWAP_TEMPLATE, strerror(errno)); |
58 | unlink(tmpname); | 61 | unlink(tmpname); |
59 | ftruncate(tmpfd, size); | 62 | ftruncate(tmpfd, size); |
60 | address = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_SHARED, | 63 | address = mmap(NULL, size, PROT_WRITE|PROT_READ, MAP_SHARED, |
61 | tmpfd, 0); | 64 | tmpfd, (off_t)0); |
62 | close(tmpfd); | 65 | close(tmpfd); |
63 | } | 66 | } |
64 | 67 | ||