View | Details | Raw Unified | Return to bug 64896
Collapse All | Expand All

(-)a/arch/ia64/ia32/binfmt_elf32.c (-4 / +16 lines)
Lines 95-101 Link Here
95
		vma->vm_private_data = NULL;
95
		vma->vm_private_data = NULL;
96
		down_write(&current->mm->mmap_sem);
96
		down_write(&current->mm->mmap_sem);
97
		{
97
		{
98
			insert_vm_struct(current->mm, vma);
98
			if (insert_vm_struct(current->mm, vma)) {
99
				kmem_cache_free(vm_area_cachep, vma);
100
				up_write(&current->mm->mmap_sem);
101
				return;
102
			}
99
		}
103
		}
100
		up_write(&current->mm->mmap_sem);
104
		up_write(&current->mm->mmap_sem);
101
	}
105
	}
Lines 117-123 Link Here
117
		vma->vm_private_data = NULL;
121
		vma->vm_private_data = NULL;
118
		down_write(&current->mm->mmap_sem);
122
		down_write(&current->mm->mmap_sem);
119
		{
123
		{
120
			insert_vm_struct(current->mm, vma);
124
			if (insert_vm_struct(current->mm, vma)) {
125
				kmem_cache_free(vm_area_cachep, vma);
126
				up_write(&current->mm->mmap_sem);
127
				return;
128
			}
121
		}
129
		}
122
		up_write(&current->mm->mmap_sem);
130
		up_write(&current->mm->mmap_sem);
123
	}
131
	}
Lines 164-170 Link Here
164
{
172
{
165
	unsigned long stack_base;
173
	unsigned long stack_base;
166
	struct vm_area_struct *mpnt;
174
	struct vm_area_struct *mpnt;
167
	int i;
175
	int i, ret;
168
176
169
	stack_base = IA32_STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
177
	stack_base = IA32_STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
170
178
Lines 188-194 Link Here
188
		mpnt->vm_pgoff = 0;
196
		mpnt->vm_pgoff = 0;
189
		mpnt->vm_file = NULL;
197
		mpnt->vm_file = NULL;
190
		mpnt->vm_private_data = 0;
198
		mpnt->vm_private_data = 0;
191
		insert_vm_struct(current->mm, mpnt);
199
		if ((ret = insert_vm_struct(current->mm, mpnt))) {
200
			up_write(&current->mm->mmap_sem);
201
			kmem_cache_free(vm_area_cachep, mpnt);
202
			return ret;
203
		}
192
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
204
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
193
	}
205
	}
194
206
(-)a/arch/ia64/mm/init.c (-2 / +14 lines)
Lines 105-111 Link Here
105
		vma->vm_pgoff = 0;
105
		vma->vm_pgoff = 0;
106
		vma->vm_file = NULL;
106
		vma->vm_file = NULL;
107
		vma->vm_private_data = NULL;
107
		vma->vm_private_data = NULL;
108
		insert_vm_struct(current->mm, vma);
108
		down_write(&current->mm->mmap_sem);
109
		if (insert_vm_struct(current->mm, vma)) {
110
			up_write(&current->mm->mmap_sem);
111
			kmem_cache_free(vm_area_cachep, vma);
112
			return;
113
		}
114
		up_write(&current->mm->mmap_sem);
109
	}
115
	}
110
116
111
	/* map NaT-page at address zero to speed up speculative dereferencing of NULL: */
117
	/* map NaT-page at address zero to speed up speculative dereferencing of NULL: */
Lines 117-123 Link Here
117
			vma->vm_end = PAGE_SIZE;
123
			vma->vm_end = PAGE_SIZE;
118
			vma->vm_page_prot = __pgprot(pgprot_val(PAGE_READONLY) | _PAGE_MA_NAT);
124
			vma->vm_page_prot = __pgprot(pgprot_val(PAGE_READONLY) | _PAGE_MA_NAT);
119
			vma->vm_flags = VM_READ | VM_MAYREAD | VM_IO | VM_RESERVED;
125
			vma->vm_flags = VM_READ | VM_MAYREAD | VM_IO | VM_RESERVED;
120
			insert_vm_struct(current->mm, vma);
126
			down_write(&current->mm->mmap_sem);
127
			if (insert_vm_struct(current->mm, vma)) {
128
				up_write(&current->mm->mmap_sem);
129
				kmem_cache_free(vm_area_cachep, vma);
130
				return;
131
			}
132
			up_write(&current->mm->mmap_sem);
121
		}
133
		}
122
	}
134
	}
