diff options
Diffstat (limited to 'lib/uuid/gen_uuid.c')
-rw-r--r-- | lib/uuid/gen_uuid.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/lib/uuid/gen_uuid.c b/lib/uuid/gen_uuid.c index 5893aff3..420ca2b2 100644 --- a/lib/uuid/gen_uuid.c +++ b/lib/uuid/gen_uuid.c @@ -481,6 +481,7 @@ static int get_uuid_via_daemon(int op, uuid_t out, int *num) ssize_t ret; int32_t reply_len = 0, expected = 16; struct sockaddr_un srv_addr; + struct stat st; pid_t pid; static const char *uuidd_path = UUIDD_PATH; static int access_ret = -2; @@ -496,6 +497,10 @@ static int get_uuid_via_daemon(int op, uuid_t out, int *num) sizeof(struct sockaddr_un)) < 0) { if (access_ret == -2) access_ret = access(uuidd_path, X_OK); + if (access_ret == 0) + access_ret = stat(uuidd_path, &st); + if (access_ret == 0 && (st.st_mode & (S_ISUID | S_ISGID)) == 0) + access_ret = access(UUIDD_DIR, W_OK); if (access_ret == 0 && start_attempts++ < 5) { if ((pid = fork()) == 0) { close_all_fds(); |