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:
parent
4d2eb3dd01
commit
856f209fb6
4
dist/changes-5.0.1
vendored
4
dist/changes-5.0.1
vendored
@ -114,3 +114,7 @@ Qt for Windows CE
|
|||||||
* Important Behavior Changes *
|
* 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.
|
||||||
|
@ -197,7 +197,7 @@ bool QSharedMemoryPrivate::create(int size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create
|
// 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");
|
QString function = QLatin1String("QSharedMemory::create");
|
||||||
switch (errno) {
|
switch (errno) {
|
||||||
case EINVAL:
|
case EINVAL:
|
||||||
@ -218,7 +218,7 @@ bool QSharedMemoryPrivate::create(int size)
|
|||||||
bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode)
|
bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode)
|
||||||
{
|
{
|
||||||
// grab the shared memory segment id
|
// 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) {
|
if (-1 == id) {
|
||||||
setErrorString(QLatin1String("QSharedMemory::attach (shmget)"));
|
setErrorString(QLatin1String("QSharedMemory::attach (shmget)"));
|
||||||
return false;
|
return false;
|
||||||
@ -263,7 +263,7 @@ bool QSharedMemoryPrivate::detach()
|
|||||||
size = 0;
|
size = 0;
|
||||||
|
|
||||||
// Get the number of current attachments
|
// Get the number of current attachments
|
||||||
int id = shmget(unix_key, 0, 0444);
|
int id = shmget(unix_key, 0, 0400);
|
||||||
cleanHandle();
|
cleanHandle();
|
||||||
|
|
||||||
struct shmid_ds shmid_ds;
|
struct shmid_ds shmid_ds;
|
||||||
|
@ -136,10 +136,10 @@ key_t QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get semaphore
|
// 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 (-1 == semaphore) {
|
||||||
if (errno == EEXIST)
|
if (errno == EEXIST)
|
||||||
semaphore = semget(unix_key, 1, 0666 | IPC_CREAT);
|
semaphore = semget(unix_key, 1, 0600 | IPC_CREAT);
|
||||||
if (-1 == semaphore) {
|
if (-1 == semaphore) {
|
||||||
setErrorString(QLatin1String("QSystemSemaphore::handle"));
|
setErrorString(QLatin1String("QSystemSemaphore::handle"));
|
||||||
cleanHandle();
|
cleanHandle();
|
||||||
|
@ -107,7 +107,7 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
|
|||||||
if (!segmentSize)
|
if (!segmentSize)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0777);
|
int id = shmget(IPC_PRIVATE, segmentSize, IPC_CREAT | 0600);
|
||||||
if (id == -1)
|
if (id == -1)
|
||||||
qWarning("QXcbShmImage: shmget() failed (%d) for size %d (%dx%d)",
|
qWarning("QXcbShmImage: shmget() failed (%d) for size %d (%dx%d)",
|
||||||
errno, segmentSize, size.width(), size.height());
|
errno, segmentSize, size.width(), size.height());
|
||||||
|
@ -209,7 +209,7 @@ int tst_QSharedMemory::remove(const QString &key)
|
|||||||
return -3;
|
return -3;
|
||||||
}
|
}
|
||||||
|
|
||||||
int id = shmget(unix_key, 0, 0660);
|
int id = shmget(unix_key, 0, 0600);
|
||||||
if (-1 == id) {
|
if (-1 == id) {
|
||||||
qDebug() << "shmget failed";
|
qDebug() << "shmget failed";
|
||||||
return -4;
|
return -4;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user