123
}
135
}
(-)a/arch/s390x/kernel/exec32.c (-2 / +6 lines)
Lines 41-47 Link Here
41
{
41
{
42
	unsigned long stack_base;
42
	unsigned long stack_base;
43
	struct vm_area_struct *mpnt;
43
	struct vm_area_struct *mpnt;
44
	int i;
44
	int i, ret;
45
45
46
	stack_base = STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
46
	stack_base = STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
47
47
Lines 65-71 Link Here
65
		mpnt->vm_pgoff = 0;
65
		mpnt->vm_pgoff = 0;
66
		mpnt->vm_file = NULL;
66
		mpnt->vm_file = NULL;
67
		mpnt->vm_private_data = (void *) 0;
67
		mpnt->vm_private_data = (void *) 0;
68
		insert_vm_struct(current->mm, mpnt);
68
		if ((ret = insert_vm_struct(current->mm, mpnt))) {
69
			up_write(&current->mm->mmap_sem);
70
			kmem_cache_free(vm_area_cachep, mpnt);
71
			return ret;
72
		}
69
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
73
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
70
	} 
74
	} 
71
75
(-)a/arch/x86_64/ia32/ia32_binfmt.c (-2 / +6 lines)
Lines 225-231 Link Here
225
{
225
{
226
	unsigned long stack_base;
226
	unsigned long stack_base;
227
	struct vm_area_struct *mpnt;
227
	struct vm_area_struct *mpnt;
228
	int i;
228
	int i, ret;
229
229
230
	stack_base = IA32_STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
230
	stack_base = IA32_STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
231
231
Lines 250-256 Link Here
250
		mpnt->vm_pgoff = 0;
250
		mpnt->vm_pgoff = 0;
251
		mpnt->vm_file = NULL;
251
		mpnt->vm_file = NULL;
252
		mpnt->vm_private_data = (void *) 0;
252
		mpnt->vm_private_data = (void *) 0;
253
		insert_vm_struct(current->mm, mpnt);
253
		if ((ret = insert_vm_struct(current->mm, mpnt))) {
254
			up_write(&current->mm->mmap_sem);
255
			kmem_cache_free(vm_area_cachep, mpnt);
256
			return ret;
257
		}
254
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
258
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
255
	} 
259
	} 
256
260
(-)a/fs/exec.c (-2 / +6 lines)
Lines 327-333 Link Here
327
{
327
{
328
	unsigned long stack_base;
328
	unsigned long stack_base;
329
	struct vm_area_struct *mpnt;
329
	struct vm_area_struct *mpnt;
330
	int i;
330
	int i, ret;
331
331
332
	stack_base = STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
332
	stack_base = STACK_TOP - MAX_ARG_PAGES*PAGE_SIZE;
333
333
Lines 351-357 Link Here
351
		mpnt->vm_pgoff = 0;
351
		mpnt->vm_pgoff = 0;
352
		mpnt->vm_file = NULL;
352
		mpnt->vm_file = NULL;
353
		mpnt->vm_private_data = (void *) 0;
353
		mpnt->vm_private_data = (void *) 0;
354
		insert_vm_struct(current->mm, mpnt);
354
		if ((ret = insert_vm_struct(current->mm, mpnt))) {
355
			up_write(&current->mm->mmap_sem);
356
			kmem_cache_free(vm_area_cachep, mpnt);
357
			return ret;
358
		}
355
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
359
		current->mm->total_vm = (mpnt->vm_end - mpnt->vm_start) >> PAGE_SHIFT;
356
	} 
360
	} 
357
361
(-)a/include/linux/mm.h (-1 / +1 lines)
Lines 548-554 Link Here
548
/* mmap.c */
548
/* mmap.c */
549
extern void lock_vma_mappings(struct vm_area_struct *);
549
extern void lock_vma_mappings(struct vm_area_struct *);
550
extern void unlock_vma_mappings(struct vm_area_struct *);
550
extern void unlock_vma_mappings(struct vm_area_struct *);
551
extern void insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
551
extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
552
extern void __insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
552
extern void __insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
553
extern void build_mmap_rb(struct mm_struct *);
553
extern void build_mmap_rb(struct mm_struct *);
554
extern void exit_mmap(struct mm_struct *);
554
extern void exit_mmap(struct mm_struct *);
(-)a/mm/mmap.c (-2 / +3 lines)
Lines 1193-1206 Link Here
1193
	validate_mm(mm);
1193
	validate_mm(mm);
1194
}
1194
}
1195
1195
1196
void insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
1196
int insert_vm_struct(struct mm_struct * mm, struct vm_area_struct * vma)
1197
{
1197
{
1198
	struct vm_area_struct * __vma, * prev;
1198
	struct vm_area_struct * __vma, * prev;
1199
	rb_node_t ** rb_link, * rb_parent;
1199
	rb_node_t ** rb_link, * rb_parent;
1200
1200
1201
	__vma = find_vma_prepare(mm, vma->vm_start, &prev, &rb_link, &rb_parent);
1201
	__vma = find_vma_prepare(mm, vma->vm_start, &prev, &rb_link, &rb_parent);
1202
	if (__vma && __vma->vm_start < vma->vm_end)
1202
	if (__vma && __vma->vm_start < vma->vm_end)
1203
		BUG();
1203
		return -ENOMEM;
1204
	vma_link(mm, vma, prev, rb_link, rb_parent);
1204
	vma_link(mm, vma, prev, rb_link, rb_parent);
1205
	validate_mm(mm);
1205
	validate_mm(mm);
1206
	return 0;
1206
}
1207
}

Return to bug 64896