The branch main has been updated by kevans:

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

commit d2eb8a023547b03246f16ce455d20a4acfd552c4
Author:     Kyle Evans <kev...@freebsd.org>
AuthorDate: 2025-07-24 14:59:07 +0000
Commit:     Kyle Evans <kev...@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));

Reply via email to