diff options
Diffstat (limited to 'lib/libc')
-rw-r--r-- | lib/libc/gen/getpeereid.3 | 3 | ||||
-rw-r--r-- | lib/libc/gen/getpeereid.c | 3 |
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); |