diff options
author | Konstantin Belousov <kib@FreeBSD.org> | 2009-02-08 19:41:08 +0000 |
---|---|---|
committer | Konstantin Belousov <kib@FreeBSD.org> | 2009-02-08 19:41:08 +0000 |
commit | 9f6acfd1a8e09272cf73b5d14b2dfaf228160d40 (patch) | |
tree | 1c53b86e9a174d82caebe7aef370d8c1dba928a5 /sys/vm/vm_map.c | |
parent | 0d0be82a5d6181670d795cce8189377bc6060a9d (diff) | |
download | src-9f6acfd1a8e09272cf73b5d14b2dfaf228160d40.tar.gz src-9f6acfd1a8e09272cf73b5d14b2dfaf228160d40.zip |
Do not leak the MAP_ENTRY_IN_TRANSITION flag when copying map entry
on fork. Otherwise, copied entry cannot be removed in the child map.
Reviewed by: tegge
MFC after: 2 weeks
Notes
Notes:
svn path=/head/; revision=188320
Diffstat (limited to 'sys/vm/vm_map.c')
-rw-r--r-- | sys/vm/vm_map.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/sys/vm/vm_map.c b/sys/vm/vm_map.c index 18ba48958f2e..e5c601c2ec4c 100644 --- a/sys/vm/vm_map.c +++ b/sys/vm/vm_map.c @@ -2738,7 +2738,8 @@ vmspace_fork(struct vmspace *vm1) */ new_entry = vm_map_entry_create(new_map); *new_entry = *old_entry; - new_entry->eflags &= ~MAP_ENTRY_USER_WIRED; + new_entry->eflags &= ~(MAP_ENTRY_USER_WIRED | + MAP_ENTRY_IN_TRANSITION); new_entry->wired_count = 0; /* @@ -2764,7 +2765,8 @@ vmspace_fork(struct vmspace *vm1) */ new_entry = vm_map_entry_create(new_map); *new_entry = *old_entry; - new_entry->eflags &= ~MAP_ENTRY_USER_WIRED; + new_entry->eflags &= ~(MAP_ENTRY_USER_WIRED | + MAP_ENTRY_IN_TRANSITION); new_entry->wired_count = 0; new_entry->object.vm_object = NULL; vm_map_entry_link(new_map, new_map->header.prev, |