Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 1 Nov 2018 18:19:10 +0000 (UTC)
From:      Edward Tomasz Napierala <trasz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r340015 - head/usr.sbin/nscd
Message-ID:  <201811011819.wA1IJABJ005300@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: trasz
Date: Thu Nov  1 18:19:10 2018
New Revision: 340015
URL: https://svnweb.freebsd.org/changeset/base/340015

Log:
  Unbreak nscd(8).  Without this change the CMSG gets truncated.
  
  Reviewed by:	des
  MFC after:	2 weeks
  Sponsored by:	Chalmers University of Technology
  Differential Revision:	https://reviews.freebsd.org/D17452

Modified:
  head/usr.sbin/nscd/nscdcli.c
  head/usr.sbin/nscd/query.c

Modified: head/usr.sbin/nscd/nscdcli.c
==============================================================================
--- head/usr.sbin/nscd/nscdcli.c	Thu Nov  1 17:45:29 2018	(r340014)
+++ head/usr.sbin/nscd/nscdcli.c	Thu Nov  1 18:19:10 2018	(r340015)
@@ -138,14 +138,14 @@ send_credentials(struct nscd_connection_ *connection, 
 	struct msghdr	cred_hdr;
 	struct iovec	iov;
 
-	struct {
+	union {
 		struct cmsghdr	hdr;
-		struct cmsgcred	creds;
+		char cred[CMSG_SPACE(sizeof(struct cmsgcred))];
 	} cmsg;
 
 	TRACE_IN(send_credentials);
 	memset(&cmsg, 0, sizeof(cmsg));
-	cmsg.hdr.cmsg_len = sizeof(cmsg);
+	cmsg.hdr.cmsg_len = CMSG_LEN(sizeof(struct cmsgcred));
 	cmsg.hdr.cmsg_level = SOL_SOCKET;
 	cmsg.hdr.cmsg_type = SCM_CREDS;
 
@@ -153,7 +153,7 @@ send_credentials(struct nscd_connection_ *connection, 
 	cred_hdr.msg_iov = &iov;
 	cred_hdr.msg_iovlen = 1;
 	cred_hdr.msg_control = &cmsg;
-	cred_hdr.msg_controllen = sizeof(cmsg);
+	cred_hdr.msg_controllen = CMSG_SPACE(sizeof(struct cmsgcred));
 
 	iov.iov_base = &type;
 	iov.iov_len = sizeof(int);

Modified: head/usr.sbin/nscd/query.c
==============================================================================
--- head/usr.sbin/nscd/query.c	Thu Nov  1 17:45:29 2018	(r340014)
+++ head/usr.sbin/nscd/query.c	Thu Nov  1 18:19:10 2018	(r340015)
@@ -160,7 +160,7 @@ on_query_startup(struct query_state *qstate)
 	struct cmsgcred *cred;
 	int elem_type;
 
-	struct {
+	union {
 		struct cmsghdr	hdr;
 		char cred[CMSG_SPACE(sizeof(struct cmsgcred))];
 	} cmsg;
@@ -171,8 +171,8 @@ on_query_startup(struct query_state *qstate)
 	memset(&cred_hdr, 0, sizeof(struct msghdr));
 	cred_hdr.msg_iov = &iov;
 	cred_hdr.msg_iovlen = 1;
-	cred_hdr.msg_control = (caddr_t)&cmsg;
-	cred_hdr.msg_controllen = CMSG_LEN(sizeof(struct cmsgcred));
+	cred_hdr.msg_control = &cmsg;
+	cred_hdr.msg_controllen = CMSG_SPACE(sizeof(struct cmsgcred));
 
 	memset(&iov, 0, sizeof(struct iovec));
 	iov.iov_base = &elem_type;
@@ -183,7 +183,8 @@ on_query_startup(struct query_state *qstate)
 		return (-1);
 	}
 
-	if (cmsg.hdr.cmsg_len < CMSG_LEN(sizeof(struct cmsgcred))
+	if (cred_hdr.msg_controllen < CMSG_LEN(sizeof(struct cmsgcred))
+		|| cmsg.hdr.cmsg_len < CMSG_LEN(sizeof(struct cmsgcred))
 		|| cmsg.hdr.cmsg_level != SOL_SOCKET
 		|| cmsg.hdr.cmsg_type != SCM_CREDS) {
 		TRACE_OUT(on_query_startup);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201811011819.wA1IJABJ005300>