# HG changeset patch # User ramiro # Date 1250188194 0 # Node ID 1acbe8b170edba34019ac0ca1ef1c4f597386588 # Parent 8d73112b758993a67b5aca03c23079b1b4e6c4e0 Protect mmx2 filter code buffers so they are not executable and writeable at the same time (only mmap for now). diff -r 8d73112b7589 -r 1acbe8b170ed libswscale/swscale.c --- a/libswscale/swscale.c Thu Aug 13 18:28:55 2009 +0000 +++ b/libswscale/swscale.c Thu Aug 13 18:29:54 2009 +0000 @@ -2814,8 +2814,8 @@ if (c->canMMX2BeUsed && (flags & SWS_FAST_BILINEAR)) { #ifdef MAP_ANONYMOUS - c->lumMmx2FilterCode = mmap(NULL, MAX_MMX2_FILTER_CODE_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); - c->chrMmx2FilterCode = mmap(NULL, MAX_MMX2_FILTER_CODE_SIZE, PROT_EXEC | PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + c->lumMmx2FilterCode = mmap(NULL, MAX_MMX2_FILTER_CODE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); + c->chrMmx2FilterCode = mmap(NULL, MAX_MMX2_FILTER_CODE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, 0, 0); #elif HAVE_VIRTUALALLOC c->lumMmx2FilterCode = VirtualAlloc(NULL, MAX_MMX2_FILTER_CODE_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE); c->chrMmx2FilterCode = VirtualAlloc(NULL, MAX_MMX2_FILTER_CODE_SIZE, MEM_COMMIT, PAGE_EXECUTE_READWRITE); @@ -2831,6 +2831,11 @@ initMMX2HScaler( dstW, c->lumXInc, c->lumMmx2FilterCode, c->lumMmx2Filter, c->lumMmx2FilterPos, 8); initMMX2HScaler(c->chrDstW, c->chrXInc, c->chrMmx2FilterCode, c->chrMmx2Filter, c->chrMmx2FilterPos, 4); + +#ifdef MAP_ANONYMOUS + mprotect(c->lumMmx2FilterCode, MAX_MMX2_FILTER_CODE_SIZE, PROT_EXEC | PROT_READ); + mprotect(c->chrMmx2FilterCode, MAX_MMX2_FILTER_CODE_SIZE, PROT_EXEC | PROT_READ); +#endif } #endif /* defined(COMPILE_MMX2) */ } // initialize horizontal stuff