Patchwork [3.5.y.z,extended,stable] Patch "staging: vt6656: Fix inconsistent structure packing" has been added to staging queue

login
register
mail settings
Submitter Herton Ronaldo Krzesinski
Date Jan. 30, 2013, 9:57 p.m.
Message ID <1359583039-17191-1-git-send-email-herton.krzesinski@canonical.com>
Download mbox | patch
Permalink /patch/217036/
State New
Headers show

Comments

Herton Ronaldo Krzesinski - Jan. 30, 2013, 9:57 p.m.
This is a note to let you know that I have just added a patch titled

    staging: vt6656: Fix inconsistent structure packing

to the linux-3.5.y-queue branch of the 3.5.y.z extended stable tree 
which can be found at:

 http://kernel.ubuntu.com/git?p=ubuntu/linux.git;a=shortlog;h=refs/heads/linux-3.5.y-queue

If you, or anyone else, feels it should not be added to this tree, please 
reply to this email.

For more information about the 3.5.y.z tree, see
https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable

Thanks.
-Herton

------

From a1c4775fc95530f884c98e24ea7ec95a60d6a8fe Mon Sep 17 00:00:00 2001
From: Ben Hutchings <ben@decadent.org.uk>
Date: Mon, 14 Jan 2013 01:29:17 +0000
Subject: [PATCH] staging: vt6656: Fix inconsistent structure packing

commit 1ee4c55fc9620451b2a825d793042a7e0775391b upstream.

vt6656 has several headers that use the #pragma pack(1) directive to
enable structure packing, but never disable it.  The layout of
structures defined in other headers can then depend on which order the
various headers are included in, breaking the One Definition Rule.

In practice this resulted in crashes on x86_64 until the order of header
inclusion was changed for some files in commit 11d404cb56ecd ('staging:
vt6656: fix headers and add cfg80211.').  But we need a proper fix that
won't be affected by future changes to the order of inclusion.

This removes the #pragma pack(1) directives and adds __packed to the
structure definitions for which packing appears to have been intended.

Reported-and-tested-by: Malcolm Priestley <tvboxspy@gmail.com>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
[ herton: adjust context ]
Signed-off-by: Herton Ronaldo Krzesinski <herton.krzesinski@canonical.com>
---
 drivers/staging/vt6656/bssdb.h |    1 -
 drivers/staging/vt6656/int.h   |    1 -
 drivers/staging/vt6656/iocmd.h |   33 ++++++++++++++++-----------------
 drivers/staging/vt6656/iowpa.h |    8 +++-----
 4 files changed, 19 insertions(+), 24 deletions(-)

--
1.7.9.5

Patch

diff --git a/drivers/staging/vt6656/bssdb.h b/drivers/staging/vt6656/bssdb.h
index a8f97eb..991ce3e 100644
--- a/drivers/staging/vt6656/bssdb.h
+++ b/drivers/staging/vt6656/bssdb.h
@@ -92,7 +92,6 @@  typedef struct tagSRSNCapObject {
 } SRSNCapObject, *PSRSNCapObject;

 // BSS info(AP)
-#pragma pack(1)
 typedef struct tagKnownBSS {
     // BSS info
     BOOL            bActive;
diff --git a/drivers/staging/vt6656/int.h b/drivers/staging/vt6656/int.h
index a5d96b9..27bc7f5 100644
--- a/drivers/staging/vt6656/int.h
+++ b/drivers/staging/vt6656/int.h
@@ -34,7 +34,6 @@ 
 #include "device.h"

 /*---------------------  Export Definitions -------------------------*/
-#pragma pack(1)
 typedef struct tagSINTData {
     BYTE    byTSR0;
     BYTE    byPkt0;
diff --git a/drivers/staging/vt6656/iocmd.h b/drivers/staging/vt6656/iocmd.h
index 22710ce..ae6e2d2 100644
--- a/drivers/staging/vt6656/iocmd.h
+++ b/drivers/staging/vt6656/iocmd.h
@@ -95,13 +95,12 @@  typedef enum tagWZONETYPE {
 // Ioctl interface structure
 // Command structure
 //
-#pragma pack(1)
 typedef struct tagSCmdRequest {
 	u8 name[16];
 	void	*data;
 	u16	    wResult;
 	u16     wCmdCode;
-} SCmdRequest, *PSCmdRequest;
+} __packed SCmdRequest, *PSCmdRequest;

 //
 // Scan
@@ -111,7 +110,7 @@  typedef struct tagSCmdScan {

     u8	    ssid[SSID_MAXLEN + 2];

-} SCmdScan, *PSCmdScan;
+} __packed SCmdScan, *PSCmdScan;

 //
 // BSS Join
@@ -126,7 +125,7 @@  typedef struct tagSCmdBSSJoin {
     BOOL    bPSEnable;
     BOOL    bShareKeyAuth;

-} SCmdBSSJoin, *PSCmdBSSJoin;
+} __packed SCmdBSSJoin, *PSCmdBSSJoin;

 //
 // Zonetype Setting
@@ -137,7 +136,7 @@  typedef struct tagSCmdZoneTypeSet {
  BOOL       bWrite;
  WZONETYPE  ZoneType;

-} SCmdZoneTypeSet, *PSCmdZoneTypeSet;
+} __packed SCmdZoneTypeSet, *PSCmdZoneTypeSet;

 typedef struct tagSWPAResult {
          char	ifname[100];
@@ -145,7 +144,7 @@  typedef struct tagSWPAResult {
 	u8 key_mgmt;
 	u8 eap_type;
          BOOL authenticated;
-} SWPAResult, *PSWPAResult;
+} __packed SWPAResult, *PSWPAResult;

 typedef struct tagSCmdStartAP {

@@ -157,7 +156,7 @@  typedef struct tagSCmdStartAP {
     BOOL    bShareKeyAuth;
     u8      byBasicRate;

-} SCmdStartAP, *PSCmdStartAP;
+} __packed SCmdStartAP, *PSCmdStartAP;

 typedef struct tagSCmdSetWEP {

@@ -167,7 +166,7 @@  typedef struct tagSCmdSetWEP {
     BOOL    bWepKeyAvailable[WEP_NKEYS];
     u32     auWepKeyLength[WEP_NKEYS];

-} SCmdSetWEP, *PSCmdSetWEP;
+} __packed SCmdSetWEP, *PSCmdSetWEP;

 typedef struct tagSBSSIDItem {

@@ -180,14 +179,14 @@  typedef struct tagSBSSIDItem {
     BOOL    bWEPOn;
     u32     uRSSI;

-} SBSSIDItem;
+} __packed SBSSIDItem;


 typedef struct tagSBSSIDList {

 	u32		    uItem;
 	SBSSIDItem	sBSSIDList[0];
-} SBSSIDList, *PSBSSIDList;
+} __packed SBSSIDList, *PSBSSIDList;


 typedef struct tagSNodeItem {
@@ -208,7 +207,7 @@  typedef struct tagSNodeItem {
     u32            uTxAttempts;
     u16            wFailureRatio;

-} SNodeItem;
+} __packed SNodeItem;


 typedef struct tagSNodeList {
@@ -216,7 +215,7 @@  typedef struct tagSNodeList {
 	u32		    uItem;
 	SNodeItem	sNodeList[0];

-} SNodeList, *PSNodeList;
+} __packed SNodeList, *PSNodeList;


 typedef struct tagSCmdLinkStatus {
@@ -229,7 +228,7 @@  typedef struct tagSCmdLinkStatus {
     u32     uChannel;
     u32     uLinkRate;

-} SCmdLinkStatus, *PSCmdLinkStatus;
+} __packed SCmdLinkStatus, *PSCmdLinkStatus;

 //
 // 802.11 counter
