2009-07-07 8 views
0

J'ai 2 processus P1 et P2. P1 s'exécute en tant que root et crée un sémaphore avec l'appel suivant:Le semget échoue avec "Autorisation refusée"

semget (clé, 1, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH | IPC_CREAT);

et j'essaie d'obtenir le handle au même sémaphore dans un autre processus P2, qui s'exécute dans le contexte de l'utilisateur normal. Dans ce processus, l'appel de semget réussit, mais les appels semop échouent avec "Permission Denied" (Errno = 13).

Tous les pointeurs seraient d'une grande aide.

~ ES7

Répondre

0

Quelle est la langue que nous parlons?

Je pense qu'il y a une erreur dans l'importation des constantes S_, de sorte qu'elles sont nulles et ne produisent aucun effet. Qu'en est-il d'un test de brutalité avec le masque de bits tel quel? Essayez utiliser directement IPC_CREAT | 0666

mes 2 cents de

0

« Autorisation refusée »/EACCES est, bien sûr, en accord avec processus non privilégié P2 essayant de semget un sémaphores existant pour lequel il n'a pas accès. Donc, peut-être il y a déjà un sémaphore existant sous cette clé qui manque des autorisations S_IWOTH|S_IROTH nécessaires. (Peut-être un reste d'une ancienne version de P1?)

Que dit ipcs -s les autorisations du sémaphore? Que se passe-t-il si vous ajoutez IPC_EXCL à votre appel semget dans P1? Va-t-il échouer?

0

Utilisez S_IRUSR et S_IWUSR autorisations en lecture et précisez d'écriture pour le propriétaire du segment de mémoire partagée et S_IROTH et S_IWOTH précisent autorisations de lecture et écriture pour les drapeaux d'autres comme troisième arguement dans le shmget(). IPC_CREATE garantit uniquement que le nouveau segment de mémoire partagée doit être créé en fonction de la valeur de la clé. Généralement shmget() échoue si le segment spécifié avec la valeur de clé existe.

1

Cette entrée a longtemps, mais j'avais le même problème avec

0600 | IPC_CREAT

mais je l'ai déjà fixé ma demande en cours d'exécution avec sudo

Questions connexes