summaryrefslogtreecommitdiff
path: root/security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c
diff options
context:
space:
mode:
authorHiroki Sato <hrs@FreeBSD.org>2022-05-06 17:31:40 +0900
committerHiroki Sato <hrs@FreeBSD.org>2022-05-06 17:32:09 +0900
commitcd09274aa2c59b5a06508ed00bf5bded7b7b6213 (patch)
tree9089f1274785e194391aa2e01883fa0e37af02e2 /security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c
parentpackage: fix inverted logic (diff)
security/opencryptoki: update to 3.18.0
Diffstat (limited to 'security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c')
-rw-r--r--security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c127
1 files changed, 96 insertions, 31 deletions
diff --git a/security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c b/security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c
index 85029168445c..e5755ab0f517 100644
--- a/security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c
+++ b/security/opencryptoki/files/patch-usr-sbin-pkcsslotd-socket_server.c
@@ -1,45 +1,110 @@
---- usr/sbin/pkcsslotd/socket_server.c.orig 2018-11-16 14:53:03 UTC
+--- usr/sbin/pkcsslotd/socket_server.c.orig 2022-04-25 11:04:51 UTC
+++ usr/sbin/pkcsslotd/socket_server.c
-@@ -19,6 +19,9 @@
- #include <sys/select.h>
- #include <sys/stat.h>
- #include <grp.h>
-+#ifndef SOCK_NONBLOCK
-+#include <fcntl.h>
+@@ -18,6 +18,9 @@
+ #include <stdlib.h>
+ #include <fcntl.h>
+
++#if defined(__FreeBSD__)
++#include <sys/ucred.h>
++#endif
+ #include <sys/time.h>
+ #include <sys/socket.h>
+ #include <sys/un.h>
+@@ -641,7 +644,11 @@ static int proc_new_conn(int socket, struct listener_i
+ struct proc_conn_info *conn;
+ struct event_info *event;
+ DL_NODE *list, *node;
++#if !defined(__FreeBSD__)
+ struct ucred ucred;
++#else
++ struct xucred ucred;
+#endif
+ socklen_t len;
+ int rc = 0;
- #include "log.h"
- #include "slotmgr.h"
-@@ -34,11 +37,23 @@ int CreateListenerSocket(void)
- struct group *grp;
- int socketfd;
+@@ -661,21 +668,34 @@ static int proc_new_conn(int socket, struct listener_i
+ DbgLog(DL3, "%s: process conn: %p", __func__, conn);
-+#ifdef SOCK_NONBLOCK
- socketfd = socket(PF_UNIX, SOCK_STREAM | SOCK_NONBLOCK, 0);
+ len = sizeof(ucred);
++#if !defined(__FreeBSD__)
+ rc = getsockopt(socket, SOL_SOCKET, SO_PEERCRED, &ucred, &len);
+#else
-+ socketfd = socket(PF_UNIX, SOCK_STREAM, 0);
++ rc = getsockopt(socket, 0, LOCAL_PEERCRED, &ucred, &len);
+#endif
- if (socketfd < 0) {
- ErrLog("Failed to create listener socket, errno 0x%X.", errno);
- return -1;
+ if (rc != 0 || len != sizeof(ucred)) {
+ rc = -errno;
+- ErrLog("%s: failed get credentials of peer process: %s",
+- strerror(-rc), __func__);
++ ErrLog("%s: failed get credentials of peer process: %s (len=%zu)",
++ __func__, strerror(-rc), len);
+ goto out;
}
-+#ifndef SOCK_NONBLOCK
-+ if (fcntl(socketfd, F_SETFL,
-+ fcntl(socketfd, F_GETFL) | O_NONBLOCK) < 0) {
-+ ErrLog("Failed to set listener non-block, errno 0x%X.", errno);
-+ close(socketfd);
-+ return -1;
-+ }
+
++#if !defined(__FreeBSD__)
+ DbgLog(DL3, "%s: process pid: %u uid: %u gid: %u", __func__,
+ ucred.pid, ucred.uid, ucred.gid);
+
+ conn->client_cred.real_pid = ucred.pid;
+ conn->client_cred.real_uid = ucred.uid;
+ conn->client_cred.real_gid = ucred.gid;
++#else
++ DbgLog(DL3, "%s: process pid: %u uid: %u gid: %u", __func__,
++ ucred.cr_pid, ucred.cr_uid, ucred.cr_gid);
+
++ conn->client_cred.real_pid = ucred.cr_pid;
++ conn->client_cred.real_uid = ucred.cr_uid;
++ conn->client_cred.real_gid = ucred.cr_gid;
+#endif
- if (unlink(SOCKET_FILE_PATH) && errno != ENOENT) {
- ErrLog("Failed to unlink socket file, errno 0x%X.", errno);
- close(socketfd);
-@@ -57,7 +72,7 @@ int CreateListenerSocket(void)
++
+ /* Add currently pending events to this connection */
+ node = dlist_get_first(pending_events);
+ while (node != NULL) {
+@@ -1280,13 +1300,13 @@ static int listener_socket_create(const char *file_pat
+ if (bind(listener_socket,
+ (struct sockaddr *) &address, sizeof(struct sockaddr_un)) != 0) {
+ err = errno;
+- ErrLog("%s: Failed to bind to socket, errno %d (%s).", __func__, err,
+- strerror(err));
++ ErrLog("%s: Failed to bind to socket, errno %d (%s): %s", __func__, err,
++ strerror(err), address.sun_path);
+ goto error;
}
// make socket file part of the pkcs11 group, and write accessable
// for that group
- grp = getgrnam("pkcs11");
+ grp = getgrnam(PKCS11GROUP);
if (!grp) {
- ErrLog("Group PKCS#11 does not exist");
- DetachSocketListener(socketfd);
+ ErrLog("%s: Group PKCS#11 does not exist", __func__);
+ goto error;
+@@ -1408,7 +1428,9 @@ static int listener_create(const char *file_path,
+ if (listener->socket < 0)
+ return FALSE;
+
++ memset(&evt, 0, sizeof(evt));
+ evt.events = EPOLLIN | EPOLLET;
++ evt.data.fd = listener->socket;
+ evt.data.ptr = &listener->ep_info;
+ rc = epoll_ctl(epoll_fd, EPOLL_CTL_ADD, listener->socket, &evt);
+ if (rc != 0) {
+@@ -1693,8 +1715,8 @@ int socket_connection_handler(int timeout_secs)
+ err = errno;
+ if (err == EINTR)
+ continue;
+- ErrLog("%s: epoll_wait failed, errno %d (%s).", __func__, err,
+- strerror(err));
++ ErrLog("%s: epoll_wait failed, errno %d (%s): %d", __func__, err,
++ strerror(err), epoll_fd);
+ return FALSE;
+ }
+
+@@ -1730,8 +1752,8 @@ int init_socket_server(int event_support_disabled)
+ epoll_fd = epoll_create1(0);
+ if (epoll_fd < 0) {
+ err = errno;
+- ErrLog("%s: Failed to open epoll socket, errno %d (%s).", __func__, err,
+- strerror(err));
++ ErrLog("%s: Failed to open epoll socket, errno %d (%s): %d", __func__, err,
++ strerror(err), epoll_fd);
+ return FALSE;
+ }
+