diff options
Diffstat (limited to 'sys-kernel/xbox-sources/files/xbox-sources-2.6.10.77666.patch')
-rw-r--r-- | sys-kernel/xbox-sources/files/xbox-sources-2.6.10.77666.patch | 201 |
1 files changed, 0 insertions, 201 deletions
diff --git a/sys-kernel/xbox-sources/files/xbox-sources-2.6.10.77666.patch b/sys-kernel/xbox-sources/files/xbox-sources-2.6.10.77666.patch deleted file mode 100644 index 035a396a8057..000000000000 --- a/sys-kernel/xbox-sources/files/xbox-sources-2.6.10.77666.patch +++ /dev/null @@ -1,201 +0,0 @@ -# ChangeSet #3 -# 2005/01/12 08:09:20-08:00 torvalds@ppc970.osdl.org -# Handle two threads both trying to expand their stack simultaneously. -# -# We had all the locking right, but we didn't check whether one of the -# threads now no longer needed to expand, so we could incorrectly _shrink_ -# the stack in the other thread instead (not only causing segfaults, but -# since we didn't do a proper unmap, we'd possibly leak pages too). -# -# So re-check the need for expand after getting the lock. -# -# Noticed by Paul Starzetz. -# -# ChangeSet #2 -# 2005/01/10 11:23:42-08:00 torvalds@ppc970.osdl.org -# Clean up stack growth checks and move them into a common function. -# -# The grows-up and grows-down cases had all the same issues, but -# differered in the details. Additionlly, historical evolution of -# the tests had caused the result to be pretty unreadable with some -# rather long and complex conditionals. -# -# Fix it all up in a more readable helper function. -# -# This also adds the missing RLIMIT_MEMLOCK test. -# -# ChangeSet #1 -# 2005/01/11 07:40:07-08:00 chrisw@osdl.org -# [PATCH] acct_stack_growth nitpicks -# -# - allow CAP_IPC_LOCK to override mlock rlimit during stack expansion as -# in all other cases -# -# Signed-off-by: Chris Wright <chrisw@osdl.org> -# Signed-off-by: Linus Torvalds <torvalds@osdl.org> -# -# mm/mmap.c -# 2005/01/10 19:34:05-08:00 chrisw@osdl.org +1 -1 -# acct_stack_growth nitpicks -# -diff -urNp linux-2.6.10/mm/mmap.c linux-2.6.10.plasmaroo/mm/mmap.c ---- linux-2.6.10/mm/mmap.c 2004-12-24 21:35:00.000000000 +0000 -+++ linux-2.6.10.plasmaroo/mm/mmap.c 2005-01-15 21:49:26.000000000 +0000 -@@ -1319,13 +1319,57 @@ out: - return prev ? prev->vm_next : vma; - } - -+/* -+ * Verify that the stack growth is acceptable and -+ * update accounting. This is shared with both the -+ * grow-up and grow-down cases. -+ */ -+static int acct_stack_growth(struct vm_area_struct * vma, unsigned long size, unsigned long grow) -+{ -+ struct mm_struct *mm = vma->vm_mm; -+ struct rlimit *rlim = current->signal->rlim; -+ -+ /* address space limit tests */ -+ rlim = current->signal->rlim; -+ if (mm->total_vm + grow > rlim[RLIMIT_AS].rlim_cur >> PAGE_SHIFT) -+ return -ENOMEM; -+ -+ /* Stack limit test */ -+ if (size > rlim[RLIMIT_STACK].rlim_cur) -+ return -ENOMEM; -+ -+ /* mlock limit tests */ -+ if (vma->vm_flags & VM_LOCKED) { -+ unsigned long locked; -+ unsigned long limit; -+ locked = mm->locked_vm + grow; -+ limit = rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT; -+ if (locked > limit && !capable(CAP_IPC_LOCK)) -+ return -ENOMEM; -+ } -+ -+ /* -+ * Overcommit.. This must be the final test, as it will -+ * update security statistics. -+ */ -+ if (security_vm_enough_memory(grow)) -+ return -ENOMEM; -+ -+ /* Ok, everything looks good - let it rip */ -+ mm->total_vm += grow; -+ if (vma->vm_flags & VM_LOCKED) -+ mm->locked_vm += grow; -+ __vm_stat_account(mm, vma->vm_flags, vma->vm_file, grow); -+ return 0; -+} -+ - #ifdef CONFIG_STACK_GROWSUP - /* - * vma is the first one with address > vma->vm_end. Have to extend vma. - */ - int expand_stack(struct vm_area_struct * vma, unsigned long address) - { -- unsigned long grow; -+ int error; - - if (!(vma->vm_flags & VM_GROWSUP)) - return -EFAULT; -@@ -1345,28 +1389,25 @@ int expand_stack(struct vm_area_struct * - */ - address += 4 + PAGE_SIZE - 1; - address &= PAGE_MASK; -- grow = (address - vma->vm_end) >> PAGE_SHIFT; -+ error = 0; - -- /* Overcommit.. */ -- if (security_vm_enough_memory(grow)) { -- anon_vma_unlock(vma); -- return -ENOMEM; -- } -- -- if (address - vma->vm_start > current->signal->rlim[RLIMIT_STACK].rlim_cur || -- ((vma->vm_mm->total_vm + grow) << PAGE_SHIFT) > -- current->signal->rlim[RLIMIT_AS].rlim_cur) { -- anon_vma_unlock(vma); -- vm_unacct_memory(grow); -- return -ENOMEM; -+ /* Somebody else might have raced and expanded it already */ -+ if (address > vma->vm_end) { -+ unsigned long size, grow; -+ -+ size = address - vma->vm_start; -+ grow = (address - vma->vm_end) >> PAGE_SHIFT; -+ -+ error = acct_stack_growth(vma, size, grow); -+ if (!error) -+ vma->vm_end = address; - } -- vma->vm_end = address; -- vma->vm_mm->total_vm += grow; -- if (vma->vm_flags & VM_LOCKED) -- vma->vm_mm->locked_vm += grow; -- __vm_stat_account(vma->vm_mm, vma->vm_flags, vma->vm_file, grow); -- anon_vma_unlock(vma); -- return 0; -+ -+ error = acct_stack_growth(vma, size, grow); -+ if (!error) -+ vma->vm_end = address; -+ anon_vma_unlock(vma); -+ return error; - } - - struct vm_area_struct * -@@ -1391,7 +1432,7 @@ find_extend_vma(struct mm_struct *mm, un - */ - int expand_stack(struct vm_area_struct *vma, unsigned long address) - { -- unsigned long grow; -+ int error; - - /* - * We must make sure the anon_vma is allocated -@@ -1407,29 +1448,23 @@ int expand_stack(struct vm_area_struct * - * anon_vma lock to serialize against concurrent expand_stacks. - */ - address &= PAGE_MASK; -- grow = (vma->vm_start - address) >> PAGE_SHIFT; -+ error = 0; - -- /* Overcommit.. */ -- if (security_vm_enough_memory(grow)) { -- anon_vma_unlock(vma); -- return -ENOMEM; -- } -- -- if (vma->vm_end - address > current->signal->rlim[RLIMIT_STACK].rlim_cur || -- ((vma->vm_mm->total_vm + grow) << PAGE_SHIFT) > -- current->signal->rlim[RLIMIT_AS].rlim_cur) { -- anon_vma_unlock(vma); -- vm_unacct_memory(grow); -- return -ENOMEM; -+ /* Somebody else might have raced and expanded it already */ -+ if (address < vma->vm_start) { -+ unsigned long size, grow; -+ -+ size = vma->vm_end - address; -+ grow = (vma->vm_start - address) >> PAGE_SHIFT; -+ -+ error = acct_stack_growth(vma, size, grow); -+ if (!error) { -+ vma->vm_start = address; -+ vma->vm_pgoff -= grow; -+ } - } -- vma->vm_start = address; -- vma->vm_pgoff -= grow; -- vma->vm_mm->total_vm += grow; -- if (vma->vm_flags & VM_LOCKED) -- vma->vm_mm->locked_vm += grow; -- __vm_stat_account(vma->vm_mm, vma->vm_flags, vma->vm_file, grow); - anon_vma_unlock(vma); -- return 0; -+ return error; - } - - struct vm_area_struct * |