From f0b009a4db209102142c7fd65d2ac5b7ac2c1065 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Tue, 30 Oct 2018 14:17:02 -0400 Subject: [PATCH] pimd: *bsd needs priviledge escalation to init PIM When trying to run PIM on *bsd, the kernel expects to only allow the pim kernel socket to work if we elevate priviledges. So do so. This commit gets us further in the startup of PIM on *bsd but is not sufficient to get it fully started yet. Signed-off-by: Donald Sharp --- pimd/pim_mroute.c | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c index 436e0508f..8ad9a28ae 100644 --- a/pimd/pim_mroute.c +++ b/pimd/pim_mroute.c @@ -74,15 +74,19 @@ static int pim_mroute_set(struct pim_instance *pim, int enable) } } - opt = enable ? MRT_INIT : MRT_DONE; - err = setsockopt(pim->mroute_socket, IPPROTO_IP, opt, &opt, opt_len); - if (err) { - zlog_warn( - "%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,%s=%d): errno=%d: %s", - __FILE__, __PRETTY_FUNCTION__, pim->mroute_socket, - enable ? "MRT_INIT" : "MRT_DONE", opt, errno, - safe_strerror(errno)); - return -1; + frr_elevate_privs(&pimd_privs) { + opt = enable ? MRT_INIT : MRT_DONE; + err = setsockopt(pim->mroute_socket, IPPROTO_IP, + opt, &opt, opt_len); + if (err) { + zlog_warn( + "%s %s: failure: setsockopt(fd=%d,IPPROTO_IP,%s=%d): errno=%d: %s", + __FILE__, __PRETTY_FUNCTION__, + pim->mroute_socket, + enable ? "MRT_INIT" : "MRT_DONE", opt, errno, + safe_strerror(errno)); + return -1; + } } #if defined(HAVE_IP_PKTINFO) -- 2.39.2