From eae72b5b807baa9116e64502cbb278edf15f3146 Mon Sep 17 00:00:00 2001 From: Sebastien Roy Date: Tue, 26 Aug 2008 19:16:34 -0400 Subject: PSARC 2008/473 Fine-Grained Privileges for Datalink Administration 6695904 least privileges for datalink actions 6729477 pcwl accidentally requires privileges for WLAN_GET_PARAM ioctl 6679049 ucred_t leak in dlmgmtd 6738245 dld's _init() doesn't teardown if mod_install() fails 6738987 i.devpolicy pattern matching accidentally matches random lines --- usr/src/lib/libdladm/common/libdlaggr.c | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) (limited to 'usr/src/lib/libdladm/common/libdlaggr.c') diff --git a/usr/src/lib/libdladm/common/libdlaggr.c b/usr/src/lib/libdladm/common/libdlaggr.c index 4c61371247..dba84441ea 100644 --- a/usr/src/lib/libdladm/common/libdlaggr.c +++ b/usr/src/lib/libdladm/common/libdlaggr.c @@ -23,8 +23,6 @@ * Use is subject to license terms. */ -#pragma ident "%Z%%M% %I% %E% SMI" - #include #include #include @@ -51,8 +49,6 @@ * configure link aggregations. */ -#define DLADM_AGGR_DEV "/devices/pseudo/aggr@0:" AGGR_DEVNAME_CTL - /* Limits on buffer size for LAIOC_INFO request */ #define MIN_INFO_SIZE (4*1024) #define MAX_INFO_SIZE (128*1024) @@ -140,14 +136,14 @@ static dladm_aggr_port_state_t port_states[] = { (sizeof (port_states) / sizeof (dladm_aggr_port_state_t)) static int -i_dladm_aggr_strioctl(int cmd, void *ptr, int ilen) +i_dladm_aggr_ioctl(int cmd, void *ptr) { int err, fd; - if ((fd = open(DLADM_AGGR_DEV, O_RDWR)) < 0) + if ((fd = open(DLD_CONTROL_DEV, O_RDWR)) < 0) return (-1); - err = i_dladm_ioctl(fd, cmd, ptr, ilen); + err = ioctl(fd, cmd, ptr); (void) close(fd); return (err); @@ -213,7 +209,7 @@ static dladm_status_t i_dladm_aggr_info_active(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp) { laioc_info_t *ioc; - int rc, bufsize; + int bufsize; void *where; dladm_status_t status = DLADM_STATUS_OK; @@ -225,8 +221,8 @@ i_dladm_aggr_info_active(datalink_id_t linkid, dladm_aggr_grp_attr_t *attrp) ioc->li_group_linkid = linkid; tryagain: - rc = i_dladm_aggr_strioctl(LAIOC_INFO, ioc, bufsize); - if (rc != 0) { + ioc->li_bufsize = bufsize; + if (i_dladm_aggr_ioctl(LAIOC_INFO, ioc) != 0) { if (errno == ENOSPC) { /* * The LAIOC_INFO call failed due to a short @@ -549,7 +545,7 @@ destroyconf: for (i = 0; i < nports; i++) ioc_ports[i].lp_linkid = ports[i].lp_linkid; - if (i_dladm_aggr_strioctl(cmd, iocp, len) < 0) + if (i_dladm_aggr_ioctl(cmd, iocp) < 0) status = dladm_errno2status(errno); done: @@ -602,7 +598,7 @@ i_dladm_aggr_modify_sys(datalink_id_t linkid, uint32_t mask, ioc.lu_lacp_mode = attr->ld_lacp_mode; ioc.lu_lacp_timer = attr->ld_lacp_timer; - if (i_dladm_aggr_strioctl(LAIOC_MODIFY, &ioc, sizeof (ioc)) < 0) { + if (i_dladm_aggr_ioctl(LAIOC_MODIFY, &ioc) < 0) { if (errno == EINVAL) return (DLADM_STATUS_MACADDRINVAL); else @@ -621,7 +617,7 @@ i_dladm_aggr_create_sys(datalink_id_t linkid, uint16_t key, uint32_t nports, boolean_t mac_addr_fixed, const uchar_t *mac_addr, aggr_lacp_mode_t lacp_mode, aggr_lacp_timer_t lacp_timer, boolean_t force) { - int i, rc, len; + int i, len; laioc_create_t *iocp = NULL; laioc_port_t *ioc_ports; dladm_status_t status = DLADM_STATUS_OK; @@ -651,8 +647,7 @@ i_dladm_aggr_create_sys(datalink_id_t linkid, uint16_t key, uint32_t nports, bcopy(mac_addr, iocp->lc_mac, ETHERADDRL); iocp->lc_mac_fixed = mac_addr_fixed; - rc = i_dladm_aggr_strioctl(LAIOC_CREATE, iocp, len); - if (rc < 0) + if (i_dladm_aggr_ioctl(LAIOC_CREATE, iocp) < 0) status = dladm_errno2status(errno); done: @@ -726,7 +721,7 @@ i_dladm_aggr_up(datalink_id_t linkid, void *arg) if ((status = dladm_up_datalink_id(linkid)) != DLADM_STATUS_OK) { laioc_delete_t ioc; ioc.ld_linkid = linkid; - (void) i_dladm_aggr_strioctl(LAIOC_DELETE, &ioc, sizeof (ioc)); + (void) i_dladm_aggr_ioctl(LAIOC_DELETE, &ioc); goto done; } @@ -1361,8 +1356,7 @@ dladm_aggr_delete(datalink_id_t linkid, uint32_t flags) if (flags & DLADM_OPT_ACTIVE) { ioc.ld_linkid = linkid; - if ((i_dladm_aggr_strioctl(LAIOC_DELETE, &ioc, - sizeof (ioc)) < 0) && + if ((i_dladm_aggr_ioctl(LAIOC_DELETE, &ioc) < 0) && ((errno != ENOENT) || !(flags & DLADM_OPT_PERSIST))) { status = dladm_errno2status(errno); return (status); -- cgit v1.2.3