aboutsummaryrefslogtreecommitdiff
path: root/sys/net80211
diff options
context:
space:
mode:
authorAdrian Chadd <adrian@FreeBSD.org>2020-07-19 15:16:27 +0000
committerAdrian Chadd <adrian@FreeBSD.org>2020-07-19 15:16:27 +0000
commitf7d38a13a85b74dcedfe3957889edd40ece4cc2f (patch)
tree11c875e80756f4d2e423dd4774287840ed2a893d /sys/net80211
parent4c0fab716a80c362cbeddc317099229379849e86 (diff)
Notes
Diffstat (limited to 'sys/net80211')
-rw-r--r--sys/net80211/ieee80211_freebsd.c5
-rw-r--r--sys/net80211/ieee80211_ioctl.c15
2 files changed, 17 insertions, 3 deletions
diff --git a/sys/net80211/ieee80211_freebsd.c b/sys/net80211/ieee80211_freebsd.c
index 6b55357dd49f..c9afb8b5177a 100644
--- a/sys/net80211/ieee80211_freebsd.c
+++ b/sys/net80211/ieee80211_freebsd.c
@@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/mbuf.h>
#include <sys/module.h>
+#include <sys/priv.h>
#include <sys/proc.h>
#include <sys/sysctl.h>
@@ -82,6 +83,10 @@ wlan_clone_create(struct if_clone *ifc, int unit, caddr_t params)
struct ieee80211com *ic;
int error;
+ error = priv_check(curthread, PRIV_NET80211_CREATE_VAP);
+ if (error)
+ return error;
+
error = copyin(params, &cp, sizeof(cp));
if (error)
return error;
diff --git a/sys/net80211/ieee80211_ioctl.c b/sys/net80211/ieee80211_ioctl.c
index 0eed8667460e..0c3794f62669 100644
--- a/sys/net80211/ieee80211_ioctl.c
+++ b/sys/net80211/ieee80211_ioctl.c
@@ -106,7 +106,8 @@ ieee80211_ioctl_getkey(struct ieee80211vap *vap, struct ieee80211req *ireq)
ik.ik_flags = wk->wk_flags & (IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV);
if (wk->wk_keyix == vap->iv_def_txkey)
ik.ik_flags |= IEEE80211_KEY_DEFAULT;
- if (priv_check(curthread, PRIV_NET80211_GETKEY) == 0) {
+ /* XXX TODO: move priv check to ieee80211_freebsd.c */
+ if (priv_check(curthread, PRIV_NET80211_VAP_GETKEY) == 0) {
/* NB: only root can read key data */
ik.ik_keyrsc = wk->wk_keyrsc[IEEE80211_NONQOS_TID];
ik.ik_keytsc = wk->wk_keytsc;
@@ -815,7 +816,8 @@ ieee80211_ioctl_get80211(struct ieee80211vap *vap, u_long cmd,
return EINVAL;
len = (u_int) vap->iv_nw_keys[kid].wk_keylen;
/* NB: only root can read WEP keys */
- if (priv_check(curthread, PRIV_NET80211_GETKEY) == 0) {
+ /* XXX TODO: move priv check to ieee80211_freebsd.c */
+ if (priv_check(curthread, PRIV_NET80211_VAP_GETKEY) == 0) {
bcopy(vap->iv_nw_keys[kid].wk_key, tmpkey, len);
} else {
bzero(tmpkey, len);
@@ -3636,7 +3638,8 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
(struct ieee80211req *) data);
break;
case SIOCS80211:
- error = priv_check(curthread, PRIV_NET80211_MANAGE);
+ /* XXX TODO: move priv check to ieee80211_freebsd.c */
+ error = priv_check(curthread, PRIV_NET80211_VAP_MANAGE);
if (error == 0)
error = ieee80211_ioctl_set80211(vap, cmd,
(struct ieee80211req *) data);
@@ -3681,6 +3684,12 @@ ieee80211_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
}
break;
+ case SIOCSIFLLADDR:
+ /* XXX TODO: move priv check to ieee80211_freebsd.c */
+ error = priv_check(curthread, PRIV_NET80211_VAP_SETMAC);
+ if (error == 0)
+ break;
+ /* Fallthrough */
default:
/*
* Pass unknown ioctls first to the driver, and if it