shmat 在启用 selinux 的 rhel 环境中返回错误 (void *) -1

shmat 在启用 selinux 的 rhel 环境中返回错误 (void *) -1

根据文件:-

如果在 shmflg 中指定了 SHM_RDONLY,则附加该段以供读取,并且进程必须具有该段的读取权限。否则,该段将被附加以进行读取和写入,并且进程必须具有该段的读取和写入权限。不存在只写共享内存段的概念。

所以这里我传递 0,根据上面的语句将提供共享内存的读写访问权限。

ipcs 输出:-

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status

0x5304f6ab 98307      root       666        64         1

附加到memroy的C++代码

    //Get shared memory for given shm_id
    uint8_t* mem = (uint8_t *) shmat(_shm_id, NULL, 0);
    
    if ((void *) mem == (void *) -1){
       // in selinux enable system I am keep on coming here, mem is alway 0XFFFFFFF..
        return -1;
    }

奇怪的是,当我在 shmat 函数中传递 SHM_RDONLY 标志时,我得到了正确的共享内存位置,即使共享内存的权限是读写。

这里唯一的区别是内存是由 root 创建的并读取其他用户(如 user1),但由于给出了 666 权限,我不认为这可能是一个问题,不确定 selinux 是否在这里引起了一些问题。

相关内容