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

(-)linux-2.6.10.orig/arch/mips/kernel/irixelf.c (-1 / +1 lines)
Lines 127-133 Link Here
127
	end = PAGE_ALIGN(end);
127
	end = PAGE_ALIGN(end);
128
	if (end <= start)
128
	if (end <= start)
129
		return;
129
		return;
130
	do_brk(start, end - start);
130
	do_brk_locked(start, end - start);
131
}
131
}
132
132
133
133
(-)linux-2.6.10.orig/arch/x86_64/ia32/ia32_aout.c (-5 / +5 lines)
Lines 115-121 Link Here
115
	end = PAGE_ALIGN(end);
115
	end = PAGE_ALIGN(end);
116
	if (end <= start)
116
	if (end <= start)
117
		return;
117
		return;
118
	do_brk(start, end - start);
118
	do_brk_locked(start, end - start);
119
}
119
}
120
120
121
#if CORE_DUMP
121
#if CORE_DUMP
Lines 325-331 Link Here
325
		pos = 32;
325
		pos = 32;
326
		map_size = ex.a_text+ex.a_data;
326
		map_size = ex.a_text+ex.a_data;
327
327
328
		error = do_brk(text_addr & PAGE_MASK, map_size);
328
		error = do_brk_locked(text_addr & PAGE_MASK, map_size);
329
		if (error != (text_addr & PAGE_MASK)) {
329
		if (error != (text_addr & PAGE_MASK)) {
330
			send_sig(SIGKILL, current, 0);
330
			send_sig(SIGKILL, current, 0);
331
			return error;
331
			return error;
Lines 361-367 Link Here
361
361
362
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
362
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
363
			loff_t pos = fd_offset;
363
			loff_t pos = fd_offset;
364
			do_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
364
			do_brk_locked(N_TXTADDR(ex), ex.a_text+ex.a_data);
365
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
365
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
366
					ex.a_text+ex.a_data, &pos);
366
					ex.a_text+ex.a_data, &pos);
367
			flush_icache_range((unsigned long) N_TXTADDR(ex),
367
			flush_icache_range((unsigned long) N_TXTADDR(ex),
Lines 470-476 Link Here
470
		}
470
		}
471
#endif
471
#endif
472
472
473
		do_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss);
473
		do_brk_locked(start_addr, ex.a_text + ex.a_data + ex.a_bss);
474
		
474
		
475
		file->f_op->read(file, (char *)start_addr,
475
		file->f_op->read(file, (char *)start_addr,
476
			ex.a_text + ex.a_data, &pos);
476
			ex.a_text + ex.a_data, &pos);
Lines 494-500 Link Here
494
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
494
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
495
	bss = ex.a_text + ex.a_data + ex.a_bss;
495
	bss = ex.a_text + ex.a_data + ex.a_bss;
