diff --git a/src/stub/amd64-linux.elf-so_fold.h b/src/stub/amd64-linux.elf-so_fold.h index 0d6b6c1f..5796f92c 100644 --- a/src/stub/amd64-linux.elf-so_fold.h +++ b/src/stub/amd64-linux.elf-so_fold.h @@ -32,8 +32,8 @@ #define STUB_AMD64_LINUX_ELF_SO_FOLD_SIZE 17413 -#define STUB_AMD64_LINUX_ELF_SO_FOLD_ADLER32 0xfe8ef6c4 -#define STUB_AMD64_LINUX_ELF_SO_FOLD_CRC32 0xbf9bb8fd +#define STUB_AMD64_LINUX_ELF_SO_FOLD_ADLER32 0xbbc8f6c7 +#define STUB_AMD64_LINUX_ELF_SO_FOLD_CRC32 0xa1aa114b unsigned char stub_amd64_linux_elf_so_fold[17413] = { /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -71,7 +71,7 @@ unsigned char stub_amd64_linux_elf_so_fold[17413] = { /* 0x0200 */ 235, 91,232, 4, 0, 0, 0,117,112,120, 0, 95,190, 0, 0, 0, /* 0x0210 */ 0,232, 0, 0, 0, 0,137,195,232, 7, 0, 0, 0, 15, 5, 95, /* 0x0220 */ 94, 90,195, 0, 94,186, 6, 0, 0, 0,137,199,232, 0, 0, 0, -/* 0x0230 */ 0, 65,185, 0, 0, 0, 0, 65,137,216,185, 1, 0, 0, 0,186, +/* 0x0230 */ 0, 65,185, 0, 0, 0, 0, 65,137,216,185, 2, 0, 0, 0,186, /* 0x0240 */ 5, 0, 0, 0,190, 6, 0, 0, 0,191, 0, 0, 0, 0,232, 0, /* 0x0250 */ 0, 0, 0, 72,137,197,137,223,232, 0, 0, 0, 0, 72,137,232, /* 0x0260 */ 72,139, 92, 36, 8, 72,139,108, 36, 16, 72,131,196, 24,195, 72, @@ -121,7 +121,7 @@ unsigned char stub_amd64_linux_elf_so_fold[17413] = { /* 0x0520 */ 199,232, 0, 0, 0, 0,139, 84, 36, 28, 43, 85, 0,139,117, 0, /* 0x0530 */ 76, 1,254,137,223,232, 0, 0, 0, 0,139,108, 36, 28, 72,137, /* 0x0540 */ 238, 76,137,255,232, 0, 0, 0, 0, 76,137,231,232, 0, 0, 0, -/* 0x0550 */ 0, 65,185, 0, 0, 0, 0, 65,137,216,185, 17, 0, 0, 0,137, +/* 0x0550 */ 0, 65,185, 0, 0, 0, 0, 65,137,216,185, 18, 0, 0, 0,137, /* 0x0560 */ 194, 72,137,238, 76,137,255,232, 0, 0, 0, 0,137,223,232, 0, /* 0x0570 */ 0, 0, 0, 72,199, 68, 36, 16, 0, 0, 0, 0, 77, 57,244, 15, /* 0x0580 */ 131, 9, 2, 0, 0, 65,131, 60, 36, 1, 15,133,241, 1, 0, 0, @@ -152,7 +152,7 @@ unsigned char stub_amd64_linux_elf_so_fold[17413] = { /* 0x0710 */ 68, 36, 16, 65,246, 68, 36, 4, 1,116, 72,137,238, 3,116, 36, /* 0x0720 */ 80, 72,139,124, 36, 8,232, 0, 0, 0, 0, 76,137,231,232, 0, /* 0x0730 */ 0, 0, 0,139,116, 36, 80, 72,139,124, 36, 32, 73, 3,124, 36, -/* 0x0740 */ 16, 76, 1,239, 65,185, 0, 0, 0, 0, 69,137,248,185, 17, 0, +/* 0x0740 */ 16, 76, 1,239, 65,185, 0, 0, 0, 0, 69,137,248,185, 18, 0, /* 0x0750 */ 0, 0,137,194,232, 0, 0, 0, 0, 68,137,255,232, 0, 0, 0, /* 0x0760 */ 0,235, 30, 76,137,231,232, 0, 0, 0, 0, 73,139,116, 36, 40, /* 0x0770 */ 72,139,124, 36, 32, 73, 3,124, 36, 16,137,194,232, 0, 0, 0, diff --git a/src/stub/arm.v4a-linux.elf-so_fold.h b/src/stub/arm.v4a-linux.elf-so_fold.h index 9cfc2059..6350f10b 100644 --- a/src/stub/arm.v4a-linux.elf-so_fold.h +++ b/src/stub/arm.v4a-linux.elf-so_fold.h @@ -32,8 +32,8 @@ #define STUB_ARM_V4A_LINUX_ELF_SO_FOLD_SIZE 26593 -#define STUB_ARM_V4A_LINUX_ELF_SO_FOLD_ADLER32 0x75ea1b23 -#define STUB_ARM_V4A_LINUX_ELF_SO_FOLD_CRC32 0x0c2466af +#define STUB_ARM_V4A_LINUX_ELF_SO_FOLD_ADLER32 0x933c1b26 +#define STUB_ARM_V4A_LINUX_ELF_SO_FOLD_CRC32 0x06e48264 unsigned char stub_arm_v4a_linux_elf_so_fold[26593] = { /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, @@ -147,7 +147,7 @@ unsigned char stub_arm_v4a_linux_elf_so_fold[26593] = { /* 0x06c0 */ 254,255,255,235, 9, 0,160,225, 4, 16,160,225,254,255,255,235, /* 0x06d0 */ 6, 0,160,225,254,255,255,235, 0, 32,160,225, 0, 80,141,229, /* 0x06e0 */ 0, 48,160,227, 4, 48,141,229, 9, 0,160,225, 4, 16,160,225, -/* 0x06f0 */ 17, 48,131,226,254,255,255,235, 5, 0,160,225,254,255,255,235, +/* 0x06f0 */ 18, 48,131,226,254,255,255,235, 5, 0,160,225,254,255,255,235, /* 0x0700 */ 6, 0, 90,225, 0, 32,160,147, 40, 32,141,149,193, 1, 0,154, /* 0x0710 */ 0, 48,160,227, 40, 48,141,229, 16,192,157,229, 12,192,224,225, /* 0x0720 */ 8,192,141,229, 6, 80,160,225, 0, 48,150,229, 1, 0, 83,227, @@ -187,7 +187,7 @@ unsigned char stub_arm_v4a_linux_elf_so_fold[26593] = { /* 0x0940 */ 52, 0,157,229, 8, 16,130,226,254,255,255,235,153, 1, 0,234, /* 0x0950 */ 254,255,255,235, 0, 64,160,225, 56, 16,141,226, 8, 32,160,227, /* 0x0960 */ 254,255,255,235, 0, 64,141,229, 0, 48,160,227, 4, 48,141,229, -/* 0x0970 */ 3, 0,160,225, 8, 16,160,227, 5, 32,160,227, 1, 48,131,226, +/* 0x0970 */ 3, 0,160,225, 8, 16,160,227, 5, 32,160,227, 2, 48,131,226, /* 0x0980 */ 254,255,255,235, 52, 0,141,229, 4, 0,160,225,254,255,255,235, /* 0x0990 */ 153, 1, 0,234, 0,192,160,227, 52,192,141,229, 52, 0,157,229, /* 0x09a0 */ 40, 0,141,229, 24, 48,149,229, 1, 0, 19,227,180, 1, 0, 10, @@ -195,7 +195,7 @@ unsigned char stub_arm_v4a_linux_elf_so_fold[26593] = { /* 0x09c0 */ 8, 64,149,229, 36, 16,157,229, 4, 64,129,224, 44, 32,157,229, /* 0x09d0 */ 4, 64,130,224, 6, 0,160,225,254,255,255,235, 0, 32,160,225, /* 0x09e0 */ 0,112,141,229, 0, 48,160,227, 4, 48,141,229, 4, 0,160,225, -/* 0x09f0 */ 64, 16,157,229, 17, 48,131,226,254,255,255,235, 7, 0,160,225, +/* 0x09f0 */ 64, 16,157,229, 18, 48,131,226,254,255,255,235, 7, 0,160,225, /* 0x0a00 */ 254,255,255,235,190, 1, 0,234, 8, 64,149,229, 36,192,157,229, /* 0x0a10 */ 4, 64,140,224, 20, 80,149,229, 6, 0,160,225,254,255,255,235, /* 0x0a20 */ 0, 32,160,225, 4, 0,160,225, 5, 16,160,225,254,255,255,235, diff --git a/src/stub/arm.v5a-linux.elf-so_fold.h b/src/stub/arm.v5a-linux.elf-so_fold.h index b5859ffa..e08a489b 100644 --- a/src/stub/arm.v5a-linux.elf-so_fold.h +++ b/src/stub/arm.v5a-linux.elf-so_fold.h @@ -32,8 +32,8 @@ #define STUB_ARM_V5A_LINUX_ELF_SO_FOLD_SIZE 26950 -#define STUB_ARM_V5A_LINUX_ELF_SO_FOLD_ADLER32 0x1210a7cc -#define STUB_ARM_V5A_LINUX_ELF_SO_FOLD_CRC32 0xa132c1a4 +#define STUB_ARM_V5A_LINUX_ELF_SO_FOLD_ADLER32 0x30dda7cf +#define STUB_ARM_V5A_LINUX_ELF_SO_FOLD_CRC32 0x338f4247 unsigned char stub_arm_v5a_linux_elf_so_fold[26950] = { /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 97, 0, 0, 0, 0, 0, 0, 0, 0, @@ -161,7 +161,7 @@ unsigned char stub_arm_v5a_linux_elf_so_fold[26950] = { /* 0x07a0 */ 5, 0,160,225, 2, 16,137,224, 4, 32, 98,224,254,255,255,235, /* 0x07b0 */ 9, 0,160,225, 4, 16,160,225,254,255,255,235, 6, 0,160,225, /* 0x07c0 */ 254,255,255,235, 0, 32,160,225, 0, 80,141,229, 0, 48,160,227, -/* 0x07d0 */ 4, 48,141,229, 9, 0,160,225, 4, 16,160,225, 17, 48,131,226, +/* 0x07d0 */ 4, 48,141,229, 9, 0,160,225, 4, 16,160,225, 18, 48,131,226, /* 0x07e0 */ 254,255,255,235, 5, 0,160,225,254,255,255,235, 6, 0, 90,225, /* 0x07f0 */ 0, 32,160,147, 40, 32,141,149,194, 1, 0,154, 0, 48,160,227, /* 0x0800 */ 40, 48,141,229, 16,192,157,229, 12,192,224,225, 8,192,141,229, @@ -202,14 +202,14 @@ unsigned char stub_arm_v5a_linux_elf_so_fold[26950] = { /* 0x0a30 */ 154, 1, 0,234,254,255,255,235, 0, 64,160,225, 56, 16,141,226, /* 0x0a40 */ 8, 32,160,227,254,255,255,235, 0, 64,141,229, 0, 16,160,227, /* 0x0a50 */ 4, 16,141,229, 1, 0,160,225, 8, 16,129,226, 5, 32,160,227, -/* 0x0a60 */ 1, 48,160,227,254,255,255,235, 52, 0,141,229, 4, 0,160,225, +/* 0x0a60 */ 2, 48,160,227,254,255,255,235, 52, 0,141,229, 4, 0,160,225, /* 0x0a70 */ 254,255,255,235,154, 1, 0,234, 0, 32,160,227, 52, 32,141,229, /* 0x0a80 */ 52, 48,157,229, 40, 48,141,229, 24, 48,149,229, 1, 0, 19,227, /* 0x0a90 */ 181, 1, 0, 10, 48, 0,157,229, 64, 16,157,229, 1, 16,136,224, /* 0x0aa0 */ 254,255,255,235, 8, 64,149,229, 36,192,157,229, 4, 64,140,224, /* 0x0ab0 */ 44, 0,157,229, 4, 64,128,224, 6, 0,160,225,254,255,255,235, /* 0x0ac0 */ 0, 32,160,225, 0,112,141,229, 0, 16,160,227, 4, 16,141,229, -/* 0x0ad0 */ 4, 0,160,225, 64, 16,157,229, 17, 48,160,227,254,255,255,235, +/* 0x0ad0 */ 4, 0,160,225, 64, 16,157,229, 18, 48,160,227,254,255,255,235, /* 0x0ae0 */ 7, 0,160,225,254,255,255,235,191, 1, 0,234, 8, 64,149,229, /* 0x0af0 */ 36, 32,157,229, 4, 64,130,224, 20, 80,149,229, 6, 0,160,225, /* 0x0b00 */ 254,255,255,235, 0, 32,160,225, 4, 0,160,225, 5, 16,160,225, diff --git a/src/stub/arm64-linux.elf-so_fold.h b/src/stub/arm64-linux.elf-so_fold.h index c7bf9724..685dd0c7 100644 --- a/src/stub/arm64-linux.elf-so_fold.h +++ b/src/stub/arm64-linux.elf-so_fold.h @@ -32,8 +32,8 @@ #define STUB_ARM64_LINUX_ELF_SO_FOLD_SIZE 16470 -#define STUB_ARM64_LINUX_ELF_SO_FOLD_ADLER32 0xa29e5eb2 -#define STUB_ARM64_LINUX_ELF_SO_FOLD_CRC32 0x8140b020 +#define STUB_ARM64_LINUX_ELF_SO_FOLD_ADLER32 0x5ca85f12 +#define STUB_ARM64_LINUX_ELF_SO_FOLD_CRC32 0xc23c6836 unsigned char stub_arm64_linux_elf_so_fold[16470] = { /* 0x0000 */ 127, 69, 76, 70, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -112,7 +112,7 @@ unsigned char stub_arm64_linux_elf_so_fold[16470] = { /* 0x0490 */ 129, 66, 34,139, 2, 3, 2, 75, 0, 0, 0,148,248, 3, 24, 42, /* 0x04a0 */ 224, 3, 20,170,225, 3, 24,170, 0, 0, 0,148,224, 3, 19,170, /* 0x04b0 */ 0, 0, 0,148,226, 3, 0, 42,224, 3, 20,170,225, 3, 24,170, -/* 0x04c0 */ 35, 2,128, 82,228, 3, 26, 42, 5, 0,128,210, 0, 0, 0,148, +/* 0x04c0 */ 67, 2,128, 82,228, 3, 26, 42, 5, 0,128,210, 0, 0, 0,148, /* 0x04d0 */ 224, 3, 26, 42, 0, 0, 0,148,191, 2, 19,235,233, 22, 0, 84, /* 0x04e0 */ 191, 75, 0,249,244,255,255,146, 24, 0,128,210, 97, 2, 64,249, /* 0x04f0 */ 224, 3, 20,170, 64, 0,192,242, 32, 0, 0,138, 31, 4, 0,241, @@ -149,12 +149,12 @@ unsigned char stub_arm64_linux_elf_so_fold[16470] = { /* 0x06e0 */ 20, 0, 0, 20, 2, 0, 0,148,117,112,120, 0,224, 3, 30,170, /* 0x06f0 */ 1, 0,128, 82, 0, 0, 0,148,246, 3, 0, 42,161,131, 2,145, /* 0x0700 */ 2, 2,128,210, 0, 0, 0,148,224, 3, 24,170, 1, 2,128,210, -/* 0x0710 */ 162, 0,128, 82, 35, 0,128, 82,228, 3, 22, 42,229, 3, 24,170, +/* 0x0710 */ 162, 0,128, 82, 67, 0,128, 82,228, 3, 22, 42,229, 3, 24,170, /* 0x0720 */ 0, 0, 0,148,160, 75, 0,249,224, 3, 22, 42, 0, 0, 0,148, /* 0x0730 */ 96, 6, 64,185,160, 2, 0, 54,161,179, 64,185,160, 67, 64,249, /* 0x0740 */ 129, 3, 1, 11, 0, 0, 0,148,224, 3, 19,170, 0, 0, 0,148, /* 0x0750 */ 226, 3, 0, 42, 97, 10, 64,249, 96, 1,102,158, 0, 0, 1,139, -/* 0x0760 */ 0, 0, 27,139,161,179, 64,185, 35, 2,128, 82,182,159, 64,185, +/* 0x0760 */ 0, 0, 27,139,161,179, 64,185, 67, 2,128, 82,182,159, 64,185, /* 0x0770 */ 228, 3, 22, 42,229, 3, 24,170, 0, 0, 0,148,224, 3, 22, 42, /* 0x0780 */ 0, 0, 0,148, 9, 0, 0, 20,224, 3, 19,170, 0, 0, 0,148, /* 0x0790 */ 226, 3, 0, 42, 96, 10, 64,249, 97, 1,102,158, 32, 0, 0,139, diff --git a/src/stub/i386-linux.elf-so_fold.h b/src/stub/i386-linux.elf-so_fold.h index 66c17c44..59ff1d60 100644 --- a/src/stub/i386-linux.elf-so_fold.h +++ b/src/stub/i386-linux.elf-so_fold.h @@ -32,8 +32,8 @@ #define STUB_I386_LINUX_ELF_SO_FOLD_SIZE 14071 -#define STUB_I386_LINUX_ELF_SO_FOLD_ADLER32 0x9c4f8203 -#define STUB_I386_LINUX_ELF_SO_FOLD_CRC32 0xa260ec75 +#define STUB_I386_LINUX_ELF_SO_FOLD_ADLER32 0x36648206 +#define STUB_I386_LINUX_ELF_SO_FOLD_CRC32 0x31597947 unsigned char stub_i386_linux_elf_so_fold[14071] = { /* 0x0000 */ 127, 69, 76, 70, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -68,7 +68,7 @@ unsigned char stub_i386_linux_elf_so_fold[14071] = { /* 0x01d0 */ 235, 71,232, 4, 0, 0, 0,117,112,120, 0, 90,185, 0, 0, 0, /* 0x01e0 */ 0,190,100, 1, 0, 0,137,240,137,211,205,128,137,198,141, 77, /* 0x01f0 */ 244,186, 4, 0, 0, 0,137,195,106, 4, 88,205,128,106, 0, 86, -/* 0x0200 */ 106, 1,106, 5,106, 4,106, 0,232,252,255,255,255,137,193,131, +/* 0x0200 */ 106, 2,106, 5,106, 4,106, 0,232,252,255,255,255,137,193,131, /* 0x0210 */ 196, 24,137,243,106, 6, 88,205,128,137,200,141,101,248, 91, 94, /* 0x0220 */ 201,195,184, 0,240,255,255,195, 85,137,229, 87, 86, 83,129,236, /* 0x0230 */ 0, 16, 0, 0,139, 93, 12,139,117, 16,141,189,244,239,255,255, @@ -94,7 +94,7 @@ unsigned char stub_i386_linux_elf_so_fold[14071] = { /* 0x0370 */ 140,139,117,192,247,222,139, 69,172,255, 48,255,117, 16,255,117, /* 0x0380 */ 140,232,252,255,255,255,137,240,139, 85,172, 43, 2, 80,139, 69, /* 0x0390 */ 188, 3, 2, 80,255,117,140,232,252,255,255,255, 86,255,117,188, -/* 0x03a0 */ 232,252,255,255,255,131,196, 32,106, 0,255,117,140,106, 17, 87, +/* 0x03a0 */ 232,252,255,255,255,131,196, 32,106, 0,255,117,140,106, 18, 87, /* 0x03b0 */ 232,252,255,255,255,137, 4, 36, 86,255,117,188,232,252,255,255, /* 0x03c0 */ 255,131,196, 24,139, 93,140,106, 6, 88,205,128,199, 69,160, 0, /* 0x03d0 */ 0, 0, 0, 59,125,148, 15,131,163, 1, 0, 0,131, 63, 1, 15, @@ -119,7 +119,7 @@ unsigned char stub_i386_linux_elf_so_fold[14071] = { /* 0x0500 */ 116, 21,139, 69,192,247,208, 80,255,115, 4, 87,232,125,252,255, /* 0x0510 */ 255,137, 69,160,131,196, 12,246, 71, 24, 1,116, 59,139, 69,144, /* 0x0520 */ 3, 69,212, 80,255,117,152,232,252,255,255,255,106, 0, 86,106, -/* 0x0530 */ 17, 87,232,252,255,255,255,137, 4, 36,255,117,212,139, 69,168, +/* 0x0530 */ 18, 87,232,252,255,255,255,137, 4, 36,255,117,212,139, 69,168, /* 0x0540 */ 3, 71, 8, 3, 69,156, 80,232,252,255,255,255,131,196, 32,137, /* 0x0550 */ 243,106, 6, 88,205,128,235, 27, 87,232,252,255,255,255,137, 4, /* 0x0560 */ 36,255,119, 20,139, 69,168, 3, 71, 8, 80,232,252,255,255,255, diff --git a/src/stub/src/amd64-linux.elf-so_main.c b/src/stub/src/amd64-linux.elf-so_main.c index 260bba6c..b76f1070 100644 --- a/src/stub/src/amd64-linux.elf-so_main.c +++ b/src/stub/src/amd64-linux.elf-so_main.c @@ -264,7 +264,7 @@ make_hatch_x86_64( else { // Does not fit at hi end of .text, so must use a new page "permanently" int mfd = memfd_create(addr_string("upx"), 0); // the directory entry Pwrite(mfd, addr_string("\x0f\x05\x5f\x5e\x5a\xc3"), 6); - hatch = Pmap(0, 6, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); + hatch = Pmap(0, 6, PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0); close(mfd); } } @@ -306,7 +306,7 @@ make_hatch_ppc64( else { // Does not fit at hi end of .text, so must use a new page "permanently" int mfd = memfd_create(addr_string("upx"), 0); // the directory entry Pwrite(mfd, code, sizeof(code)); - hatch = Pmap(0, sizeof(code), PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); + hatch = Pmap(0, sizeof(code), PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0); close(mfd); } } @@ -344,7 +344,7 @@ make_hatch_arm64( else { // Does not fit at hi end of .text, so must use a new page "permanently" int mfd = memfd_create(addr_string("upx"), 0); // the directory entry Pwrite(mfd, code, sizeof(code)); - void *mfd_addr = Pmap(0, sizeof(code), PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); + void *mfd_addr = Pmap(0, sizeof(code), PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0); close(mfd); hatch = (unsigned *)mfd_addr; } @@ -500,7 +500,7 @@ upx_so_main( // returns &escape_hatch Punmap(va_load, mfd_len); // make SELinux forget any previous protection Elf64_Addr va_mfd = (Elf64_Addr)Pmap(va_load, mfd_len, PF_to_PROT(phdr), - MAP_FIXED|MAP_SHARED, mfd, 0); (void)va_mfd; + MAP_FIXED|MAP_PRIVATE, mfd, 0); (void)va_mfd; close(mfd); } @@ -576,7 +576,7 @@ upx_so_main( // returns &escape_hatch DPRINTF("mfd mmap addr=%%p len=%%p\\n", (phdr->p_vaddr + base + pfx), al_bi.sz_unc); Punmap(mfd_addr, frag + al_bi.sz_unc); // Discard RW mapping; mfd has the bytes Pmap((char *)(phdr->p_vaddr + base + pfx), al_bi.sz_unc, PF_to_PROT(phdr), - MAP_FIXED|MAP_SHARED, mfd, 0); + MAP_FIXED|MAP_PRIVATE, mfd, 0); close(mfd); } else { // easy diff --git a/src/stub/src/i386-linux.elf-so_main.c b/src/stub/src/i386-linux.elf-so_main.c index 73561642..de7fd20d 100644 --- a/src/stub/src/i386-linux.elf-so_main.c +++ b/src/stub/src/i386-linux.elf-so_main.c @@ -288,7 +288,7 @@ make_hatch_i386( else { // Does not fit at hi end of .text, so must use a new page "permanently" int mfd = memfd_create(addr_string("upx"), 0); // the directory entry write(mfd, &escape, 4); - hatch = mmap(0, 4, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); + hatch = mmap(0, 4, PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0); close(mfd); } } @@ -328,7 +328,7 @@ make_hatch_arm32( else { // Does not fit at hi end of .text, so must use a new page "permanently" int mfd = upxfd_create(); // the directory entry write(mfd, &code, 2*4); - hatch = Pmap(0, 2*4, PROT_READ|PROT_EXEC, MAP_SHARED, mfd, 0); + hatch = Pmap(0, 2*4, PROT_READ|PROT_EXEC, MAP_PRIVATE, mfd, 0); close(mfd); } } @@ -565,7 +565,7 @@ upx_so_main( // returns &escape_hatch Punmap(va_load, mfd_len); // make SELinux forget any previous protection Elf32_Addr va_mfd = (Elf32_Addr)Pmap(va_load, mfd_len, PF_to_PROT(phdr), - MAP_FIXED|MAP_SHARED, mfd, 0); (void)va_mfd; + MAP_FIXED|MAP_PRIVATE, mfd, 0); (void)va_mfd; close(mfd); } @@ -657,7 +657,7 @@ upx_so_main( // returns &escape_hatch DPRINTF("mfd mmap addr=%%p len=%%p\\n", (phdr->p_vaddr + base + pfx), al_bi.sz_unc); Punmap(mfd_addr, frag + al_bi.sz_unc); // Discard RW mapping; mfd has the bytes Pmap((char *)(phdr->p_vaddr + base + pfx), al_bi.sz_unc, PF_to_PROT(phdr), - MAP_FIXED|MAP_SHARED, mfd, 0); + MAP_FIXED|MAP_PRIVATE, mfd, 0); close(mfd); } else { // easy