summaryrefslogtreecommitdiffstats
path: root/lib/libc
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libc')
-rw-r--r--lib/libc/gen/getpeereid.33
-rw-r--r--lib/libc/gen/getpeereid.c3
2 files changed, 5 insertions, 1 deletions
diff --git a/lib/libc/gen/getpeereid.3 b/lib/libc/gen/getpeereid.3
index 94ed61e..e124d0a 100644
--- a/lib/libc/gen/getpeereid.3
+++ b/lib/libc/gen/getpeereid.3
@@ -118,7 +118,8 @@ have been called.
The argument
.Fa s
does not refer to a socket of type
-.Dv SOCK_STREAM .
+.Dv SOCK_STREAM ,
+or the kernel returned invalid data.
.El
.Sh SEE ALSO
.Xr connect 2 ,
diff --git a/lib/libc/gen/getpeereid.c b/lib/libc/gen/getpeereid.c
index 7d0c577..b64ff54 100644
--- a/lib/libc/gen/getpeereid.c
+++ b/lib/libc/gen/getpeereid.c
@@ -32,6 +32,7 @@ __FBSDID("$FreeBSD$");
#include <sys/ucred.h>
#include <sys/un.h>
+#include <errno.h>
#include <unistd.h>
int
@@ -45,6 +46,8 @@ getpeereid(int s, uid_t *euid, gid_t *egid)
error = getsockopt(s, LOCAL_PEERCRED, 1, &xuc, &xuclen);
if (error != 0)
return (error);
+ if (xuc.cr_version != XUCRED_VERSION)
+ return (EINVAL);
*euid = xuc.cr_uid;
*egid = xuc.cr_gid;
return (0);
OpenPOWER on IntegriCloud