簡體   English   中英

RHEL 6.8上的mprotect()權限被拒絕錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM