summaryrefslogtreecommitdiffstats
path: root/freebsd/lib
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2018-08-21 09:39:55 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-09-21 10:29:40 +0200
commit2df56dbd60bb5d925d2ce0ddbdefdbe6107ea783 (patch)
treebd7bad558534db4a1f400bc38a2c9aa7ea4f411e /freebsd/lib
parentUpdate to FreeBSD head 2018-02-01 (diff)
downloadrtems-libbsd-2df56dbd60bb5d925d2ce0ddbdefdbe6107ea783.tar.bz2
Update to FreeBSD head 2018-04-01
Git mirror commit 8dfb1ccc26d1cea7e2529303003ff61f9f1784c4. Update #3472.
Diffstat (limited to 'freebsd/lib')
-rw-r--r--freebsd/lib/libc/include/libc_private.h2
-rw-r--r--freebsd/lib/libc/net/getnameinfo.c26
-rw-r--r--freebsd/lib/libc/rpc/svc_dg.c2
-rw-r--r--freebsd/lib/libcasper/libcasper/libcasper.h46
4 files changed, 58 insertions, 18 deletions
diff --git a/freebsd/lib/libc/include/libc_private.h b/freebsd/lib/libc/include/libc_private.h
index 8e78f556..f5a2a570 100644
--- a/freebsd/lib/libc/include/libc_private.h
+++ b/freebsd/lib/libc/include/libc_private.h
@@ -409,6 +409,8 @@ int __sys_futimens(int fd, const struct timespec *times) __hidden;
int __sys_utimensat(int fd, const char *path,
const struct timespec *times, int flag) __hidden;
+__size_t __arc4_sysctl(unsigned char *, __size_t);
+
/* execve() with PATH processing to implement posix_spawnp() */
int _execvpe(const char *, char * const *, char * const *);
diff --git a/freebsd/lib/libc/net/getnameinfo.c b/freebsd/lib/libc/net/getnameinfo.c
index 741972de..d553ee5c 100644
--- a/freebsd/lib/libc/net/getnameinfo.c
+++ b/freebsd/lib/libc/net/getnameinfo.c
@@ -126,26 +126,36 @@ getnameinfo(const struct sockaddr *sa, socklen_t salen,
afd = find_afd(sa->sa_family);
if (afd == NULL)
return (EAI_FAMILY);
+ /*
+ * getnameinfo() accepts an salen of sizeof(struct sockaddr_storage)
+ * at maximum as shown in RFC 4038 Sec.6.2.3.
+ */
+ if (salen > sizeof(struct sockaddr_storage))
+ return (EAI_FAMILY);
+
switch (sa->sa_family) {
case PF_LOCAL:
/*
- * PF_LOCAL uses variable sa->sa_len depending on the
+ * PF_LOCAL uses variable salen depending on the
* content length of sun_path. Require 1 byte in
* sun_path at least.
*/
- if (salen > afd->a_socklen ||
- salen <= afd->a_socklen -
+ if (salen <= afd->a_socklen -
sizeofmember(struct sockaddr_un, sun_path))
- return (EAI_FAIL);
+ return (EAI_FAMILY);
+ else if (salen > afd->a_socklen)
+ salen = afd->a_socklen;
break;
case PF_LINK:
if (salen <= afd->a_socklen -
sizeofmember(struct sockaddr_dl, sdl_data))
- return (EAI_FAIL);
+ return (EAI_FAMILY);
break;
default:
- if (salen != afd->a_socklen)
- return (EAI_FAIL);
+ if (salen < afd->a_socklen)
+ return (EAI_FAMILY);
+ else
+ salen = afd->a_socklen;
break;
}
@@ -519,7 +529,7 @@ getnameinfo_un(const struct afd *afd,
if (serv != NULL && servlen > 0)
*serv = '\0';
if (host != NULL && hostlen > 0) {
- pathlen = sa->sa_len - afd->a_off;
+ pathlen = salen - afd->a_off;
if (pathlen + 1 > hostlen) {
*host = '\0';
diff --git a/freebsd/lib/libc/rpc/svc_dg.c b/freebsd/lib/libc/rpc/svc_dg.c
index f2a42346..87925cbc 100644
--- a/freebsd/lib/libc/rpc/svc_dg.c
+++ b/freebsd/lib/libc/rpc/svc_dg.c
@@ -70,7 +70,7 @@ __FBSDID("$FreeBSD$");
#include "rpc_com.h"
#include "mt_misc.h"
-#define su_data(xprt) ((struct svc_dg_data *)(xprt->xp_p2))
+#define su_data(xprt) ((struct svc_dg_data *)((xprt)->xp_p2))
#define rpc_buffer(xprt) ((xprt)->xp_p1)
#ifndef MAX
diff --git a/freebsd/lib/libcasper/libcasper/libcasper.h b/freebsd/lib/libcasper/libcasper/libcasper.h
index 6e1bfdba..81d65f56 100644
--- a/freebsd/lib/libcasper/libcasper/libcasper.h
+++ b/freebsd/lib/libcasper/libcasper/libcasper.h
@@ -45,6 +45,8 @@
#include <stdlib.h>
#include <unistd.h>
+#define CASPER_NO_UNIQ 0x00000001
+
#ifndef _NVLIST_T_DECLARED
#define _NVLIST_T_DECLARED
struct nvlist;
@@ -62,12 +64,36 @@ typedef struct cap_channel cap_channel_t;
#else
struct cap_channel {
int cch_fd;
+ int cch_flags;
};
typedef struct cap_channel cap_channel_t;
#define CASPER_SUPPORT (0)
#endif /* ! WITH_CASPER */
#endif /* ! _CAP_CHANNEL_T_DECLARED */
+#ifdef WITH_CASPER
+int cap_channel_flags(const cap_channel_t *chan);
+#else
+static inline int
+cap_channel_flags(const cap_channel_t *chan)
+{
+
+ return (chan->cch_flags);
+}
+#endif
+
+static inline int
+channel_nvlist_flags(const cap_channel_t *chan)
+{
+ int flags;
+
+ flags = 0;
+ if ((cap_channel_flags(chan) & CASPER_NO_UNIQ) != 0)
+ flags |= NV_FLAG_NO_UNIQUE;
+
+ return (flags);
+}
+
/*
* The functions opens unrestricted communication channel to Casper.
*/
@@ -103,16 +129,17 @@ int cap_service_limit(const cap_channel_t *chan,
* The function creates cap_channel_t based on the given socket.
*/
#ifdef WITH_CASPER
-cap_channel_t *cap_wrap(int sock);
+cap_channel_t *cap_wrap(int sock, int flags);
#else
static inline cap_channel_t *
-cap_wrap(int sock)
+cap_wrap(int sock, int flags)
{
cap_channel_t *chan;
chan = cap_init();
if (chan != NULL) {
chan->cch_fd = sock;
+ chan->cch_flags = flags;
}
return (chan);
}
@@ -122,7 +149,7 @@ cap_wrap(int sock)
* The function returns communication socket and frees cap_channel_t.
*/
#ifdef WITH_CASPER
-int cap_unwrap(cap_channel_t *chan);
+int cap_unwrap(cap_channel_t *chan, int *flags);
#else
static inline int
cap_unwrap(cap_channel_t *chan)
@@ -160,6 +187,7 @@ cap_clone(const cap_channel_t *chan)
newchan = NULL;
}
}
+ newchan->cch_flags = chan->cch_flags;
return (newchan);
}
@@ -212,7 +240,7 @@ static inline int
cap_limit_get(const cap_channel_t *chan __unused, nvlist_t **limitsp)
{
- *limitsp = nvlist_create(0);
+ *limitsp = nvlist_create(channel_nvlist_flags(chan));
return (0);
}
#endif
@@ -230,9 +258,9 @@ int cap_send_nvlist(const cap_channel_t *chan, const nvlist_t *nvl);
* Function receives nvlist over the given capability.
*/
#ifdef WITH_CASPER
-nvlist_t *cap_recv_nvlist(const cap_channel_t *chan, int flags);
+nvlist_t *cap_recv_nvlist(const cap_channel_t *chan);
#else
-#define cap_recv_nvlist(chan, flags) (nvlist_create(flags))
+#define cap_recv_nvlist(chan) (nvlist_create(chan->cch_flags))
#endif
/*
@@ -240,14 +268,14 @@ nvlist_t *cap_recv_nvlist(const cap_channel_t *chan, int flags);
* response over the given capability.
*/
#ifdef WITH_CASPER
-nvlist_t *cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl, int flags);
+nvlist_t *cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl);
#else
static inline nvlist_t *
-cap_xfer_nvlist(const cap_channel_t *chan __unused, nvlist_t *nvl, int flags)
+cap_xfer_nvlist(const cap_channel_t *chan, nvlist_t *nvl)
{
nvlist_destroy(nvl);
- return (nvlist_create(flags));
+ return (nvlist_create(channel_nvlist_flags(chan)));
}
#endif