@@ -247,7 +246,7 @@  typedef struct tagSDot11MIBCount {
     u32 ReceivedFragmentCount;
     u32 MulticastReceivedFrameCount;
     u32 FCSErrorCount;
-} SDot11MIBCount, *PSDot11MIBCount;
+} __packed SDot11MIBCount, *PSDot11MIBCount;



@@ -355,13 +354,13 @@  typedef struct tagSStatMIBCount {
     u32   ullTxBroadcastBytes[2];
     u32   ullTxMulticastBytes[2];
     u32   ullTxDirectedBytes[2];
-} SStatMIBCount, *PSStatMIBCount;
+} __packed SStatMIBCount, *PSStatMIBCount;

 typedef struct tagSCmdValue {

     u32     dwValue;

-} SCmdValue,  *PSCmdValue;
+} __packed SCmdValue,  *PSCmdValue;

 //
 // hostapd & viawget ioctl related
@@ -431,7 +430,7 @@  struct viawget_hostapd_param {
 			u8 ssid[32];
 		} scan_req;
 	} u;
-};
+} __packed;

 /*---------------------  Export Classes  ----------------------------*/

diff --git a/drivers/staging/vt6656/iowpa.h b/drivers/staging/vt6656/iowpa.h
index 959c886..2522dde 100644
--- a/drivers/staging/vt6656/iowpa.h
+++ b/drivers/staging/vt6656/iowpa.h
@@ -67,12 +67,11 @@  enum {



-#pragma pack(1)
 typedef struct viawget_wpa_header {
 	u8 type;
 	u16 req_ie_len;
 	u16 resp_ie_len;
-} viawget_wpa_header;
+} __packed viawget_wpa_header;

 struct viawget_wpa_param {
 	u32 cmd;
@@ -113,9 +112,8 @@  struct viawget_wpa_param {
 			u8 *buf;
 		} scan_results;
 	} u;
-};
+} __packed;

-#pragma pack(1)
 struct viawget_scan_result {
 	u8 bssid[6];
 	u8 ssid[32];
@@ -130,7 +128,7 @@  struct viawget_scan_result {
 	int noise;
 	int level;
 	int maxrate;
-};
+} __packed;

 /*---------------------  Export Classes  ----------------------------*/