mirror of
https://github.com/team-infusion-developers/android_kernel_samsung_msm8976.git
synced 2024-09-21 11:53:01 +00:00
cfg80211: Key management offload support for 802.1X LEAP
Changes to add key management offload support for 802.1X LEAP connections. The changes allow the key length to be passed along with the key in the cfg80211_key_mgmt_set_pmk command. Change-Id: I674c4b8c5daad5cee8f962b68312a62f3d1bc6b5 CRs-Fixed: 708724 Signed-off-by: Chet Lanctot <clanctot@codeaurora.org>
This commit is contained in:
parent
3bb41fde01
commit
0aead796cc
|
@ -2338,7 +2338,7 @@ struct cfg80211_ops {
|
|||
struct cfg80211_chan_def *chandef);
|
||||
|
||||
int (*key_mgmt_set_pmk)(struct wiphy *wiphy, struct net_device *dev,
|
||||
const u8 *pmk);
|
||||
const u8 *pmk, size_t pmk_len);
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -1570,6 +1570,7 @@ enum nl80211_commands {
|
|||
* derivation used as part of key management offload.
|
||||
* @NL80211_ATTR_PMK: The Pairwise Master Key to be used for the
|
||||
* connection.
|
||||
* @NL80211_ATTR_PMK_LEN: The length of the PMK.
|
||||
*
|
||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||
|
@ -1914,6 +1915,7 @@ enum nl80211_attrs {
|
|||
NL80211_ATTR_KEY_MGMT_OFFLOAD_SUPPORT,
|
||||
NL80211_ATTR_KEY_DERIVE_OFFLOAD_SUPPORT,
|
||||
NL80211_ATTR_PMK,
|
||||
NL80211_ATTR_PMK_LEN,
|
||||
|
||||
/* add attributes here, update the policy in nl80211.c */
|
||||
|
||||
|
|
|
@ -399,6 +399,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
|
|||
[NL80211_ATTR_KEY_DERIVE_OFFLOAD_SUPPORT] = { .type = NLA_U32 },
|
||||
[NL80211_ATTR_PMK] = { .type = NLA_BINARY,
|
||||
.len = NL80211_KEY_LEN_PMK },
|
||||
[NL80211_ATTR_PMK_LEN] = { .type = NLA_U32 },
|
||||
};
|
||||
|
||||
/* policy for the key attributes */
|
||||
|
@ -8702,16 +8703,21 @@ static int nl80211_key_mgmt_set_pmk(struct sk_buff *skb, struct genl_info *info)
|
|||
struct cfg80211_registered_device *rdev = info->user_ptr[0];
|
||||
struct net_device *dev = info->user_ptr[1];
|
||||
u8 *pmk;
|
||||
size_t pmk_len;
|
||||
|
||||
if (info->attrs[NL80211_ATTR_PMK])
|
||||
pmk = nla_data(info->attrs[NL80211_ATTR_PMK]);
|
||||
else
|
||||
return -EINVAL;
|
||||
if (info->attrs[NL80211_ATTR_PMK_LEN])
|
||||
pmk_len = nla_get_u32(info->attrs[NL80211_ATTR_PMK_LEN]);
|
||||
else
|
||||
return -EINVAL;
|
||||
|
||||
if (!rdev->ops->key_mgmt_set_pmk)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return rdev_key_mgmt_set_pmk(rdev, dev, pmk);
|
||||
return rdev_key_mgmt_set_pmk(rdev, dev, pmk, pmk_len);
|
||||
}
|
||||
|
||||
#define NL80211_FLAG_NEED_WIPHY 0x01
|
||||
|
|
|
@ -954,12 +954,13 @@ rdev_set_ap_chanwidth(struct cfg80211_registered_device *rdev,
|
|||
}
|
||||
|
||||
static inline int rdev_key_mgmt_set_pmk(struct cfg80211_registered_device *rdev,
|
||||
struct net_device *dev, u8 *pmk)
|
||||
struct net_device *dev, u8 *pmk,
|
||||
size_t pmk_len)
|
||||
{
|
||||
int ret;
|
||||
|
||||
trace_rdev_key_mgmt_set_pmk(&rdev->wiphy, dev, pmk);
|
||||
ret = rdev->ops->key_mgmt_set_pmk(&rdev->wiphy, dev, pmk);
|
||||
ret = rdev->ops->key_mgmt_set_pmk(&rdev->wiphy, dev, pmk, pmk_len);
|
||||
trace_rdev_return_int(&rdev->wiphy, ret);
|
||||
|
||||
return ret;
|
||||
|
|
Loading…
Reference in a new issue