View | Details | Raw Unified | Return to bug 249403
Collapse All | Expand All

(-)ieee80211_ioctl.c (-3 / +15 lines)
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);

Return to bug 249403