diff mbox

ssb: fix unaligned access to mac address

Message ID 1361021140-19871-1-git-send-email-hauke@hauke-m.de (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Hauke Mehrtens Feb. 16, 2013, 1:25 p.m. UTC
The mac address should be aligned to u16 to prevent an unaligned access
in drivers/ssb/pci.c where it is casted to __be16.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 include/linux/ssb/ssb.h |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Johannes Berg Feb. 18, 2013, 10:10 a.m. UTC | #1
On Sat, 2013-02-16 at 14:25 +0100, Hauke Mehrtens wrote:
> The mac address should be aligned to u16 to prevent an unaligned access
> in drivers/ssb/pci.c where it is casted to __be16.
> 
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  include/linux/ssb/ssb.h |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
> index 22958d6..457e8eb 100644
> --- a/include/linux/ssb/ssb.h
> +++ b/include/linux/ssb/ssb.h
> @@ -26,6 +26,7 @@ struct ssb_sprom_core_pwr_info {
>  
>  struct ssb_sprom {
>  	u8 revision;
> +	u8 country_code;	/* Country Code */
>  	u8 il0mac[6];		/* MAC address for 802.11b/g */

You should probably add __aligned(2) or so to them to avoid relying on
the struct layout only.

johannes

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafał Miłecki Feb. 18, 2013, 4:09 p.m. UTC | #2
2013/2/16 Hauke Mehrtens <hauke@hauke-m.de>:
> The mac address should be aligned to u16 to prevent an unaligned access
> in drivers/ssb/pci.c where it is casted to __be16.
>
> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
> ---
>  include/linux/ssb/ssb.h |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
> index 22958d6..457e8eb 100644
> --- a/include/linux/ssb/ssb.h
> +++ b/include/linux/ssb/ssb.h
> @@ -26,6 +26,7 @@ struct ssb_sprom_core_pwr_info {
>
>  struct ssb_sprom {
>         u8 revision;
> +       u8 country_code;        /* Country Code */
>         u8 il0mac[6];           /* MAC address for 802.11b/g */

It looks a little hacky to me too, it's easy to forget about that
requirement and break that again in the future.

What about not casting il0mac to u16 at all? Maybe we should just fill
it as u8 (which it is)?
diff mbox

Patch

diff --git a/include/linux/ssb/ssb.h b/include/linux/ssb/ssb.h
index 22958d6..457e8eb 100644
--- a/include/linux/ssb/ssb.h
+++ b/include/linux/ssb/ssb.h
@@ -26,6 +26,7 @@  struct ssb_sprom_core_pwr_info {
 
 struct ssb_sprom {
 	u8 revision;
+	u8 country_code;	/* Country Code */
 	u8 il0mac[6];		/* MAC address for 802.11b/g */
 	u8 et0mac[6];		/* MAC address for Ethernet */
 	u8 et1mac[6];		/* MAC address for 802.11a */
@@ -36,7 +37,6 @@  struct ssb_sprom {
 	u16 board_rev;		/* Board revision number from SPROM. */
 	u16 board_num;		/* Board number from SPROM. */
 	u16 board_type;		/* Board type from SPROM. */
-	u8 country_code;	/* Country Code */
 	char alpha2[2];		/* Country Code as two chars like EU or US */
 	u8 leddc_on_time;	/* LED Powersave Duty Cycle On Count */
 	u8 leddc_off_time;	/* LED Powersave Duty Cycle Off Count */