git: 04f6b99947d2 - main - netlink: use caller's credentials in rtnl_handle_newlink

From: Pouria Mousavizadeh Tehrani <pouria_at_FreeBSD.org>
Date: Sat, 24 Jan 2026 09:51:44 UTC
The branch main has been updated by pouria:

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

commit 04f6b99947d2d2e0f6ec7703609c74083b5646e2
Author:     Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
AuthorDate: 2026-01-24 09:50:50 +0000
Commit:     Pouria Mousavizadeh Tehrani <pouria@FreeBSD.org>
CommitDate: 2026-01-24 09:50:50 +0000

    netlink: use caller's credentials in rtnl_handle_newlink
    
    Make sure rtnl_handle_newlink sets the caller's credential
    during calls to ifc_create_ifp_nl and ifc_modify_ifp_nl
    
    Reviewed by: glebius, melifaro
    Approved by: glebius (mentor)
    Differential Revision: https://reviews.freebsd.org/D54109
---
 sys/netlink/route/iface.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/sys/netlink/route/iface.c b/sys/netlink/route/iface.c
index e9c053015fad..2ae43e22f7ed 100644
--- a/sys/netlink/route/iface.c
+++ b/sys/netlink/route/iface.c
@@ -675,6 +675,8 @@ static int
 rtnl_handle_newlink(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate *npt)
 {
 	struct nlattr_bmask bm;
+	struct thread *td = curthread;
+	struct ucred *cred;
 	int error;
 
 	struct nl_parsed_link attrs = {};
@@ -683,10 +685,16 @@ rtnl_handle_newlink(struct nlmsghdr *hdr, struct nlpcb *nlp, struct nl_pstate *n
 		return (error);
 	nl_get_attrs_bmask_nlmsg(hdr, &ifmsg_parser, &bm);
 
+	/* XXX: temporary patch until the D39180 review lands */
+	cred = td->td_ucred;
+	td->td_ucred = nlp_get_cred(nlp);
 	if (hdr->nlmsg_flags & NLM_F_CREATE)
-		return (create_link(hdr, &attrs, &bm, nlp, npt));
+		error = create_link(hdr, &attrs, &bm, nlp, npt);
 	else
-		return (modify_link(hdr, &attrs, &bm, nlp, npt));
+		error = modify_link(hdr, &attrs, &bm, nlp, npt);
+	td->td_ucred = cred;
+
+	return (error);
 }
 
 static void