diff options
| author | zousar <[email protected]> | 2026-04-13 14:08:09 -0600 |
|---|---|---|
| committer | zousar <[email protected]> | 2026-04-13 14:08:09 -0600 |
| commit | e7d3065cf47c9d8430be409a0c53422aea2e3532 (patch) | |
| tree | ab8e0c3f250585c798324b0d5ab410ff6885161c /src/zenutil/zenserverprocess.cpp | |
| parent | fix utf characters in source code (#953) (diff) | |
| download | zen-e7d3065cf47c9d8430be409a0c53422aea2e3532.tar.xz zen-e7d3065cf47c9d8430be409a0c53422aea2e3532.zip | |
Stop using O_CLOEXEC in shm_open
Diffstat (limited to 'src/zenutil/zenserverprocess.cpp')
| -rw-r--r-- | src/zenutil/zenserverprocess.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/src/zenutil/zenserverprocess.cpp b/src/zenutil/zenserverprocess.cpp index 9a282a848..20208e136 100644 --- a/src/zenutil/zenserverprocess.cpp +++ b/src/zenutil/zenserverprocess.cpp @@ -181,7 +181,7 @@ ZenServerState::Initialize() ThrowLastError("Could not map view of Zen server state"); } #else - int Fd = shm_open("/UnrealEngineZen", O_RDWR | O_CREAT | O_CLOEXEC, geteuid() == 0 ? 0766 : 0666); + int Fd = shm_open("/UnrealEngineZen", O_RDWR | O_CREAT, geteuid() == 0 ? 0766 : 0666); if (Fd < 0) { // Work around a potential issue if the service user is changed in certain configurations. @@ -191,12 +191,13 @@ ZenServerState::Initialize() // shared memory object and retry, we'll be able to get past shm_open() so long as we have // the appropriate permissions to create the shared memory object. shm_unlink("/UnrealEngineZen"); - Fd = shm_open("/UnrealEngineZen", O_RDWR | O_CREAT | O_CLOEXEC, geteuid() == 0 ? 0766 : 0666); + Fd = shm_open("/UnrealEngineZen", O_RDWR | O_CREAT, geteuid() == 0 ? 0766 : 0666); if (Fd < 0) { ThrowLastError("Could not open a shared memory object"); } } + fcntl(FdGuard.Fd, F_SETFD, FD_CLOEXEC); fchmod(Fd, 0666); void* hMap = (void*)intptr_t(Fd); @@ -244,11 +245,12 @@ ZenServerState::InitializeReadOnly() ThrowLastError("Could not map view of Zen server state"); } #else - int Fd = shm_open("/UnrealEngineZen", O_RDONLY | O_CLOEXEC, 0666); + int Fd = shm_open("/UnrealEngineZen", O_RDONLY, 0666); if (Fd < 0) { return false; } + fcntl(Fd, F_SETFD, FD_CLOEXEC); void* hMap = (void*)intptr_t(Fd); void* pBuf = mmap(nullptr, MapSize, PROT_READ, MAP_SHARED, Fd, 0); @@ -651,11 +653,12 @@ ZenServerInstanceInfo::Create(const Oid& SessionId, const InstanceInfoData& Data ThrowLastError("Could not map instance info shared memory"); } #else - int Fd = shm_open(Name.c_str(), O_RDWR | O_CREAT | O_TRUNC | O_CLOEXEC, 0666); + int Fd = shm_open(Name.c_str(), O_RDWR | O_CREAT | O_TRUNC, 0666); if (Fd < 0) { ThrowLastError("Could not create instance info shared memory"); } + fcntl(FdGuard.Fd, F_SETFD, FD_CLOEXEC); fchmod(Fd, 0666); if (ftruncate(Fd, kInstanceInfoSize) < 0) @@ -718,11 +721,12 @@ ZenServerInstanceInfo::OpenReadOnly(const Oid& SessionId) return false; } #else - int Fd = shm_open(Name.c_str(), O_RDONLY | O_CLOEXEC, 0666); + int Fd = shm_open(Name.c_str(), O_RDONLY, 0666); if (Fd < 0) { return false; } + fcntl(FdGuard.Fd, F_SETFD, FD_CLOEXEC); void* pBuf = mmap(nullptr, kInstanceInfoSize, PROT_READ, MAP_SHARED, Fd, 0); if (pBuf == MAP_FAILED) |