** Description changed: Since updating to the 4.4.0-2 kernel recvmsg() fails SCM_CREDENTIALS request with EOPNOTSUPP. This manifests as a test failure in Mir: - [ RUN ] PromptSessionClientAPI.client_pid_is_associated_with_session - unknown file: Failure + [ RUN ] PromptSessionClientAPI.client_pid_is_associated_with_session + unknown file: Failure Test case: - #include <gtest/gtest.h> - #include <gmock/gmock.h> + #include <stdlib.h> + #include <stdio.h> #include <sys/socket.h> #include <sys/stat.h> + #include <assert.h> + #include <errno.h> + #include <string.h> - TEST(IsItBroken, recvmsg) + int main() { - using namespace testing; - enum { server, client, size }; int socket_fd[size]; int const opt = 1; - ASSERT_THAT(socketpair(AF_LOCAL, SOCK_STREAM, 0, socket_fd), Eq(0)); + assert(socketpair(AF_LOCAL, SOCK_STREAM, 0, socket_fd) == 0); - auto const msg = "A random message"; + char const msg[] = "A random message"; send(socket_fd[client], msg, sizeof msg, MSG_DONTWAIT | MSG_NOSIGNAL); - ASSERT_THAT(setsockopt(socket_fd[server], SOL_SOCKET, SO_PASSCRED, - &opt, sizeof(opt)), Ne(-1)); + assert(setsockopt(socket_fd[server], SOL_SOCKET, SO_PASSCRED, &opt, + sizeof(opt)) != -1); union { struct cmsghdr cmh; - char control[CMSG_SPACE(sizeof(ucred))]; + char control[CMSG_SPACE(sizeof(ucred))]; } control_un; control_un.cmh.cmsg_len = CMSG_LEN(sizeof(ucred)); control_un.cmh.cmsg_level = SOL_SOCKET; control_un.cmh.cmsg_type = SCM_CREDENTIALS; msghdr msgh; - msgh.msg_name = nullptr; + msgh.msg_name = NULL; msgh.msg_namelen = 0; - msgh.msg_iov = nullptr; + msgh.msg_iov = NULL; msgh.msg_iovlen = 0; msgh.msg_control = control_un.control; msgh.msg_controllen = sizeof(control_un.control); errno = 0; - EXPECT_THAT(recvmsg(socket_fd[server], &msgh, MSG_PEEK), Ne(-1)) - << "Error: " << strerror(errno); - - for (auto socket : socket_fd) close(socket); + if (recvmsg(socket_fd[server], &msgh, MSG_PEEK) == -1) + { + printf("Error: %s\n", strerror(errno)); + exit(EXIT_FAILURE); + } + else + { + printf("Success!\n"); + exit(EXIT_SUCCESS); + } }
** Changed in: mir Importance: High => Critical -- You received this bug notification because you are a member of Kernel Packages, which is subscribed to linux in Ubuntu. https://bugs.launchpad.net/bugs/1540731 Title: SocketMessenger::update_session_creds() fails to get client PID, causing "[ FAILED ] PromptSessionClientAPI.client_pid_is_associated_with_session" Status in GLibC: New Status in Mir: Confirmed Status in linux package in Ubuntu: Confirmed Bug description: Since updating to the 4.4.0-2 kernel recvmsg() fails SCM_CREDENTIALS request with EOPNOTSUPP. This manifests as a test failure in Mir: [ RUN ] PromptSessionClientAPI.client_pid_is_associated_with_session unknown file: Failure Test case: #include <stdlib.h> #include <stdio.h> #include <sys/socket.h> #include <sys/stat.h> #include <assert.h> #include <errno.h> #include <string.h> int main() { enum { server, client, size }; int socket_fd[size]; int const opt = 1; assert(socketpair(AF_LOCAL, SOCK_STREAM, 0, socket_fd) == 0); char const msg[] = "A random message"; send(socket_fd[client], msg, sizeof msg, MSG_DONTWAIT | MSG_NOSIGNAL); assert(setsockopt(socket_fd[server], SOL_SOCKET, SO_PASSCRED, &opt, sizeof(opt)) != -1); union { struct cmsghdr cmh; char control[CMSG_SPACE(sizeof(ucred))]; } control_un; control_un.cmh.cmsg_len = CMSG_LEN(sizeof(ucred)); control_un.cmh.cmsg_level = SOL_SOCKET; control_un.cmh.cmsg_type = SCM_CREDENTIALS; msghdr msgh; msgh.msg_name = NULL; msgh.msg_namelen = 0; msgh.msg_iov = NULL; msgh.msg_iovlen = 0; msgh.msg_control = control_un.control; msgh.msg_controllen = sizeof(control_un.control); errno = 0; if (recvmsg(socket_fd[server], &msgh, MSG_PEEK) == -1) { printf("Error: %s\n", strerror(errno)); exit(EXIT_FAILURE); } else { printf("Success!\n"); exit(EXIT_SUCCESS); } } To manage notifications about this bug go to: https://bugs.launchpad.net/glibc/+bug/1540731/+subscriptions -- Mailing list: https://launchpad.net/~kernel-packages Post to : kernel-packages@lists.launchpad.net Unsubscribe : https://launchpad.net/~kernel-packages More help : https://help.launchpad.net/ListHelp