Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6eb6edf0 authored by James Ketrenos's avatar James Ketrenos Committed by Jeff Garzik
Browse files

[PATCH] ieee80211: in-tree driver updates to sync with latest ieee80211 series



Changed crypto method from requiring a struct ieee80211_device reference
to the init handler.  Instead we now have a get/set flags method for
each crypto component.

Setting of TKIP countermeasures can now be done via
set_flags(IEEE80211_CRYPTO_TKIP_COUNTERMEASURES)

Signed-off-by: default avatarJames Ketrenos <jketreno@linux.intel.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@pobox.com>
parent e5658d3e
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -876,7 +876,6 @@ struct ieee80211_device {
	/* WPA data */
	int wpa_enabled;
	int drop_unencrypted;
	int tkip_countermeasures;
	int privacy_invoked;
	size_t wpa_ie_len;
	u8 *wpa_ie;
+9 −1
Original line number Diff line number Diff line
@@ -25,13 +25,17 @@

#include <linux/skbuff.h>

enum {
	IEEE80211_CRYPTO_TKIP_COUNTERMEASURES = (1<<0),
};

struct ieee80211_crypto_ops {
	const char *name;

	/* init new crypto context (e.g., allocate private data space,
	 * select IV, etc.); returns NULL on failure or pointer to allocated
	 * private data on success */
	void *(*init) (struct ieee80211_device * ieee, int keyidx);
	void *(*init) (int keyidx);

	/* deinitialize crypto context and free allocated private data */
	void (*deinit) (void *priv);
@@ -60,6 +64,10 @@ struct ieee80211_crypto_ops {
	 * statistics */
	char *(*print_stats) (char *p, void *priv);

	/* Crypto specific flag get/set for configuration settings */
	unsigned long (*get_flags)(void *priv);
	unsigned long (*set_flags)(unsigned long flags, void *priv);

	/* maximum number of bytes added by encryption; encrypt buf is
	 * allocated with extra_prefix_len bytes, copy of in_buf, and
	 * extra_postfix_len; encrypt need not use all this space, but
+1 −2
Original line number Diff line number Diff line
@@ -202,8 +202,7 @@ struct ieee80211_crypto_ops *ieee80211_get_crypto_ops(const char *name)
		return NULL;
}

static void *ieee80211_crypt_null_init(struct ieee80211_device *ieee,
				       int keyidx)
static void *ieee80211_crypt_null_init(int keyidx)
{
	return (void *)1;
}
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ static void ieee80211_ccmp_aes_encrypt(struct crypto_tfm *tfm,
	crypto_cipher_encrypt(tfm, &dst, &src, AES_BLOCK_LEN);
}

static void *ieee80211_ccmp_init(struct ieee80211_device *ieee, int key_idx)
static void *ieee80211_ccmp_init(int key_idx)
{
	struct ieee80211_ccmp_data *priv;

+24 −10
Original line number Diff line number Diff line
@@ -60,10 +60,24 @@ struct ieee80211_tkip_data {
	/* scratch buffers for virt_to_page() (crypto API) */
	u8 rx_hdr[16], tx_hdr[16];

	struct ieee80211_device *ieee;
	unsigned long flags;
};

static void *ieee80211_tkip_init(struct ieee80211_device *ieee, int key_idx)
static unsigned long ieee80211_tkip_set_flags(unsigned long flags, void *priv)
{
	struct ieee80211_tkip_data *_priv = priv;
	unsigned long old_flags = _priv->flags;
	_priv->flags = flags;
	return old_flags;
}

static unsigned long ieee80211_tkip_get_flags(void *priv)
{
	struct ieee80211_tkip_data *_priv = priv;
	return _priv->flags;
}

static void *ieee80211_tkip_init(int key_idx)
{
	struct ieee80211_tkip_data *priv;

@@ -72,8 +86,6 @@ static void *ieee80211_tkip_init(struct ieee80211_device *ieee, int key_idx)
		goto fail;
	memset(priv, 0, sizeof(*priv));

	priv->ieee = ieee;

	priv->key_idx = key_idx;

	priv->tfm_arc4 = crypto_alloc_tfm("arc4", 0);
@@ -315,13 +327,13 @@ static int ieee80211_tkip_encrypt(struct sk_buff *skb, int hdr_len, void *priv)
	u8 *pos;
	struct scatterlist sg;

	if (tkey->ieee->tkip_countermeasures) {
	if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) {
		if (net_ratelimit()) {
			struct ieee80211_hdr_4addr *hdr =
			    (struct ieee80211_hdr_4addr *)skb->data;
			printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
			printk(KERN_DEBUG "TKIP countermeasures: dropped "
			       "TX packet to " MAC_FMT "\n",
			       tkey->ieee->dev->name, MAC_ARG(hdr->addr1));
			       MAC_ARG(hdr->addr1));
		}
		return -1;
	}
@@ -366,11 +378,11 @@ static int ieee80211_tkip_decrypt(struct sk_buff *skb, int hdr_len, void *priv)

	hdr = (struct ieee80211_hdr_4addr *)skb->data;

	if (tkey->ieee->tkip_countermeasures) {
	if (tkey->flags & IEEE80211_CRYPTO_TKIP_COUNTERMEASURES) {
		if (net_ratelimit()) {
			printk(KERN_DEBUG "%s: TKIP countermeasures: dropped "
			printk(KERN_DEBUG "TKIP countermeasures: dropped "
			       "received packet from " MAC_FMT "\n",
			       tkey->ieee->dev->name, MAC_ARG(hdr->addr2));
			       MAC_ARG(hdr->addr2));
		}
		return -1;
	}
@@ -694,6 +706,8 @@ static struct ieee80211_crypto_ops ieee80211_crypt_tkip = {
	.extra_mpdu_prefix_len = 4 + 4,	/* IV + ExtIV */
	.extra_mpdu_postfix_len = 4,	/* ICV */
	.extra_msdu_postfix_len = 8,	/* MIC */
	.get_flags = ieee80211_tkip_get_flags,
	.set_flags = ieee80211_tkip_set_flags,
	.owner = THIS_MODULE,
};

Loading