diff options
author | Sebastien Roy <Sebastien.Roy@Sun.COM> | 2008-08-26 19:16:34 -0400 |
---|---|---|
committer | Sebastien Roy <Sebastien.Roy@Sun.COM> | 2008-08-26 19:16:34 -0400 |
commit | eae72b5b807baa9116e64502cbb278edf15f3146 (patch) | |
tree | fc7a46e5b44edce207501bd6c3de33b94bc7d435 /usr/src/lib/libdladm/common/libdlaggr.c | |
parent | 68ce0b7d91cfc03d5ad6ba0de356c08a168971e6 (diff) | |
download | illumos-joyent-eae72b5b807baa9116e64502cbb278edf15f3146.tar.gz |
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
Diffstat (limited to 'usr/src/lib/libdladm/common/libdlaggr.c')
-rw-r--r-- | usr/src/lib/libdladm/common/libdlaggr.c | 30 |
1 files changed, 12 insertions, 18 deletions
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 <stdio.h> #include <sys/types.h> #include <sys/stat.h> @@ -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); |