Lines 65-70
Link Here
|
65 |
(IFNET_IS_UP_RUNNING((_vap)->iv_ifp) && \ |
65 |
(IFNET_IS_UP_RUNNING((_vap)->iv_ifp) && \ |
66 |
(_vap)->iv_roaming == IEEE80211_ROAMING_AUTO) |
66 |
(_vap)->iv_roaming == IEEE80211_ROAMING_AUTO) |
67 |
|
67 |
|
|
|
68 |
#if __FreeBSD__ |
69 |
#define ieee80211_priv(CHECK, VAP, CMD) \ |
70 |
priv_check(curthread, CHECK) |
71 |
#elif __NetBSD__ |
72 |
#define PRIV_NET80211_GETKEY KAUTH_REQ_NETWORK_INTERFACE_GETPRIV |
73 |
#define PRIV_NET80211_MANAGE KAUTH_REQ_NETWORK_INTERFACE_SETPRIV |
74 |
#define ieee80211_priv(CHECK, VAP, CMD) \ |
75 |
kauth_authorize_network(curlwp->l_cred, \ |
76 |
KAUTH_NETWORK_INTERFACE, \ |
77 |
CHECK, (VAP)?(VAP)->iv_ifp:NULL,(void*)CMD, NULL) |
78 |
#endif |
79 |
|
68 |
static const uint8_t zerobssid[IEEE80211_ADDR_LEN]; |
80 |
static const uint8_t zerobssid[IEEE80211_ADDR_LEN]; |
69 |
static struct ieee80211_channel *findchannel(struct ieee80211com *, |
81 |
static struct ieee80211_channel *findchannel(struct ieee80211com *, |
70 |
int ieee, int mode); |
82 |
int ieee, int mode); |
Lines 106-112
Link Here
|
106 |
ik.ik_flags = wk->wk_flags & (IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV); |
118 |
ik.ik_flags = wk->wk_flags & (IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV); |
107 |
if (wk->wk_keyix == vap->iv_def_txkey) |
119 |
if (wk->wk_keyix == vap->iv_def_txkey) |
108 |
ik.ik_flags |= IEEE80211_KEY_DEFAULT; |
120 |
ik.ik_flags |= IEEE80211_KEY_DEFAULT; |
109 |
if (priv_check(curthread, PRIV_NET80211_GETKEY) == 0) { |
121 |
if (ieee80211_priv(PRIV_NET80211_GETKEY, vap, 0) == 0) { |
110 |
/* NB: only root can read key data */ |
122 |
/* NB: only root can read key data */ |
111 |
ik.ik_keyrsc = wk->wk_keyrsc[IEEE80211_NONQOS_TID]; |
123 |
ik.ik_keyrsc = wk->wk_keyrsc[IEEE80211_NONQOS_TID]; |
112 |
ik.ik_keytsc = wk->wk_keytsc; |
124 |
ik.ik_keytsc = wk->wk_keytsc; |
Lines 815-821
Link Here
|
815 |
return EINVAL; |
827 |
return EINVAL; |
816 |
len = (u_int) vap->iv_nw_keys[kid].wk_keylen; |
828 |
len = (u_int) vap->iv_nw_keys[kid].wk_keylen; |
817 |
/* NB: only root can read WEP keys */ |
829 |
/* NB: only root can read WEP keys */ |
818 |
if (priv_check(curthread, PRIV_NET80211_GETKEY) == 0) { |
830 |
if (ieee80211_priv(PRIV_NET80211_GETKEY, vap, 0) == 0) { |
819 |
bcopy(vap->iv_nw_keys[kid].wk_key, tmpkey, len); |
831 |
bcopy(vap->iv_nw_keys[kid].wk_key, tmpkey, len); |
820 |
} else { |
832 |
} else { |
821 |
bzero(tmpkey, len); |
833 |
bzero(tmpkey, len); |
Lines 3632-3638
Link Here
|
3632 |
(struct ieee80211req *) data); |
3644 |
(struct ieee80211req *) data); |
3633 |
break; |
3645 |
break; |
3634 |
case SIOCS80211: |
3646 |
case SIOCS80211: |
3635 |
error = priv_check(curthread, PRIV_NET80211_MANAGE); |
3647 |
error = ieee80211_priv(PRIV_NET80211_MANAGE, vap, cmd); |
3636 |
if (error == 0) |
3648 |
if (error == 0) |
3637 |
error = ieee80211_ioctl_set80211(vap, cmd, |
3649 |
error = ieee80211_ioctl_set80211(vap, cmd, |
3638 |
(struct ieee80211req *) data); |
3650 |
(struct ieee80211req *) data); |