|
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); |