summaryrefslogtreecommitdiffstats
path: root/package/hostapd/patches/005-use-nl80211-for-get-key.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/hostapd/patches/005-use-nl80211-for-get-key.patch')
-rw-r--r--package/hostapd/patches/005-use-nl80211-for-get-key.patch116
1 files changed, 0 insertions, 116 deletions
diff --git a/package/hostapd/patches/005-use-nl80211-for-get-key.patch b/package/hostapd/patches/005-use-nl80211-for-get-key.patch
deleted file mode 100644
index 142c1939d..000000000
--- a/package/hostapd/patches/005-use-nl80211-for-get-key.patch
+++ /dev/null
@@ -1,116 +0,0 @@
----
- hostapd/driver_devicescape.c | 96 ++++++++++++++++++++++++++++++++++---------
- 1 file changed, 76 insertions(+), 20 deletions(-)
-
---- hostap.orig/hostapd/driver_devicescape.c 2007-11-09 13:41:13.000000000 +0100
-+++ hostap/hostapd/driver_devicescape.c 2007-11-09 13:41:14.000000000 +0100
-@@ -228,33 +228,89 @@ static int i802_set_encryption(const cha
- return ret;
- }
-
-+static inline int min_int(int a, int b)
-+{
-+ if (a<b)
-+ return a;
-+ return b;
-+}
-+
-+static int get_key_handler(struct nl_msg *msg, void *arg)
-+{
-+ struct nlattr *tb[NL80211_ATTR_MAX];
-+ struct genlmsghdr *gnlh = nlmsg_data(nlmsg_hdr(msg));
-+
-+ nla_parse(tb, NL80211_ATTR_MAX, genlmsg_attrdata(gnlh, 0),
-+ genlmsg_attrlen(gnlh, 0), NULL);
-+
-+ /*
-+ * TODO: validate the key index and mac address!
-+ * Otherwise, there's a race condition as soon as
-+ * the kernel starts sending key notifications.
-+ */
-+
-+ if (tb[NL80211_ATTR_KEY_SEQ])
-+ memcpy(arg, nla_data(tb[NL80211_ATTR_KEY_SEQ]),
-+ min_int(nla_len(tb[NL80211_ATTR_KEY_SEQ]), 6));
-+ return NL_SKIP;
-+}
-+
-+static int ack_wait_handler(struct nl_msg *msg, void *arg)
-+{
-+ int *finished = arg;
-+
-+ *finished = 1;
-+ return NL_STOP;
-+}
-
- static int i802_get_seqnum(const char *iface, void *priv, const u8 *addr,
- int idx, u8 *seq)
- {
- struct i802_driver_data *drv = priv;
-- struct prism2_hostapd_param *param;
-- size_t param_len;
-- int ret;
-+ struct nl_msg *msg;
-+ struct nl_cb *cb = NULL;
-+ int ret = -1;
-+ int err = 0;
-+ int finished = 0;
-
-- param_len = sizeof(struct prism2_hostapd_param) + 32;
-- param = os_zalloc(param_len);
-- if (param == NULL)
-- return -1;
-+ msg = nlmsg_alloc();
-+ if (!msg)
-+ goto out;
-
-- param->cmd = PRISM2_GET_ENCRYPTION;
-- if (addr == NULL)
-- memset(param->sta_addr, 0xff, ETH_ALEN);
-- else
-- memcpy(param->sta_addr, addr, ETH_ALEN);
-- param->u.crypt.idx = idx;
--
-- ret = hostapd_ioctl_iface(iface, drv, param, param_len);
-- if (ret == 0) {
-- memcpy(seq, param->u.crypt.seq_counter,
-- HOSTAP_SEQ_COUNTER_SIZE);
-- }
-- free(param);
-+ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0,
-+ 0, NL80211_CMD_GET_KEY, 0);
-+
-+ if (addr)
-+ NLA_PUT(msg, NL80211_ATTR_MAC, ETH_ALEN, addr);
-+ NLA_PUT_U8(msg, NL80211_ATTR_KEY_IDX, idx);
-+ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(iface));
-+
-+ cb = nl_cb_alloc(NL_CB_CUSTOM);
-+ if (!cb)
-+ goto out;
-+
-+ memset(seq, 0, 6);
-+
-+ if (nl_send_auto_complete(drv->nl_handle, msg) < 0)
-+ goto out;
-+
-+ nl_cb_set(cb, NL_CB_VALID, NL_CB_CUSTOM, get_key_handler, seq);
-+ nl_cb_set(cb, NL_CB_ACK, NL_CB_CUSTOM, ack_wait_handler, &finished);
-+
-+ err = nl_recvmsgs(drv->nl_handle, cb);
-+
-+ if (!finished)
-+ err = nl_wait_for_ack(drv->nl_handle);
-+
-+ if (err < 0)
-+ goto out;
-+
-+ ret = 0;
-+
-+ out:
-+ nl_cb_put(cb);
-+ nla_put_failure:
-+ nlmsg_free(msg);
- return ret;
- }
-