svn commit: r341079 - in stable/12: lib/libnv lib/libnv/tests sys/contrib/libnv
Mark Johnston
markj at FreeBSD.org
Tue Nov 27 17:00:49 UTC 2018
Author: markj
Date: Tue Nov 27 17:00:47 2018
New Revision: 341079
URL: https://svnweb.freebsd.org/changeset/base/341079
Log:
MFC r340408:
Ensure that libnv can be used when kern.trap_enotcap=1.
Modified:
stable/12/lib/libnv/common_impl.h
stable/12/lib/libnv/msgio.c
stable/12/lib/libnv/tests/nvlist_send_recv_test.c
stable/12/sys/contrib/libnv/nvpair.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/lib/libnv/common_impl.h
==============================================================================
--- stable/12/lib/libnv/common_impl.h Tue Nov 27 16:59:12 2018 (r341078)
+++ stable/12/lib/libnv/common_impl.h Tue Nov 27 17:00:47 2018 (r341079)
@@ -34,6 +34,15 @@
#ifndef _COMMON_IMPL_H_
#define _COMMON_IMPL_H_
-#define fd_is_valid(fd) (fcntl((fd), F_GETFL) != -1 || errno != EBADF)
+#include <errno.h>
+#include <fcntl.h>
+#include <stdbool.h>
+
+static inline bool
+fd_is_valid(int fd)
+{
+
+ return (fcntl(fd, F_GETFD) != -1 || errno != EBADF);
+}
#endif /* !_COMMON_IMPL_H_ */
Modified: stable/12/lib/libnv/msgio.c
==============================================================================
--- stable/12/lib/libnv/msgio.c Tue Nov 27 16:59:12 2018 (r341078)
+++ stable/12/lib/libnv/msgio.c Tue Nov 27 17:00:47 2018 (r341079)
@@ -66,11 +66,6 @@ msghdr_add_fd(struct cmsghdr *cmsg, int fd)
PJDLOG_ASSERT(fd >= 0);
- if (!fd_is_valid(fd)) {
- errno = EBADF;
- return (-1);
- }
-
cmsg->cmsg_level = SOL_SOCKET;
cmsg->cmsg_type = SCM_RIGHTS;
cmsg->cmsg_len = CMSG_LEN(sizeof(fd));
Modified: stable/12/lib/libnv/tests/nvlist_send_recv_test.c
==============================================================================
--- stable/12/lib/libnv/tests/nvlist_send_recv_test.c Tue Nov 27 16:59:12 2018 (r341078)
+++ stable/12/lib/libnv/tests/nvlist_send_recv_test.c Tue Nov 27 17:00:47 2018 (r341079)
@@ -306,15 +306,12 @@ parent(int sock)
CHECK(name == NULL);
}
-int
-main(void)
+static void
+send_nvlist(void)
{
int status, socks[2];
pid_t pid;
- printf("1..134\n");
- fflush(stdout);
-
if (socketpair(PF_UNIX, SOCK_STREAM, 0, socks) < 0)
err(1, "socketpair() failed");
pid = fork();
@@ -326,7 +323,7 @@ main(void)
/* Child. */
close(socks[0]);
child(socks[1]);
- return (0);
+ _exit(0);
default:
/* Parent. */
close(socks[1]);
@@ -336,6 +333,35 @@ main(void)
if (waitpid(pid, &status, 0) < 0)
err(1, "waitpid() failed");
+}
+
+static void
+send_closed_fd(void)
+{
+ nvlist_t *nvl;
+ int error, socks[2];
+
+ if (socketpair(PF_UNIX, SOCK_STREAM, 0, socks) < 0)
+ err(1, "socketpair() failed");
+
+ nvl = nvlist_create(0);
+ nvlist_add_descriptor(nvl, "fd", 12345);
+ error = nvlist_error(nvl);
+ CHECK(error == EBADF);
+
+ error = nvlist_send(socks[1], nvl);
+ CHECK(error != 0 && errno == EBADF);
+}
+
+int
+main(void)
+{
+
+ printf("1..136\n");
+ fflush(stdout);
+
+ send_nvlist();
+ send_closed_fd();
return (0);
}
Modified: stable/12/sys/contrib/libnv/nvpair.c
==============================================================================
--- stable/12/sys/contrib/libnv/nvpair.c Tue Nov 27 16:59:12 2018 (r341078)
+++ stable/12/sys/contrib/libnv/nvpair.c Tue Nov 27 17:00:47 2018 (r341079)
@@ -1276,11 +1276,6 @@ nvpair_create_descriptor(const char *name, int value)
{
nvpair_t *nvp;
- if (value < 0 || !fd_is_valid(value)) {
- ERRNO_SET(EBADF);
- return (NULL);
- }
-
value = fcntl(value, F_DUPFD_CLOEXEC, 0);
if (value < 0)
return (NULL);
@@ -1517,11 +1512,6 @@ nvpair_create_descriptor_array(const char *name, const
if (value[ii] == -1) {
fds[ii] = -1;
} else {
- if (!fd_is_valid(value[ii])) {
- ERRNO_SET(EBADF);
- goto fail;
- }
-
fds[ii] = fcntl(value[ii], F_DUPFD_CLOEXEC, 0);
if (fds[ii] == -1)
goto fail;
@@ -2035,10 +2025,6 @@ nvpair_append_descriptor_array(nvpair_t *nvp, const in
NVPAIR_ASSERT(nvp);
PJDLOG_ASSERT(nvp->nvp_type == NV_TYPE_DESCRIPTOR_ARRAY);
- if (value < 0 || !fd_is_valid(value)) {
- ERRNO_SET(EBADF);
- return -1;
- }
fd = fcntl(value, F_DUPFD_CLOEXEC, 0);
if (fd == -1) {
return (-1);
More information about the svn-src-stable
mailing list