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

(-)xx/arch/mips/kernel/irixelf.c.orig (-4 / +4 lines)
Lines 128-134 static void set_brk(unsigned long start, Link Here
128
	end = PAGE_ALIGN(end);
128
	end = PAGE_ALIGN(end);
129
	if (end <= start)
129
	if (end <= start)
130
		return;
130
		return;
131
	do_brk(start, end - start);
131
	do_brk_unlocked(start, end - start);
132
}
132
}
133
133
134
134
Lines 377-383 static unsigned int load_irix_interp(str Link Here
377
377
378
	/* Map the last of the bss segment */
378
	/* Map the last of the bss segment */
379
	if (last_bss > len) {
379
	if (last_bss > len) {
380
		do_brk(len, (last_bss - len));
380
		do_brk_unlocked(len, (last_bss - len));
381
	}
381
	}
382
	kfree(elf_phdata);
382
	kfree(elf_phdata);
383
383
Lines 565-571 void irix_map_prda_page (void) Link Here
565
	unsigned long v;
565
	unsigned long v;
566
	struct prda *pp;
566
	struct prda *pp;
567
567
568
	v =  do_brk (PRDA_ADDRESS, PAGE_SIZE);
568
	v =  do_brk_unlocked (PRDA_ADDRESS, PAGE_SIZE);
569
569
570
	if (v < 0)
570
	if (v < 0)
571
		return;
571
		return;
Lines 857-863 static int load_irix_library(struct file Link Here
857
	len = (elf_phdata->p_filesz + elf_phdata->p_vaddr+ 0xfff) & 0xfffff000;
857
	len = (elf_phdata->p_filesz + elf_phdata->p_vaddr+ 0xfff) & 0xfffff000;
858
	bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
858
	bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
859
	if (bss > len)
859
	if (bss > len)
860
	  do_brk(len, bss-len);
860
	  do_brk_unlocked(len, bss-len);
861
	kfree(elf_phdata);
861
	kfree(elf_phdata);
862
	return 0;
862
	return 0;
863
}
863
}
(-)xx/arch/sparc64/kernel/binfmt_aout32.c.orig (-6 / +6 lines)
Lines 49-55 static void set_brk(unsigned long start, Link Here
49
	end = PAGE_ALIGN(end);
49
	end = PAGE_ALIGN(end);
50
	if (end <= start)
50
	if (end <= start)
51
		return;
51
		return;
52
	do_brk(start, end - start);
52
	do_brk_unlocked(start, end - start);
53
}
53
}
54
54
55
/*
55
/*
Lines 246-255 static int load_aout32_binary(struct lin Link Here
246
	if (N_MAGIC(ex) == NMAGIC) {
246
	if (N_MAGIC(ex) == NMAGIC) {
247
		loff_t pos = fd_offset;
247
		loff_t pos = fd_offset;
248
		/* Fuck me plenty... */
248
		/* Fuck me plenty... */
249
		error = do_brk(N_TXTADDR(ex), ex.a_text);
249
		error = do_brk_unlocked(N_TXTADDR(ex), ex.a_text);
250
		bprm->file->f_op->read(bprm->file, (char *) N_TXTADDR(ex),
250
		bprm->file->f_op->read(bprm->file, (char *) N_TXTADDR(ex),
251
			  ex.a_text, &pos);
251
			  ex.a_text, &pos);
252
		error = do_brk(N_DATADDR(ex), ex.a_data);
252
		error = do_brk_unlocked(N_DATADDR(ex), ex.a_data);
253
		bprm->file->f_op->read(bprm->file, (char *) N_DATADDR(ex),
253
		bprm->file->f_op->read(bprm->file, (char *) N_DATADDR(ex),
254
			  ex.a_data, &pos);
254
			  ex.a_data, &pos);
255
		goto beyond_if;
255
		goto beyond_if;
