2009-07-07 16 views
0

Ich habe 2 Prozesse P1 und P2. P1 läuft als root und erzeugt einen Semaphor mit folgendem Aufruf:semget schlägt mit "Berechtigung verweigert"

semget (Schlüssel, 1, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);

und versuche, das Handle auf den gleichen Semaphor in einem anderen Prozess P2 zu bekommen, der unter dem normalen Benutzerkontext abläuft. Der Semget-Aufruf ist in diesem Prozess erfolgreich, aber Semopaufrufe schlagen mit "Berechtigung verweigert" fehl (Errno = 13).

Alle Hinweise wären von großer Hilfe.

~ ps7

Antwort

0

Um welche Sprache handelt es sich?

Ich denke, es gibt einen Fehler beim Importieren der S_ Konstanten, so dass sie Null sind und keine Wirkung haben.

Was ist mit einem Brute-Test mit der Bitmaske wie es ist? Versuchen Einsatz direkt IPC_CREAT | 0666

my 2 cents :)

0

"Zugriff verweigert"/EACCES ist natürlich im Einklang mit den unprivilegierten Prozess P2 zu semget einen vorhandenen Semaphore versucht, für die er Zugang fehlt. Also, vielleicht gibt es bereits einen vorhandenen Semaphor unter diesem Schlüssel, dem die erforderlichen S_IWOTH|S_IROTH Berechtigungen fehlen. (Vielleicht ein Rest aus einer frühen Version von P1?)

Was sagt ipcs -s sagen die Semaphore Berechtigungen? Was passiert, wenn Sie IPC_EXCL zu Ihrem semget Anruf in P1 hinzufügen? Wird es scheitern?

0

Verwenden S_IRUSR und S_IWUSR angeben Lese- und Schreibrechte für den Besitzer des Shared-Memory-Segment, und S_IROTH und S_IWOTH angeben Berechtigungen Lesen und Schreiben für andere Flaggen als das dritte Argument in der shmget().

IPC_CREATE garantiert nur, dass das neue Shared Memory-Segment entsprechend dem Schlüsselwert erstellt werden soll. Normalerweise schlägt shmget() fehl, wenn das mit dem Schlüsselwert angegebene Segment existiert.

1

Dieser Eintrag hat eine lange Zeit, aber ich war mit

0600 das gleiche Problem | IPC_CREAT

aber ich bereits fest meine Anwendung mit sudo läuft

Verwandte Themen