[英]run `make qemu` got error: `qemu_mprotect__osdep: mprotect failed: Permission denied`
[英]mprotect() Permission Denied error on RHEL 6.8
我在下面運行C程序,在RHEL 5.11和RHEL 6.8上執行該程序時得到不同的結果。 在5.11上,輸出為:
頁面大小為4096
由memalign()在0x12791000處分配的內存
保護成功
在6.8上,輸出為:
頁面大小為4096
memalign()在0xea6000處分配的內存
mprotect失敗:權限被拒絕
有誰知道為什么會這樣嗎? 是否需要設置內核參數?
這是C程序:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <malloc.h>
#include <sys/mman.h>
static void domp( void *, long );
static void domp( void *pmem, long psz ) {
if (mprotect( pmem, psz, PROT_READ | PROT_WRITE | PROT_EXEC ) == -1) {
perror( "mprotect failed" );
} else {
printf( "mprotect success\n" );
}
}
int main( int argc, char *argv[] ) {
long lpsz;
void *lmem;
lpsz = sysconf(_SC_PAGESIZE);
printf( "Page size is %ld\n", lpsz );
if ((lmem = memalign( lpsz, lpsz )) == NULL) {
perror( "memalign failed" );
exit (-1);
}
printf( "Memory allocated by memalign() at %p\n", lmem );
domp( lmem, lpsz );
return 0;
}
可能是selinux。
但是,真正的問題是,為什么要在未明確進行mmap的操作上調用mprotect。 實際上,如果確實需要其他權限,為什么不只使用mmap? 額外的問題是,為什么您認為需要PROT_EXEC。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.