2010-04-30 16:52:50

by Jason Wessel

[permalink] [raw]
Subject: [GIT PULL] kgdb fix for 2.6.34-rc5

Linus, please pull the for_linus branch for 2.6.34-rc5.

git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb.git for_linus

This is a hole introduced into the powerpc booke code long before the
kgdb core was merged to the mainline dating all the way back to 2.4.
This is the fix for CVE-2010-1446.

Thanks,
Jason.


---
The following changes since commit 79dba2eaa771c3173957eccfd288e0e0d12e4d3f:
Linus Torvalds (1):
Merge branch 'for-linus' of git://git.kernel.org/.../jbarnes/pci-2.6

are available in the git repository at:

git://git.kernel.org/pub/scm/linux/kernel/git/jwessel/linux-2.6-kgdb.git ..BRANCH.NOT.VERIFIED..

Wufei (1):
kgdb: don't needlessly skip PAGE_USER test for Fsl booke

arch/powerpc/mm/fsl_booke_mmu.c | 5 -----
1 files changed, 0 insertions(+), 5 deletions(-)


2010-04-30 17:00:44

by Jason Wessel

[permalink] [raw]
Subject: [PATCH 1/1] kgdb: don't needlessly skip PAGE_USER test for Fsl booke

From: Wufei <[email protected]>

The bypassing of this test is a leftover from 2.4 vintage
kernels, and is no longer appropriate, or even used by KGDB.
Currently KGDB uses probe_kernel_write() for all access to
memory via the KGDB core, so it can simply be deleted.

This fixes CVE-2010-1446.

CC: Benjamin Herrenschmidt <[email protected]>
CC: Paul Mackerras <[email protected]>
CC: Kumar Gala <[email protected]>
Signed-off-by: Wufei <[email protected]>
Signed-off-by: Jason Wessel <[email protected]>
---
arch/powerpc/mm/fsl_booke_mmu.c | 5 -----
1 files changed, 0 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/mm/fsl_booke_mmu.c b/arch/powerpc/mm/fsl_booke_mmu.c
index c539472..1ce9dd5 100644
--- a/arch/powerpc/mm/fsl_booke_mmu.c
+++ b/arch/powerpc/mm/fsl_booke_mmu.c
@@ -155,15 +155,10 @@ static void settlbcam(int index, unsigned long virt, phys_addr_t phys,
if (cur_cpu_spec->cpu_features & MMU_FTR_BIG_PHYS)
TLBCAM[index].MAS7 = (u64)phys >> 32;

-#ifndef CONFIG_KGDB /* want user access for breakpoints */
if (flags & _PAGE_USER) {
TLBCAM[index].MAS3 |= MAS3_UX | MAS3_UR;
TLBCAM[index].MAS3 |= ((flags & _PAGE_RW) ? MAS3_UW : 0);
}
-#else
- TLBCAM[index].MAS3 |= MAS3_UX | MAS3_UR;
- TLBCAM[index].MAS3 |= ((flags & _PAGE_RW) ? MAS3_UW : 0);
-#endif

tlbcam_addrs[index].start = virt;
tlbcam_addrs[index].limit = virt + size - 1;
--
1.6.3.3