Blob Blame History Raw
From 6a147cc6e402e7167fa1213c31dc42a6fa38f52b Mon Sep 17 00:00:00 2001
From: Aurelien Jarno <aurelien@aurel32.net>
Date: Mon, 8 Feb 2010 14:58:31 +0100
Subject: [PATCH] Use shared mapping to reserve memory when creating locale archive

---
 ChangeLog                    |    7 +++++++
 locale/programs/locarchive.c |    6 +++---
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/locale/programs/locarchive.c b/locale/programs/locarchive.c
index a585058..4335369 100644
--- a/locale/programs/locarchive.c
+++ b/locale/programs/locarchive.c
@@ -134,7 +134,7 @@ create_archive (const char *archivefname, struct locarhandle *ah)
   size_t reserved = RESERVE_MMAP_SIZE;
   int xflags = 0;
   if (total < reserved
-      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
+      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
 		       -1, 0)) != MAP_FAILED))
     xflags = MAP_FIXED;
   else
@@ -396,7 +396,7 @@ enlarge_archive (struct locarhandle *ah, const struct locarhead *head)
   size_t reserved = RESERVE_MMAP_SIZE;
   int xflags = 0;
   if (total < reserved
-      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
+      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
 		       -1, 0)) != MAP_FAILED))
     xflags = MAP_FIXED;
   else
@@ -614,7 +614,7 @@ open_archive (struct locarhandle *ah, bool readonly)
   int xflags = 0;
   void *p;
   if (st.st_size < reserved
-      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_PRIVATE | MAP_ANON,
+      && ((p = mmap64 (NULL, reserved, PROT_NONE, MAP_SHARED | MAP_ANON,
 		       -1, 0)) != MAP_FAILED))
     xflags = MAP_FIXED;
   else
--- glibc-2.11.1/ChangeLog.orig	2010-02-10 17:01:30.000000000 -0600
+++ glibc-2.11.1/ChangeLog	2010-02-10 17:02:25.000000000 -0600
@@ -1,3 +1,10 @@
+2009-10-27  Aurelien Jarno  <aurelien@aurel32.net>
+
+        [BZ #10855]
+        * locale/programs/locarchive.c: use MMAP_SHARED to reserve memory
+        used later with MMAP_FIXED | MMAP_SHARED to cope with different
+        alignment restrictions.
+
 2009-11-24  Ulrich Drepper  <drepper@redhat.com>
 
 	* sysdeps/unix/grantpt.c (grantpt): Use CLOSE_ALL_FDS is available