| Submitter | Mark Nelson |
|---|---|
| Date | Feb. 25, 2009, 6:52 a.m. |
| Message ID | <200902251752.56514.markn@au1.ibm.com> |
| Download | mbox | patch |
| Permalink | /patch/23689/ |
| State | Superseded |
| Headers | show |
Comments
On Wed, 25 Feb 2009, Mark Nelson wrote: > On Tue, 24 Feb 2009 05:38:37 pm Sachin P. Sant wrote: > > Jan Kara wrote: > > > Hmm, OK. But then I'm not sure how that can happen. Obviously, memcpy > > > somehow got beyond end of the page referenced by bh->b_data. So it means > > > that le16_to_cpu(entry->e_value_offs) + size > page_size. But > > > ext3_xattr_find_entry() calls ext3_xattr_check_entry() which in > > > particular checks whether e_value_offs + e_value_size isn't greater than > > > bh->b_size. So I see no way how memcpy can get beyond end of the page. > > > Sachin, is the problem reproducible? If yes, can you send us contents > > > > > Yes, i am able to recreate this problem easily. As i had mentioned if the > > earlier kernel is booted with selinux enabled and then 2.6.29-rc6 is booted > > i get this crash. But if i specify selinux=0 at command line, 2.6.29-rc6 boots > > without any problem. > > Hi Sanchin and Geert, > > Does the patch below fix the problems you're seeing? If it does I'll send > a properly written up and formatted patch to linuxppc-dev (as well as > another one to fix the same problem in copy_tofrom_user()). Unfortunately not, now it crashes while accessing the memory pointed to by GPR16, in NIP: copy_page_range+x0608/0x628 LR: dup_mm+0x2e4/0x428 Trace: debug_table+0xcc70/0x1afe0 (unreliable) dup_mm+0x2e4/0x428 copy_process+0x86c/0xf9c do_fork+0x188/0x39c sys_clone+0x58/0x70 ppc_clone+0x8/0xc However, after reverting 25d6e2d7c58ddc4a3b614fc5381591c0cfe66556, I still see similar problems as above (crash in copy_page_range()). Which makes me think that 1. Your new patch fixes the problem introduced by 25d6e2d7, 2. There's still another issue than the one introduced by 25d6e2d7. With kind regards, Geert Uytterhoeven Software Architect Sony Techsoft Centre Europe The Corporate Village · Da Vincilaan 7-D1 · B-1935 Zaventem · Belgium Phone: +32 (0)2 700 8453 Fax: +32 (0)2 700 8622 E-mail: Geert.Uytterhoeven@sonycom.com Internet: http://www.sony-europe.com/ A division of Sony Europe (Belgium) N.V. VAT BE 0413.825.160 · RPR Brussels Fortis · BIC GEBABEBB · IBAN BE41293037680010
Mark Nelson wrote: > Hi Sanchin and Geert, > > Does the patch below fix the problems you're seeing? If it does I'll send > a properly written up and formatted patch to linuxppc-dev (as well as > another one to fix the same problem in copy_tofrom_user()). > This patch fixes the issue at my side. I tried booting the system few times and every single time it came up clean. Thanks -Sachin
On Wed, 25 Feb 2009 10:08:22 pm Sachin P. Sant wrote: > Mark Nelson wrote: > > Hi Sanchin and Geert, > > > > Does the patch below fix the problems you're seeing? If it does I'll send > > a properly written up and formatted patch to linuxppc-dev (as well as > > another one to fix the same problem in copy_tofrom_user()). > > > This patch fixes the issue at my side. I tried booting the system few times > and every single time it came up clean. Good to hear. Thanks for testing Sanchin! Mark
Patch
Index: upstream/arch/powerpc/lib/memcpy_64.S =================================================================== --- upstream.orig/arch/powerpc/lib/memcpy_64.S +++ upstream/arch/powerpc/lib/memcpy_64.S @@ -53,18 +53,19 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_ 3: std r8,8(r3) beq 3f addi r3,r3,16 - ld r9,8(r4) .Ldo_tail: bf cr7*4+1,1f - rotldi r9,r9,32 + lwz r9,8(r4) + addi r4,r4,4 stw r9,0(r3) addi r3,r3,4 1: bf cr7*4+2,2f - rotldi r9,r9,16 + lhz r9,8(r4) + addi r4,r4,2 sth r9,0(r3) addi r3,r3,2 2: bf cr7*4+3,3f - rotldi r9,r9,8 + lbz r9,8(r4) stb r9,0(r3) 3: ld r3,48(r1) /* return dest pointer */ blr @@ -133,11 +134,24 @@ END_FTR_SECTION_IFCLR(CPU_FTR_UNALIGNED_ cmpwi cr1,r5,8 addi r3,r3,32 sld r9,r9,r10 - ble cr1,.Ldo_tail + ble cr1,6f ld r0,8(r4) srd r7,r0,r11 or r9,r7,r9 - b .Ldo_tail +6: + bf cr7*4+1,1f + rotldi r9,r9,32 + stw r9,0(r3) + addi r3,r3,4 +1: bf cr7*4+2,2f + rotldi r9,r9,16 + sth r9,0(r3) + addi r3,r3,2 +2: bf cr7*4+3,3f + rotldi r9,r9,8 + stb r9,0(r3) +3: ld r3,48(r1) /* return dest pointer */ + blr .Ldst_unaligned: PPC_MTOCRF 0x01,r6 # put #bytes to 8B bdry into cr7