Skip to content

Commit

Permalink
staging: vt6656: Fix inconsistent structure packing
Browse files Browse the repository at this point in the history
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 11d404c ('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>
Cc: stable@vger.kernel.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Ben Hutchings authored and Greg Kroah-Hartman committed Jan 17, 2013
1 parent 397c606 commit 1ee4c55
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 24 deletions.
1 change: 0 additions & 1 deletion drivers/staging/vt6656/bssdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,6 @@ typedef struct tagSRSNCapObject {
} SRSNCapObject, *PSRSNCapObject;

// BSS info(AP)
#pragma pack(1)
typedef struct tagKnownBSS {
// BSS info
BOOL bActive;
Expand Down
1 change: 0 additions & 1 deletion drivers/staging/vt6656/int.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@
#include "device.h"

/*--------------------- Export Definitions -------------------------*/
#pragma pack(1)
typedef struct tagSINTData {
BYTE byTSR0;
BYTE byPkt0;
Expand Down
33 changes: 16 additions & 17 deletions drivers/staging/vt6656/iocmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -111,7 +110,7 @@ typedef struct tagSCmdScan {

u8 ssid[SSID_MAXLEN + 2];

} SCmdScan, *PSCmdScan;
} __packed SCmdScan, *PSCmdScan;

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

} SCmdBSSJoin, *PSCmdBSSJoin;
} __packed SCmdBSSJoin, *PSCmdBSSJoin;

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

} SCmdZoneTypeSet, *PSCmdZoneTypeSet;
} __packed SCmdZoneTypeSet, *PSCmdZoneTypeSet;

typedef struct tagSWPAResult {
char ifname[100];
u8 proto;
u8 key_mgmt;
u8 eap_type;
BOOL authenticated;
} SWPAResult, *PSWPAResult;
} __packed SWPAResult, *PSWPAResult;

typedef struct tagSCmdStartAP {

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

} SCmdStartAP, *PSCmdStartAP;
} __packed SCmdStartAP, *PSCmdStartAP;

typedef struct tagSCmdSetWEP {

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

} SCmdSetWEP, *PSCmdSetWEP;
} __packed SCmdSetWEP, *PSCmdSetWEP;

typedef struct tagSBSSIDItem {

Expand All @@ -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 {
Expand All @@ -208,15 +207,15 @@ typedef struct tagSNodeItem {
u32 uTxAttempts;
u16 wFailureRatio;

} SNodeItem;
} __packed SNodeItem;


typedef struct tagSNodeList {

u32 uItem;
SNodeItem sNodeList[0];

} SNodeList, *PSNodeList;
} __packed SNodeList, *PSNodeList;


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

} SCmdLinkStatus, *PSCmdLinkStatus;
} __packed SCmdLinkStatus, *PSCmdLinkStatus;

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



Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -431,7 +430,7 @@ struct viawget_hostapd_param {
u8 ssid[32];
} scan_req;
} u;
};
} __packed;

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

Expand Down
8 changes: 3 additions & 5 deletions drivers/staging/vt6656/iowpa.h
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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];
Expand All @@ -130,7 +128,7 @@ struct viawget_scan_result {
int noise;
int level;
int maxrate;
};
} __packed;

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

Expand Down

0 comments on commit 1ee4c55

Please sign in to comment.