Lines 257-263 static int load_aout32_binary(struct lin Link Here
257
257
258
	if (N_MAGIC(ex) == OMAGIC) {
258
	if (N_MAGIC(ex) == OMAGIC) {
259
		loff_t pos = fd_offset;
259
		loff_t pos = fd_offset;
260
		do_brk(N_TXTADDR(ex) & PAGE_MASK,
260
		do_brk_unlocked(N_TXTADDR(ex) & PAGE_MASK,
261
			ex.a_text+ex.a_data + PAGE_SIZE - 1);
261
			ex.a_text+ex.a_data + PAGE_SIZE - 1);
262
		bprm->file->f_op->read(bprm->file, (char *) N_TXTADDR(ex),
262
		bprm->file->f_op->read(bprm->file, (char *) N_TXTADDR(ex),
263
			  ex.a_text+ex.a_data, &pos);
263
			  ex.a_text+ex.a_data, &pos);
Lines 272-278 static int load_aout32_binary(struct lin Link Here
272
272
273
		if (!bprm->file->f_op->mmap) {
273
		if (!bprm->file->f_op->mmap) {
274
			loff_t pos = fd_offset;
274
			loff_t pos = fd_offset;
275
			do_brk(0, ex.a_text+ex.a_data);
275
			do_brk_unlocked(0, ex.a_text+ex.a_data);
276
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
276
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
277
				  ex.a_text+ex.a_data, &pos);
277
				  ex.a_text+ex.a_data, &pos);
278
			goto beyond_if;
278
			goto beyond_if;
Lines 388-394 static int load_aout32_library(struct fi Link Here
388
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
388
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
389
	bss = ex.a_text + ex.a_data + ex.a_bss;
389
	bss = ex.a_text + ex.a_data + ex.a_bss;
390
	if (bss > len) {
390
	if (bss > len) {
391
		error = do_brk(start_addr + len, bss - len);
391
		error = do_brk_unlocked(start_addr + len, bss - len);
392
		retval = error;
392
		retval = error;
393
		if (error != start_addr + len)
393
		if (error != start_addr + len)
394
			goto out;
394
			goto out;
(-)xx/arch/x86_64/ia32/ia32_aout.c.orig (-5 / +5 lines)
Lines 114-120 static int set_brk(unsigned long start, Link Here
114
	start = PAGE_ALIGN(start);
114
	start = PAGE_ALIGN(start);
115
	end = PAGE_ALIGN(end);
115
	end = PAGE_ALIGN(end);
116
	if (end > start) {
116
	if (end > start) {
117
		unsigned long addr = do_brk(start, end - start);
117
		unsigned long addr = do_brk_unlocked(start, end - start);
118
		if (BAD_ADDR(addr))
118
		if (BAD_ADDR(addr))
119
			return addr;
119
			return addr;
120
	}
120
	}
Lines 327-333 static int load_aout_binary(struct linux Link Here
327
		pos = 32;
327
		pos = 32;
328
		map_size = ex.a_text+ex.a_data;
328
		map_size = ex.a_text+ex.a_data;
329
329
330
		error = do_brk(text_addr & PAGE_MASK, map_size);
330
		error = do_brk_unlocked(text_addr & PAGE_MASK, map_size);
331
		if (error != (text_addr & PAGE_MASK)) {
331
		if (error != (text_addr & PAGE_MASK)) {
332
			send_sig(SIGKILL, current, 0);
332
			send_sig(SIGKILL, current, 0);
333
			return error;
333
			return error;
Lines 363-369 static int load_aout_binary(struct linux Link Here
363
363
364
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
364
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
365
			loff_t pos = fd_offset;
365
			loff_t pos = fd_offset;
366
			do_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
366
			do_brk_unlocked(N_TXTADDR(ex), ex.a_text+ex.a_data);
367
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
367
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
368
					ex.a_text+ex.a_data, &pos);
368
					ex.a_text+ex.a_data, &pos);
369
			flush_icache_range((unsigned long) N_TXTADDR(ex),
369
			flush_icache_range((unsigned long) N_TXTADDR(ex),
Lines 476-482 static int load_aout_library(struct file Link Here
476
		}
476
		}
477
#endif
477
#endif
478
478
479
		do_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss);
479
		do_brk_unlocked(start_addr, ex.a_text + ex.a_data + ex.a_bss);
480
		
480
		
481
		file->f_op->read(file, (char *)start_addr,
481
		file->f_op->read(file, (char *)start_addr,
482
			ex.a_text + ex.a_data, &pos);
482
			ex.a_text + ex.a_data, &pos);
Lines 500-506 static int load_aout_library(struct file Link Here
500
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
500
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
501
	bss = ex.a_text + ex.a_data + ex.a_bss;
501
	bss = ex.a_text + ex.a_data + ex.a_bss;
502
	if (bss > len) {
502
	if (bss > len) {
503
		error = do_brk(start_addr + len, bss - len);
503
		error = do_brk_unlocked(start_addr + len, bss - len);
504
		retval = error;
504
		retval = error;
505
		if (error != start_addr + len)
505
		if (error != start_addr + len)
506
			goto out;
506
			goto out;
(-)xx/fs/binfmt_aout.c.orig (-7 / +7 lines)
Lines 51-57 static int set_brk(unsigned long start, Link Here
51
	start = PAGE_ALIGN(start);
51
	start = PAGE_ALIGN(start);
52
	end = PAGE_ALIGN(end);
52
	end = PAGE_ALIGN(end);
53
	if (end > start) {
53
	if (end > start) {
54
		unsigned long addr = do_brk(start, end - start);
54
		unsigned long addr = do_brk_unlocked(start, end - start);
55
		if (BAD_ADDR(addr))
55
		if (BAD_ADDR(addr))
56
			return addr;
56
			return addr;
57
	}
57
	}
Lines 323-332 static int load_aout_binary(struct linux 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_unlocked(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_unlocked(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 static int load_aout_binary(struct linux 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_unlocked(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 381-387 static int load_aout_binary(struct linux Link Here
381
381
382
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
382
		if (!bprm->file->f_op->mmap||((fd_offset & ~PAGE_MASK) != 0)) {
383
			loff_t pos = fd_offset;
383
			loff_t pos = fd_offset;
384
			do_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
384
			do_brk_unlocked(N_TXTADDR(ex), ex.a_text+ex.a_data);
385
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
385
			bprm->file->f_op->read(bprm->file,(char *)N_TXTADDR(ex),
386
					ex.a_text+ex.a_data, &pos);
386
					ex.a_text+ex.a_data, &pos);
387
			flush_icache_range((unsigned long) N_TXTADDR(ex),
387
			flush_icache_range((unsigned long) N_TXTADDR(ex),
Lines 486-492 static int load_aout_library(struct file Link Here
486
			error_time = jiffies;
486
			error_time = jiffies;
487
		}
487
		}
488
488
489
		do_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss);
489
		do_brk_unlocked(start_addr, ex.a_text + ex.a_data + ex.a_bss);
490
		
490
		
491
		file->f_op->read(file, (char *)start_addr,
491
		file->f_op->read(file, (char *)start_addr,
492
			ex.a_text + ex.a_data, &pos);
492
			ex.a_text + ex.a_data, &pos);
Lines 510-516 static int load_aout_library(struct file Link Here
510
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
510
	len = PAGE_ALIGN(ex.a_text + ex.a_data);
511
	bss = ex.a_text + ex.a_data + ex.a_bss;
511
	bss = ex.a_text + ex.a_data + ex.a_bss;
512
	if (bss > len) {
512
	if (bss > len) {
513
		error = do_brk(start_addr + len, bss - len);
513
		error = do_brk_unlocked(start_addr + len, bss - len);
514
		retval = error;
514
		retval = error;
515
		if (error != start_addr + len)
515
		if (error != start_addr + len)
516
			goto out;
516
			goto out;
(-)xx/fs/binfmt_elf.c.orig (-5 / +5 lines)
Lines 88-94 static int set_brk(unsigned long start, 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_unlocked(start, end - start);
92
		if (BAD_ADDR(addr))
92
		if (BAD_ADDR(addr))
93
			return addr;
93
			return addr;
94
	}
94
	}
Lines 406-412 static unsigned long load_elf_interp(str Link Here
406
406
407
	/* Map the last of the bss segment */
407
	/* Map the last of the bss segment */
408
	if (last_bss > elf_bss) {
408
	if (last_bss > elf_bss) {
409
		error = do_brk(elf_bss, last_bss - elf_bss);
409
		error = do_brk_unlocked(elf_bss, last_bss - elf_bss);
410
		if (BAD_ADDR(error))
410
		if (BAD_ADDR(error))
411
			goto out_close;
411
			goto out_close;
412
	}
412
	}
Lines 446-452 static unsigned long load_aout_interp(st Link Here
446
		goto out;
446
		goto out;
447
	}
447
	}
448
448
449
	do_brk(0, text_data);
449
	do_brk_unlocked(0, text_data);
450
	if (!interpreter->f_op || !interpreter->f_op->read)
450
	if (!interpreter->f_op || !interpreter->f_op->read)
451
		goto out;
451
		goto out;
452
	if (interpreter->f_op->read(interpreter, addr, text_data, &offset) < 0)
452
	if (interpreter->f_op->read(interpreter, addr, text_data, &offset) < 0)
Lines 454-460 static unsigned long load_aout_interp(st Link Here
454
	flush_icache_range((unsigned long)addr,
454
	flush_icache_range((unsigned long)addr,
455
	                   (unsigned long)addr + text_data);
455
	                   (unsigned long)addr + text_data);
456
456
457
	do_brk(ELF_PAGESTART(text_data + ELF_MIN_ALIGN - 1),
457
	do_brk_unlocked(ELF_PAGESTART(text_data + ELF_MIN_ALIGN - 1),
458
		interp_ex->a_bss);
458
		interp_ex->a_bss);
459
	elf_entry = interp_ex->a_entry;
459
	elf_entry = interp_ex->a_entry;
460
460
Lines 1006-1012 static int load_elf_library(struct file Link Here
1006
	len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1);
1006
	len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1);
1007
	bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
1007
	bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
1008
	if (bss > len)
1008
	if (bss > len)
1009
		do_brk(len, bss - len);
1009
		do_brk_unlocked(len, bss - len);
1010
	error = 0;
1010
	error = 0;
1011
1011
1012
out_free_ph:
1012
out_free_ph:
(-)xx/include/linux/mm.h.orig (+1 lines)
Lines 821-826 out: Link Here
821
extern int do_munmap(struct mm_struct *, unsigned long, size_t);
821
extern int do_munmap(struct mm_struct *, unsigned long, size_t);
822
822
823
extern unsigned long do_brk(unsigned long, unsigned long);
823
extern unsigned long do_brk(unsigned long, unsigned long);
824
extern unsigned long do_brk_unlocked(unsigned long, unsigned long);
824
825
825
/* vma merging helpers */
826
/* vma merging helpers */
826
static inline void
827
static inline void
(-)xx/mm/mmap.c.orig (+13 lines)
Lines 1658-1663 out: Link Here
1658
1658
1659
EXPORT_SYMBOL(do_brk);
1659
EXPORT_SYMBOL(do_brk);
1660
1660
1661
unsigned long do_brk_unlocked(unsigned long addr, unsigned long len)
1662
{
1663
	unsigned long ret;
1664
1665
	down_write(&current->mm->mmap_sem);
1666
	ret = do_brk(addr, len);
1667
	up_write(&current->mm->mmap_sem);
1668
1669
	return ret;
1670
}
1671
1672
EXPORT_SYMBOL(do_brk_unlocked);
1673
1661
/* Release all mmaps. */
1674
/* Release all mmaps. */
1662
void exit_mmap(struct mm_struct *mm)
1675
void exit_mmap(struct mm_struct *mm)
1663
{
1676
{

Return to bug 64492