- Timestamp:
- Sep 4, 2016, 3:48:28 PM (9 years ago)
- Location:
- trunk/src
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kWorker/kWorker.c
r2868 r2869 94 94 #endif 95 95 96 /** Marks unfinished code. */ 97 #if 1 98 # define KWFS_TODO() do { kwErrPrintf("\nHit TODO on line %u in %s!\n", __LINE__, __FUNCTION__); __debugbreak(); } while (0) 99 #else 100 # define KWFS_TODO() do { kwErrPrintf("\nHit TODO on line %u in %s!\n", __LINE__, __FUNCTION__); } while (0) 101 #endif 96 102 97 103 /** User data key for tools. */ … … 313 319 314 320 321 /** Pointer to a VirtualAlloc tracker entry. */ 322 typedef struct KWVIRTALLOC *PKWVIRTALLOC; 323 /** 324 * Tracking an VirtualAlloc allocation. 325 */ 326 typedef struct KWVIRTALLOC 327 { 328 PKWVIRTALLOC pNext; 329 void *pvAlloc; 330 KSIZE cbAlloc; 331 } KWVIRTALLOC; 332 315 333 typedef enum KWTOOLTYPE 316 334 { … … 417 435 /** Head of the list of temporary file. */ 418 436 PKWFSTEMPFILE pTempFileHead; 437 438 /** Head of the virtual alloc allocations. */ 439 PKWVIRTALLOC pVirtualAllocHead; 419 440 420 441 UNICODE_STRING SavedCommandLine; … … 1981 2002 longjmp(g_Sandbox.JmpBuf, 1); 1982 2003 } 1983 __debugbreak();2004 KWFS_TODO(); 1984 2005 } 1985 2006 … … 1990 2011 if (hProcess == GetCurrentProcess()) 1991 2012 kwSandbox_Kernel32_ExitProcess(uExitCode); 1992 __debugbreak();2013 KWFS_TODO(); 1993 2014 return TerminateProcess(hProcess, uExitCode); 1994 2015 } … … 2176 2197 static void kwSandbox_msvcrt__wincmdln(void) 2177 2198 { 2178 __debugbreak();2199 KWFS_TODO(); 2179 2200 } 2180 2201 … … 2183 2204 static void kwSandbox_msvcrt__wwincmdln(void) 2184 2205 { 2185 __debugbreak();2206 KWFS_TODO(); 2186 2207 } 2187 2208 … … 2191 2212 DWORD fFlags, PDWORD pidThread) 2192 2213 { 2193 __debugbreak();2214 KWFS_TODO(); 2194 2215 return NULL; 2195 2216 } … … 2199 2220 static uintptr_t __cdecl kwSandbox_msvcrt__beginthread(void (__cdecl *pfnThreadProc)(void *), unsigned cbStack, void *pvUser) 2200 2221 { 2201 __debugbreak();2222 KWFS_TODO(); 2202 2223 return 0; 2203 2224 } … … 2209 2230 unsigned fCreate, unsigned *pidThread) 2210 2231 { 2211 __debugbreak();2232 KWFS_TODO(); 2212 2233 return 0; 2213 2234 } … … 2225 2246 static DWORD WINAPI kwSandbox_Kernel32_GetEnvironmentVariableA(LPCSTR pwszVar, LPSTR pszValue, DWORD cbValue) 2226 2247 { 2227 __debugbreak();2248 KWFS_TODO(); 2228 2249 return 0; 2229 2250 } … … 2234 2255 { 2235 2256 KW_LOG(("GetEnvironmentVariableW: '%ls'\n", pwszVar)); 2236 // __debugbreak();2257 //KWFS_TODO(); 2237 2258 //SetLastError(ERROR_ENVVAR_NOT_FOUND); 2238 2259 //return 0; … … 2244 2265 static BOOL WINAPI kwSandbox_Kernel32_SetEnvironmentVariableA(LPCSTR pszVar, LPCSTR pszValue) 2245 2266 { 2246 __debugbreak();2267 KWFS_TODO(); 2247 2268 return FALSE; 2248 2269 } … … 2254 2275 KW_LOG(("SetEnvironmentVariableW: '%ls' = '%ls'\n", pwszVar, pwszValue)); 2255 2276 return SetEnvironmentVariableW(pwszVar, pwszValue); 2256 // __debugbreak();2277 //KWFS_TODO(); 2257 2278 //return FALSE; 2258 2279 } … … 2262 2283 static DWORD WINAPI kwSandbox_Kernel32_ExpandEnvironmentStringsA(LPCSTR pszSrc, LPSTR pwszDst, DWORD cbDst) 2263 2284 { 2264 __debugbreak();2285 KWFS_TODO(); 2265 2286 return 0; 2266 2287 } … … 2270 2291 static DWORD WINAPI kwSandbox_Kernel32_ExpandEnvironmentStringsW(LPCWSTR pwszSrc, LPWSTR pwszDst, DWORD cbDst) 2271 2292 { 2272 __debugbreak();2293 KWFS_TODO(); 2273 2294 return 0; 2274 2295 } … … 2278 2299 static int __cdecl kwSandbox_msvcrt__putenv(const char *pszVarEqualValue) 2279 2300 { 2280 __debugbreak();2301 KWFS_TODO(); 2281 2302 return 0; 2282 2303 } … … 2286 2307 static int __cdecl kwSandbox_msvcrt__wputenv(const wchar_t *pwszVarEqualValue) 2287 2308 { 2288 __debugbreak();2309 KWFS_TODO(); 2289 2310 return 0; 2290 2311 } … … 2294 2315 static errno_t __cdecl kwSandbox_msvcrt__putenv_s(const char *pszVar, const char *pszValue) 2295 2316 { 2296 __debugbreak();2317 KWFS_TODO(); 2297 2318 return 0; 2298 2319 } … … 2303 2324 { 2304 2325 KW_LOG(("_wputenv_s: '%ls' = '%ls'\n", pwszVar, pwszValue)); 2305 // __debugbreak();2326 //KWFS_TODO(); 2306 2327 return SetEnvironmentVariableW(pwszVar, pwszValue) ? 0 : -1; 2307 2328 } … … 2340 2361 static KUPTR /*void*/ __cdecl kwSandbox_msvcrt__get_environ(char ***ppapszEnviron) 2341 2362 { 2342 __debugbreak(); /** @todo check the callers expecations! */2363 KWFS_TODO(); /** @todo check the callers expecations! */ 2343 2364 *ppapszEnviron = g_Sandbox.environ; 2344 2365 return 0; … … 2350 2371 static KUPTR /*void*/ __cdecl kwSandbox_msvcrt__get_wenviron(wchar_t ***ppapwszEnviron) 2351 2372 { 2352 __debugbreak(); /** @todo check the callers expecations! */2373 KWFS_TODO(); /** @todo check the callers expecations! */ 2353 2374 *ppapwszEnviron = g_Sandbox.wenviron; 2354 2375 return 0; … … 2379 2400 if (rc != 0) 2380 2401 { 2381 __debugbreak();2402 KWFS_TODO(); 2382 2403 return LoadLibraryExA(pszFilename, hFile, fFlags); 2383 2404 } … … 2391 2412 if (pDynLoad->pMod == NULL) 2392 2413 return pDynLoad->hmod; 2393 __debugbreak();2414 KWFS_TODO(); 2394 2415 } 2395 2416 … … 2414 2435 } 2415 2436 else 2416 __debugbreak();2437 KWFS_TODO(); 2417 2438 } 2418 2439 return hmod; … … 2451 2472 if (pDynLoad->pMod != NULL) 2452 2473 return pDynLoad->hmod; 2453 __debugbreak();2474 KWFS_TODO(); 2454 2475 } 2455 2476 … … 2482 2503 } 2483 2504 2484 __debugbreak();2505 KWFS_TODO(); 2485 2506 } 2486 2507 else 2487 __debugbreak();2508 KWFS_TODO(); 2488 2509 } 2489 2510 else 2490 __debugbreak();2511 KWFS_TODO(); 2491 2512 } 2492 2513 return hmod; … … 2504 2525 || (hFile != NULL && hFile != INVALID_HANDLE_VALUE) ) 2505 2526 { 2506 __debugbreak();2527 KWFS_TODO(); 2507 2528 return LoadLibraryExA(pszFilename, hFile, fFlags); 2508 2529 } … … 2518 2539 if (kHlpIsFilenameOnly(pszFilename)) 2519 2540 { 2520 __debugbreak();2541 KWFS_TODO(); 2521 2542 return LoadLibraryExA(pszFilename, hFile, fFlags); 2522 2543 } … … 2536 2557 else 2537 2558 { 2538 __debugbreak();2559 KWFS_TODO(); 2539 2560 rc = kwLdrModuleResolveAndLookup(pszFilename, g_Sandbox.pTool->u.Sandboxed.pExe, NULL /*pImporter*/, &pMod); 2540 2561 if (rc != 0) … … 2543 2564 if (!pMod) 2544 2565 { 2545 __debugbreak();2566 KWFS_TODO(); 2546 2567 SetLastError(ERROR_MOD_NOT_FOUND); 2547 2568 return NULL; … … 2574 2595 } 2575 2596 2576 __debugbreak();2597 KWFS_TODO(); 2577 2598 SetLastError(ERROR_NOT_ENOUGH_MEMORY); 2578 2599 kwLdrModuleRelease(pMod); … … 2589 2610 return kwSandbox_Kernel32_LoadLibraryExA(szTmp, hFile, fFlags); 2590 2611 2591 __debugbreak();2612 KWFS_TODO(); 2592 2613 SetLastError(ERROR_FILENAME_EXCED_RANGE); 2593 2614 return NULL; … … 2608 2629 if (cchTmp < sizeof(szTmp)) 2609 2630 return kwSandbox_Kernel32_LoadLibraryExA(szTmp, NULL /*hFile*/, 0 /*fFlags*/); 2610 __debugbreak();2631 KWFS_TODO(); 2611 2632 SetLastError(ERROR_FILENAME_EXCED_RANGE); 2612 2633 return NULL; … … 2647 2668 } 2648 2669 2649 __debugbreak();2670 KWFS_TODO(); 2650 2671 return NULL; 2651 2672 } … … 2677 2698 } 2678 2699 2679 __debugbreak();2700 KWFS_TODO(); 2680 2701 return NULL; 2681 2702 } … … 2697 2718 if (pDynLoad->pMod) 2698 2719 return kwLdrModuleRetain(pDynLoad->pMod); 2699 __debugbreak();2720 KWFS_TODO(); 2700 2721 return NULL; 2701 2722 } … … 2708 2729 static UINT WINAPI kwSandbox_BreakIntoDebugger(void *pv1, void *pv2, void *pv3, void *pv4) 2709 2730 { 2710 __debugbreak();2731 KWFS_TODO(); 2711 2732 return -1; 2712 2733 } … … 2746 2767 } 2747 2768 2748 __debugbreak();2769 KWFS_TODO(); 2749 2770 SetLastError(ERROR_PROC_NOT_FOUND); 2750 2771 kwLdrModuleRelease(pMod); … … 2759 2780 return GetProcAddress(hmod, pszProc); 2760 2781 2761 __debugbreak();2782 KWFS_TODO(); 2762 2783 return GetProcAddress(hmod, pszProc); 2763 2784 } … … 2774 2795 return cbRet; 2775 2796 } 2776 __debugbreak();2797 KWFS_TODO(); 2777 2798 return 0; 2778 2799 } … … 2790 2811 } 2791 2812 2792 __debugbreak();2813 KWFS_TODO(); 2793 2814 return 0; 2794 2815 } … … 3765 3786 else 3766 3787 { 3767 cbNewSeg = 64*1024 *1024;3788 cbNewSeg = 64*1024; 3768 3789 rc = kHlpPageAlloc((void **)&pTempFile->paSegs[cSegs].pbData, cbNewSeg, KPROT_READWRITE, K_FALSE); 3769 3790 if (rc != 0) 3791 { 3792 kHlpAssertFailed(); 3770 3793 return K_FALSE; 3794 } 3771 3795 } 3772 3796 pTempFile->paSegs[cSegs].offData = pTempFile->cbFileAllocated; … … 3847 3871 } 3848 3872 3873 kHlpAssertFailed(); 3849 3874 *pcbActuallyWritten = 0; 3850 3875 SetLastError(ERROR_NOT_ENOUGH_MEMORY); … … 4282 4307 4283 4308 4284 /** Kernel32 - GetShortPathNameW - c l1[xx].dll of VS2010 does this to the4309 /** Kernel32 - GetShortPathNameW - c1[xx].dll of VS2010 does this to the 4285 4310 * directory containing each include file. We cache the result to speed 4286 4311 * things up a little. */ … … 4331 4356 pwszLongPath, K_MIN(cwcShortPath, cwcRet), K_MIN(cwcShortPath, cwcRet), pwszShortPath, cwcRet)); 4332 4357 return cwcRet; 4358 } 4359 4360 4361 /* 4362 * 4363 * Virtual memory management. 4364 * Virtual memory management. 4365 * Virtual memory management. 4366 * 4367 */ 4368 4369 4370 /** Kernel32 - VirtualAlloc - for c1[xx].dll 78GB leaks. */ 4371 static PVOID WINAPI kwSandbox_Kernel32_VirtualAlloc(PVOID pvAddr, SIZE_T cb, DWORD fAllocType, DWORD fProt) 4372 { 4373 PVOID pvMem = VirtualAlloc(pvAddr, cb, fAllocType, fProt); 4374 KW_LOG(("VirtualAlloc: pvAddr=%p cb=%p type=%#x prot=%#x -> %p (last=%d)\n", 4375 pvAddr, cb, fAllocType, fProt, pvMem, GetLastError())); 4376 if ( g_Sandbox.pTool->u.Sandboxed.enmHint == KWTOOLHINT_VISUAL_CPP_CL 4377 && pvMem) 4378 { 4379 PKWVIRTALLOC pTracker = g_Sandbox.pVirtualAllocHead; 4380 while ( pTracker 4381 && (KUPTR)pvMem - (KUPTR)pTracker->pvAlloc >= pTracker->cbAlloc) 4382 pTracker = pTracker->pNext; 4383 if (!pTracker) 4384 { 4385 DWORD dwErr = GetLastError(); 4386 PKWVIRTALLOC pTracker = (PKWVIRTALLOC)kHlpAlloc(sizeof(*pTracker)); 4387 if (pTracker) 4388 { 4389 pTracker->pvAlloc = pvMem; 4390 pTracker->cbAlloc = cb; 4391 pTracker->pNext = g_Sandbox.pVirtualAllocHead; 4392 g_Sandbox.pVirtualAllocHead = pTracker; 4393 } 4394 SetLastError(dwErr); 4395 } 4396 } 4397 return pvMem; 4398 } 4399 4400 4401 /** Kernel32 - VirtualFree. */ 4402 static BOOL WINAPI kwSandbox_Kernel32_VirtualFree(PVOID pvAddr, SIZE_T cb, DWORD dwFreeType) 4403 { 4404 BOOL fRc = VirtualFree(pvAddr, cb, dwFreeType); 4405 KW_LOG(("VirtualFree: pvAddr=%p cb=%p type=%#x -> %d\n", pvAddr, cb, dwFreeType, fRc)); 4406 if (g_Sandbox.pTool->u.Sandboxed.enmHint == KWTOOLHINT_VISUAL_CPP_CL) 4407 { 4408 if (dwFreeType & MEM_RELEASE) 4409 { 4410 PKWVIRTALLOC pTracker = g_Sandbox.pVirtualAllocHead; 4411 if (pTracker) 4412 { 4413 if (pTracker->pvAlloc == pvAddr) 4414 g_Sandbox.pVirtualAllocHead = pTracker->pNext; 4415 else 4416 { 4417 PKWVIRTALLOC pPrev; 4418 do 4419 { 4420 pPrev = pTracker; 4421 pTracker = pTracker->pNext; 4422 } while (pTracker && pTracker->pvAlloc != pvAddr); 4423 if (pTracker) 4424 pPrev->pNext = pTracker->pNext; 4425 } 4426 if (pTracker) 4427 kHlpFree(pTracker); 4428 else 4429 KW_LOG(("VirtualFree: pvAddr=%p not found!\n", pvAddr)); 4430 } 4431 } 4432 } 4433 return fRc; 4333 4434 } 4334 4435 … … 4418 4519 { TUPLE("GetShortPathNameW"), NULL, (KUPTR)kwSandbox_Kernel32_GetShortPathNameW }, 4419 4520 4521 { TUPLE("VirtualAlloc"), NULL, (KUPTR)kwSandbox_Kernel32_VirtualAlloc }, 4522 { TUPLE("VirtualFree"), NULL, (KUPTR)kwSandbox_Kernel32_VirtualFree }, 4523 4420 4524 /* 4421 4525 * MS Visual C++ CRTs. … … 4726 4830 static void kwSandboxCleanup(PKWSANDBOX pSandbox) 4727 4831 { 4832 PKWVIRTALLOC pTracker; 4728 4833 #ifdef WITH_TEMP_MEMORY_FILES 4729 4834 PKWFSTEMPFILE pTempFile; … … 4750 4855 #endif 4751 4856 4857 /* Free left behind VirtualAlloc leaks. */ 4858 pTracker = g_Sandbox.pVirtualAllocHead; 4859 g_Sandbox.pVirtualAllocHead = NULL; 4860 while (pTracker) 4861 { 4862 PKWVIRTALLOC pNext = pTracker->pNext; 4863 KW_LOG(("Freeing VirtualFree leak %p LB %#x\n", pTracker->pvAlloc, pTracker->cbAlloc)); 4864 VirtualFree(pTracker->pvAlloc, 0, MEM_RELEASE); 4865 kHlpFree(pTracker); 4866 pTracker = pNext; 4867 } 4752 4868 } 4753 4869 -
trunk/src/kmk/incdep.c
r2861 r2869 501 501 size_t const cbFile = (size_t)cur->pFileObj->Stats.st_size; 502 502 503 assert(cur->pFileObj->f Flags);503 assert(cur->pFileObj->fHaveStats); 504 504 cur->file_base = incdep_xmalloc (cur, cbFile + 1); 505 505 if (cur->file_base)
Note:
See TracChangeset
for help on using the changeset viewer.