git: d2eb8a023547 - main - bluetooth: sdpd: switch to getpeereid() instead of LOCAL_PEERCRED

From: Kyle Evans <kevans_at_FreeBSD.org>
Date: Thu, 24 Jul 2025 14:59:23 UTC
The branch main has been updated by kevans:

URL: https://cgit.FreeBSD.org/src/commit/?id=d2eb8a023547b03246f16ce455d20a4acfd552c4

commit d2eb8a023547b03246f16ce455d20a4acfd552c4
Author:     Kyle Evans <kevans@FreeBSD.org>
AuthorDate: 2025-07-24 14:59:07 +0000
Commit:     Kyle Evans <kevans@FreeBSD.org>
CommitDate: 2025-07-24 14:59:07 +0000

    bluetooth: sdpd: switch to getpeereid() instead of LOCAL_PEERCRED
    
    sdpd's usage was mostly fine, though it debatably should have been
    checking the xucred version to avoid mishaps.  Switch it to getpeereid()
    anyways to avoid embedding xucred layout details in more program.
    
    Reviewed by:    emax
    Differential Revision:  https://reviews.freebsd.org/D51152
---
 usr.sbin/bluetooth/sdpd/server.c | 12 +++++-------
 1 file changed, 5 insertions(+), 7 deletions(-)

diff --git a/usr.sbin/bluetooth/sdpd/server.c b/usr.sbin/bluetooth/sdpd/server.c
index ab398cd9339f..05a4cb5f0236 100644
--- a/usr.sbin/bluetooth/sdpd/server.c
+++ b/usr.sbin/bluetooth/sdpd/server.c
@@ -345,14 +345,12 @@ server_accept_client(server_p srv, int32_t fd)
 			return;
 		}
 	} else {
-		struct xucred	 cr;
+		uid_t		 uid;
+		gid_t		 gid;
 		struct passwd	*pw;
 
 		/* Get peer's credentials */
-		memset(&cr, 0, sizeof(cr));
-		size = sizeof(cr);
-
-		if (getsockopt(cfd, 0, LOCAL_PEERCRED, &cr, &size) < 0) {
+		if (getpeereid(cfd, &uid, &gid) < 0) {
 			log_err("Could not get peer's credentials. %s (%d)",
 				strerror(errno), errno);
 			close(cfd);
@@ -360,12 +358,12 @@ server_accept_client(server_p srv, int32_t fd)
 		}
 
 		/* Check credentials */
-		pw = getpwuid(cr.cr_uid);
+		pw = getpwuid(uid);
 		if (pw != NULL)
 			priv = (strcmp(pw->pw_name, "root") == 0);
 		else
 			log_warning("Could not verify credentials for uid %d",
-				cr.cr_uid);
+				uid);
 
 		memcpy(&srv->req_sa.l2cap_bdaddr, NG_HCI_BDADDR_ANY,
 			sizeof(srv->req_sa.l2cap_bdaddr));