Skip to contentSkip to conversation

mac80211: Use #define IEEE80211_CCMP_PN_LEN and bool

PATCH In review Joe Perches 2 participants 3 messages Mar 30, 2015

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 mac80211: Use #define IEEE80211_CCMP_PN_LEN and bool

Use a #define constant instead of a hardcoded value and use bool for an int used as a bool to reduce structure size.

Miscellanea:

Neaten comments in structure definition.
Add #include of ieee80211.h

---
 net/mac80211/ieee80211_i.h | 7 ++++---
 net/mac80211/rx.c          | 4 ++--
 2 files changed, 6 insertions(+), 5 deletions(-)
net/mac80211/ieee80211_i.h +4 -3
index 8d53d65..08f994d 100644
@@ -26,6 +26,7 @@
 #include <linux/etherdevice.h>
 #include <linux/leds.h>
 #include <linux/idr.h>
+#include <linux/ieee80211.h>
 #include <net/ieee80211_radiotap.h>
 #include <net/cfg80211.h>
 #include <net/mac80211.h>
@@ -89,11 +90,11 @@ struct ieee80211_fragment_entry {
 	unsigned int last_frag;
 	unsigned int extra_len;
 	struct sk_buff_head skb_list;
-	int ccmp; /* Whether fragments were encrypted with CCMP */
-	u8 last_pn[6]; /* PN of the last fragment if CCMP was used */
+	/* for CCMP fragments */
+	bool ccmp;				/* encrypted with CCMP */
+	u8 last_pn[IEEE80211_CCMP_PN_LEN];	/* PN of the last fragment */
 };
 
-
 struct ieee80211_bss {
 	u32 device_ts_beacon, device_ts_presp;
 
net/mac80211/rx.c +2 -2
index 944bdc0..367ed9c 100644
@@ -1711,7 +1711,7 @@ ieee80211_reassemble_add(struct ieee80211_sub_if_data *sdata,
 	entry->seq = seq;
 	entry->rx_queue = rx_queue;
 	entry->last_frag = frag;
-	entry->ccmp = 0;
+	entry->ccmp = false;
 	entry->extra_len = 0;
 
 	return entry;
@@ -1812,7 +1812,7 @@ ieee80211_rx_h_defragment(struct ieee80211_rx_data *rx)
 			int queue = rx->security_idx;
 			/* Store CCMP PN so that we can verify that the next
 			 * fragment has a sequential PN value. */
-			entry->ccmp = 1;
+			entry->ccmp = true;
 			memcpy(entry->last_pn,
 			       rx->key->u.ccmp.rx_pn[queue],
 			       IEEE80211_CCMP_PN_LEN);
maintainer
#1 lore raw

net/mac80211/ieee80211_i.h struct ieee80211_fragment_entry { · line 95

Quoted 9 lines · Joe Perches
net/mac80211/ieee80211_i.h +3 -2
@@ -89,11 +90,11 @@ struct ieee80211_fragment_entry {
 	unsigned int last_frag;
 	unsigned int extra_len;
 	struct sk_buff_head skb_list;
-	int ccmp; /* Whether fragments were encrypted with CCMP */
-	u8 last_pn[6]; /* PN of the last fragment if CCMP was used */
+	/* for CCMP fragments */
+	bool ccmp;				/* encrypted with CCMP */
+	u8 last_pn[IEEE80211_CCMP_PN_LEN];	/* PN of the last fragment */

I took your patch as an opportunity to check into this, and it turns out all of this logic is also going to be needed for GCMP. As a result, I'm not going to take this patch but instead we'll fix it up for GCMP (where using CCMP_PN_LEN would not be appropriate anyway - perhaps we need a union or just keep '8' which is the right size for both anyway, or we'll go to a u64 value or something)

johannes

#2 lore raw
Quoted 18 lines · Johannes Berg

net/mac80211/ieee80211_i.h struct ieee80211_fragment_entry { · line 95

Quoted 9 lines · Joe Perches
net/mac80211/ieee80211_i.h +3 -2
@@ -89,11 +90,11 @@ struct ieee80211_fragment_entry {
 	unsigned int last_frag;
 	unsigned int extra_len;
 	struct sk_buff_head skb_list;
-	int ccmp; /* Whether fragments were encrypted with CCMP */
-	u8 last_pn[6]; /* PN of the last fragment if CCMP was used */
+	/* for CCMP fragments */
+	bool ccmp;				/* encrypted with CCMP */
+	u8 last_pn[IEEE80211_CCMP_PN_LEN];	/* PN of the last fragment */

I took your patch as an opportunity to check into this, and it turns out all of this logic is also going to be needed for GCMP. As a result, I'm not going to take this patch but instead we'll fix it up for GCMP (where using CCMP_PN_LEN would not be appropriate anyway - perhaps we need a union or just keep '8' which is the right size for both anyway, or we'll go to a u64 value or something)

No worries. Whatever's right.