496
	if (bss > len) {
496
	if (bss > len) {
497
		error = do_brk(start_addr + len, bss - len);
497
		error = do_brk_locked(start_addr + len, bss - len);
498
		retval = error;
498
		retval = error;
499
		if (error != start_addr + len)
499
		if (error != start_addr + len)
500
			goto out;
500
			goto out;
(-)linux-2.6.10.orig/fs/binfmt_aout.c (-7 / +7 lines)
Lines 50-56 Link Here
50
	start = PAGE_ALIGN(start);
50
	start = PAGE_ALIGN(start);
51
	end = PAGE_ALIGN(end);
51
	end = PAGE_ALIGN(end);
52
	if (end > start) {
52
	if (end > start) {
53
		unsigned long addr = do_brk(start, end - start);
53
		unsigned long addr = do_brk_locked(start, end - start);
54
		if (BAD_ADDR(addr))
54
		if (BAD_ADDR(addr))
55
			return addr;
55
			return addr;
56
	}
56
	}
Lines 323-332 Link Here
323
		loff_t pos = fd_offset;
323
		loff_t pos = fd_offset;
324
		/* Fuck me plenty... */
324
		/* Fuck me plenty... */
325
		/* <AOL></AOL> */
325
		/* <AOL></AOL> */
326
		error = do_brk(N_TXTADDR(ex), ex.a_text);
326
		error = do_brk_locked(N_TXTADDR(ex), ex.a_text);
327
		bprm->file->f_op->read(bprm->file, (char *) N_TXTADDR(ex),
327
		bprm->file->f_op->read(bprm->file, (char *) N_TXTADDR(ex),
328
			  ex.a_text, &pos);
328
			  ex.a_text, &pos);
329
		error = do_brk(N_DATADDR(ex), ex.a_data);
329
		error = do_brk_locked(N_DATADDR(ex), ex.a_data);
330
		bprm->file->f_op->read(bprm->file, (char *) N_DATADDR(ex),
330
		bprm->file->f_op->read(bprm->file, (char *) N_DATADDR(ex),
331
			  ex.a_data, &pos);
331
			  ex.a_data, &pos);
332
		goto beyond_if;
332
		goto beyond_if;
Lines 347-353 Link Here
347
		map_size = ex.a_text+ex.a_data;
347
		map_size = ex.a_text+ex.a_data;
348
#endif
348
#endif
349
349
350
		error = do_brk(text_addr & PAGE_MASK, map_size);
350
		error = do_brk_locked(text_addr & PAGE_MASK, map_size);
351
		if (error != (text_addr & PAGE_MASK)) {
351
		if (error != (text_addr & PAGE_MASK)) {
352
			send_sig(SIGKILL, current, 0);
352
			send_sig(SIGKILL, current, 0);
353
			return error;
353
			return error;
Lines 382-388 Link Here
382
382
383
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
383
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
384
			loff_t pos = fd_offset;
384
			loff_t pos = fd_offset;
385
			do_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
385
			do_brk_locked(N_TXTADDR(ex), ex.a_text+ex.a_data);
386
			bprm->file->f_op->read(bprm->file,
386
			bprm->file->f_op->read(bprm->file,
387
					(char __user *)N_TXTADDR(ex),
387
					(char __user *)N_TXTADDR(ex),
388
					ex.a_text+ex.a_data, &pos);
388
					ex.a_text+ex.a_data, &pos);
Lines 488-494 Link Here
488
			error_time = jiffies;
488
			error_time = jiffies;
489
		}
489
		}
490
490
491
		do_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss);
491
		do_brk_locked(start_addr, ex.a_text + ex.a_data + ex.a_bss);
492
		
492
		
493
		file->f_op->read(file, (char __user *)start_addr,
493
		file->f_op->read(file, (char __user *)start_addr,
494
			ex.a_text + ex.a_data, &pos);
494
			ex.a_text + ex.a_data, &pos);
Lines 512-518 Link Here
512
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
512
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
513
	bss = ex.a_text + ex.a_data + ex.a_bss;
513
	bss = ex.a_text + ex.a_data + ex.a_bss;
514
	if (bss > len) {
514
	if (bss > len) {
515
		error = do_brk(start_addr + len, bss - len);
515
		error = do_brk_locked(start_addr + len, bss - len);
516
		retval = error;
516
		retval = error;
517
		if (error != start_addr + len)
517
		if (error != start_addr + len)
518
			goto out;
518
			goto out;
(-)linux-2.6.10.orig/fs/binfmt_elf.c (-5 / +5 lines)
Lines 88-94 Link Here
88
	start = ELF_PAGEALIGN(start);
88
	start = ELF_PAGEALIGN(start);
89
	end = ELF_PAGEALIGN(end);
89
	end = ELF_PAGEALIGN(end);
90
	if (end > start) {
90
	if (end > start) {
91
		unsigned long addr = do_brk(start, end - start);
91
		unsigned long addr = do_brk_locked(start, end - start);
92
		if (BAD_ADDR(addr))
92
		if (BAD_ADDR(addr))
93
			return addr;
93
			return addr;
94
	}
94
	}
Lines 408-414 Link Here
408
408
409
	/* Map the last of the bss segment */
409
	/* Map the last of the bss segment */
410
	if (last_bss > elf_bss) {
410
	if (last_bss > elf_bss) {
411
		error = do_brk(elf_bss, last_bss - elf_bss);
411
		error = do_brk_locked(elf_bss, last_bss - elf_bss);
412
		if (BAD_ADDR(error))
412
		if (BAD_ADDR(error))
413
			goto out_close;
413
			goto out_close;
414
	}
414
	}
Lines 448-454 Link Here
448
		goto out;
448
		goto out;
449
	}
449
	}
450
450
451
	do_brk(0, text_data);
451
	do_brk_locked(0, text_data);
452
	if (!interpreter->f_op || !interpreter->f_op->read)
452
	if (!interpreter->f_op || !interpreter->f_op->read)
453
		goto out;
453
		goto out;
454
	if (interpreter->f_op->read(interpreter, addr, text_data, &offset) < 0)
454
	if (interpreter->f_op->read(interpreter, addr, text_data, &offset) < 0)
Lines 456-462 Link Here
456
	flush_icache_range((unsigned long)addr,
456
	flush_icache_range((unsigned long)addr,
457
	                   (unsigned long)addr + text_data);
457
	                   (unsigned long)addr + text_data);
458
458
459
	do_brk(ELF_PAGESTART(text_data + ELF_MIN_ALIGN - 1),
459
	do_brk_locked(ELF_PAGESTART(text_data + ELF_MIN_ALIGN - 1),
460
		interp_ex->a_bss);
460
		interp_ex->a_bss);
461
	elf_entry = interp_ex->a_entry;
461
	elf_entry = interp_ex->a_entry;
462
462
Lines 1025-1031 Link Here
1025
	len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1);
