Change all shmget calls to user-only memory

Drop the read and write permissions for group and other users in the
system.

Change-Id: I8fc753f09126651af3fb82df3049050f0b14e876
Reviewed-by: Richard J. Moore <rich@kde.org>
This commit is contained in:
Thiago Macieira 2012-12-21 10:07:53 -08:00 committed by The Qt Project
parent 4d2eb3dd01
commit 856f209fb6
5 changed files with 11 additions and 7 deletions

4
dist/changes-5.0.1 vendored
View File

@ -114,3 +114,7 @@ Qt for Windows CE
* Important Behavior Changes *
****************************************************************************
- QSharedMemory on Unix systems now no longer creates shared memory
segments that are readable and writeable to everyone. From Qt 5.0.1
forward, the segments are created readable and writeable only by the
current user. This matches the behavior on Windows.

View File

@ -197,7 +197,7 @@ bool QSharedMemoryPrivate::create(int size)
}
// create
if (-1 == shmget(unix_key, size, 0666 | IPC_CREAT | IPC_EXCL)) {
if (-1 == shmget(unix_key, size, 0600 | IPC_CREAT | IPC_EXCL)) {
QString function = QLatin1String("QSharedMemory::create");
switch (errno) {
case EINVAL:
@ -218,7 +218,7 @@ bool QSharedMemoryPrivate::create(int size)
bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode)
{
// grab the shared memory segment id
int id = shmget(unix_key, 0, (mode == QSharedMemory::ReadOnly ? 0444 : 0660));
int id = shmget(unix_key, 0, (mode == QSharedMemory::ReadOnly ? 0400 : 0600));
if (-1 == id) {
setErrorString(QLatin1String("QSharedMemory::attach (shmget)"));
return false;
@ -263,7 +263,7 @@ bool QSharedMemoryPrivate::detach()
size = 0;
// Get the number of current attachments
int id = shmget(unix_key, 0, 0444);
int id = shmget(unix_key, 0, 0400);
cleanHandle();
struct shmid_ds shmid_ds;

View File

@ -136,10 +136,10 @@ key_t QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
}
// Get semaphore
semaphore = semget(unix_key, 1, 0666 | IPC_CREAT | IPC_EXCL);
semaphore = semget(unix_key, 1, 0600 | IPC_CREAT | IPC_EXCL);
if (-1 == semaphore) {
if (errno == EEXIST)
semaphore = semget(unix_key, 1, 0666 | IPC_CREAT);
semaphore = semget(unix_key, 1, 0600 | IPC_CREAT);
if (-1 == semaphore) {
setErrorString(QLatin1String("QSystemSemaphore::handle"));
cleanHandle();

View File

@ -107,7 +107,7 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
if (!segmentSize)
return;
int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0777);
int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0600);
if (id == -1)
qWarning("QXcbShmImage: shmget() failed (%d) for size %d (%dx%d)",
errno, segmentSize, size.width(), size.height());

View File

@ -209,7 +209,7 @@ int tst_QSharedMemory::remove(const QString &key)
return -3;
}
int id = shmget(unix_key, 0, 0660);
int id = shmget(unix_key, 0, 0600);
if (-1 == id) {
qDebug() << "shmget failed";
return -4;