diff -r c1f20ce4abcf -r 3e88ff8f41d5 kernel/eka/memmodel/epoc/flexible/mcodeseg.cpp --- a/kernel/eka/memmodel/epoc/flexible/mcodeseg.cpp Tue Aug 31 16:34:26 2010 +0300 +++ b/kernel/eka/memmodel/epoc/flexible/mcodeseg.cpp Wed Sep 01 12:34:56 2010 +0100 @@ -221,17 +221,12 @@ TInt exportDirSize = iRamInfo.iExportDirCount * sizeof(TLinAddr); if(exportDirSize > 0 || (exportDirSize==0 && (iCodeSeg->iAttr&ECodeSegAttNmdExpData)) ) { - TLinAddr expDirLoad = iRamInfo.iExportDir - iRamInfo.iCodeRunAddr + iRamInfo.iCodeLoadAddr; - if (expDirLoad < iRamInfo.iCodeLoadAddr || - expDirLoad + exportDirSize > iRamInfo.iCodeLoadAddr + iRamInfo.iCodeSize) - {// Invalid export section but the loader should have checked this. - return KErrCorrupt; - } exportDirSize += sizeof(TLinAddr); TLinAddr* expDir = (TLinAddr*)Kern::Alloc(exportDirSize); if(!expDir) return KErrNoMemory; iCopyOfExportDir = expDir; + TLinAddr expDirLoad = iRamInfo.iExportDir-iRamInfo.iCodeRunAddr+iRamInfo.iCodeLoadAddr; UNLOCK_USER_MEMORY(); memcpy(expDir,(TAny*)(expDirLoad-sizeof(TLinAddr)),exportDirSize); LOCK_USER_MEMORY();