From: Dave Anderson <anderson@mclinux.com>
To: linux-kernel@vger.kernel.org
Cc: anderson@mclinux.com, blinn@mclinux.com
Subject: [BUG][PATCH] 2.4.* mlockall(MCL_FUTURE) is broken -- child inherits VM_LOCKED
Date: Tue, 08 Jan 2002 15:56:59 -0500 [thread overview]
Message-ID: <3C3B5D1B.45CBF593@mclinux.com> (raw)
In 2.4.*, mlockall(MCL_FUTURE) is erroneously inherited by child processes
across fork() and exec():
1. across a fork(), the inherited memory is not locked, but any new memory
allocations by the child will be VM_LOCKED.
2. across a subsequent exec(), *all* of the exec'd program's memory except
for its stack pages will be VM_LOCKED.
The problem is:
1. if MCL_FUTURE, mm->def_flags gets set to VM_LOCKED in do_mlockall().
2. mm->def_flags is not cleared during subsequent forks and execs.
3 mm->def_flags, with the leftover VM_LOCKED flag set, is subsequently
utilized in calc_vm_flags() when called by do_brk() to extend the
address space of a forked process, and by do_mmap_pgoff() when
building the non-stack address space of an exec'd process.
The proposed patch puts the fix in mm_init(), which seems to be the most
appropriate place since it's called by copy_mm(), and by mm_alloc() on behalf
of exec_mmap():
# diff -u linux/kernel/fork.c linux-2.4.17/kernel/fork.c
--- linux/kernel/fork.c Tue Jan 8 15:11:13 2002
+++ linux-2.4.17/kernel/fork.c Tue Jan 8 15:12:26 2002
@@ -219,6 +219,7 @@
init_rwsem(&mm->mmap_sem);
mm->page_table_lock = SPIN_LOCK_UNLOCKED;
mm->pgd = pgd_alloc(mm);
+ mm->def_flags = 0;
if (mm->pgd)
return mm;
free_mm(mm);
Note that it worked OK in 2.2 because mm->def_flags was explicitly cleared in
mm_alloc(), which was called by both copy_mm() and exec_mmap(). But things
were shuffled around a bit in 2.4, and it must have gotten lost in the
translation...
Dave Anderson
==============================================================================
David Anderson anderson@mclinux.com
Mission Critical Linux, Inc. http://www.mclinux.com
100 Foot of John St. Work: 978-606-0225
Lowell, MA 01852 Fax: 978-446-9470
==============================================================================
next reply other threads:[~2002-01-08 20:57 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-01-08 20:56 Dave Anderson [this message]
2002-01-08 21:55 ` [BUG][PATCH] 2.4.* mlockall(MCL_FUTURE) is broken -- child inherits VM_LOCKED Andrew Morton
2002-01-08 22:18 ` Bruce Blinn
2002-01-08 22:39 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3C3B5D1B.45CBF593@mclinux.com \
--to=anderson@mclinux.com \
--cc=blinn@mclinux.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.