1025
	len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1);
1026
	bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
1026
	bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
1027
	if (bss > len)
1027
	if (bss > len)
1028
		do_brk(len, bss - len);
1028
		do_brk_locked(len, bss - len);
1029
	error = 0;
1029
	error = 0;
1030
1030
1031
out_free_ph:
1031
out_free_ph:
(-)linux-2.6.10.orig/include/linux/mm.h (+1 lines)
Lines 751-756 Link Here
751
extern int do_munmap(struct mm_struct *, unsigned long, size_t);
751
extern int do_munmap(struct mm_struct *, unsigned long, size_t);
752
752
753
extern unsigned long do_brk(unsigned long, unsigned long);
753
extern unsigned long do_brk(unsigned long, unsigned long);
754
extern unsigned long do_brk_locked(unsigned long, unsigned long);
754
755
755
/* filemap.c */
756
/* filemap.c */
756
extern unsigned long page_unuse(struct page *);
757
extern unsigned long page_unuse(struct page *);
(-)linux-2.6.10.orig/mm/mmap.c (+14 lines)
Lines 1859-1864 Link Here
1859
1859
1860
EXPORT_SYMBOL(do_brk);
1860
EXPORT_SYMBOL(do_brk);
1861
1861
1862
/* locking version of do_brk. */
1863
unsigned long do_brk_locked(unsigned long addr, unsigned long len)
1864
{
1865
	unsigned long ret;
1866
1867
	down_write(&current->mm->mmap_sem);
1868
	ret = do_brk(addr, len);
1869
	up_write(&current->mm->mmap_sem);
1870
1871
	return ret;
1872
}
1873
1874
EXPORT_SYMBOL(do_brk_locked);
1875
1862
/* Release all mmaps. */
1876
/* Release all mmaps. */
1863
void exit_mmap(struct mm_struct *mm)
1877
void exit_mmap(struct mm_struct *mm)
1864
{
1878
{
(-)linux-2.6.10.orig/mm/nommu.c (+5 lines)
Lines 857-862 Link Here
857
	return -ENOMEM;
857
	return -ENOMEM;
858
}
858
}
859
859
860
unsigned long do_brk_locked(unsigned long addr, unsigned long len)
861
{
862
	return -ENOMEM;
863
}
864
860
/*
865
/*
861
 * Expand (or shrink) an existing mapping, potentially moving it at the
866
 * Expand (or shrink) an existing mapping, potentially moving it at the
862
 * same time (controlled by the MREMAP_MAYMOVE flag and available VM space)
867
 * same time (controlled by the MREMAP_MAYMOVE flag and available VM space)

Return to bug 64492