All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Perches <joe@perches.com>
To: Larry Finger <Larry.Finger@lwfinger.net>
Cc: "Rafał Miłecki" <zajec5@gmail.com>,
	"Hauke Mehrtens" <hauke@hauke-m.de>,
	linville@tuxdriver.com, linux-wireless@vger.kernel.org
Subject: Re: [PATCH] ssb: fix unaligned access to mac address
Date: Wed, 20 Feb 2013 10:29:29 -0800	[thread overview]
Message-ID: <1361384969.2219.4.camel@joe-AO722> (raw)
In-Reply-To: <51250E6B.3030308@lwfinger.net>

On Wed, 2013-02-20 at 11:56 -0600, Larry Finger wrote:
> On 02/20/2013 11:31 AM, Joe Perches wrote:
> > On Mon, 2013-02-18 at 17:09 +0100, Rafał Miłecki wrote:
> >> 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.
> > []
> >>> diff --git 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)?
> >>
> >
> > Perhaps this?
> >
> > From: Joe Perches <joe@perches.com>
> > Subject: [PATCH] ssb: pci: Standardize a function to get mac address
> >
> > Don't require alignment of mac addresses to u16.
[]
> > diff --git a/drivers/ssb/pci.c b/drivers/ssb/pci.c
[]
> > @@ -231,6 +231,15 @@ static inline u8 ssb_crc8(u8 crc, u8 data)
> >   	return t[crc ^ data];
> >   }
> >
> > +static void sprom_get_mac(char *mac, const u16 *in)
> > +{
> > +	int i;
> > +	for (i = 0; i < 3; i++) {
> > +		*mac++ = in[i];
> > +		*mac++ = in[i] >> 8;
> > +	}
> > +}
> > +
> >   static u8 ssb_sprom_crc(const u16 *sprom, u16 size)
> >   {
> >   	int word;
> > @@ -341,8 +350,6 @@ static s8 r123_extract_antgain(u8 sprom_revision, const u16 *in,
> >
> >   static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in)
> >   {
> > -	int i;
> > -	u16 v;
> >   	u16 loc[3];
> >
> >   	if (out->revision == 3)			/* rev 3 moved MAC */
> > @@ -352,19 +359,10 @@ static void sprom_extract_r123(struct ssb_sprom *out, const u16 *in)
> >   		loc[1] = SSB_SPROM1_ET0MAC;
> >   		loc[2] = SSB_SPROM1_ET1MAC;
> >   	}
> > -	for (i = 0; i < 3; i++) {
> > -		v = in[SPOFF(loc[0]) + i];
> > -		*(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
> > -	}
> > +	sprom_get_mac(out->il0mac, &in[SPOFF(loc[0])]);
[]
> I like the looks of sprom_get_mac() over that ugly *(((__be16 *)out->il0mac) 
> construct, but this patch breaks ssb. The resulting MAC address is all ones. I 
> have not yet figured out the problem.

Dunno, I must have done something stupid.

I don't have one of these but the transform
looked correct when I did  it.

I'm not sure it's the best solution anyway
because some of the other ether address
functions like compare_ether_addr also
require 2 byte alignment and cast to u16.

cheers, Joe


  reply	other threads:[~2013-02-20 18:29 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-02-16 13:25 [PATCH] ssb: fix unaligned access to mac address Hauke Mehrtens
2013-02-18 10:10 ` Johannes Berg
2013-02-18 16:09 ` Rafał Miłecki
2013-02-20 17:31   ` Joe Perches
2013-02-20 17:56     ` Larry Finger
2013-02-20 18:29       ` Joe Perches [this message]
2013-02-20 19:17         ` Hauke Mehrtens
2013-02-20 20:11           ` Joe Perches
2013-02-21  3:34             ` Larry Finger
2013-03-09 23:02               ` Rafał Miłecki
2013-03-09 23:31                 ` Larry Finger
2013-03-09 23:56                 ` Larry Finger
2013-03-10 11:36                   ` Rafał Miłecki
2013-03-10 17:35                     ` Larry Finger
2013-03-10 20:57                       ` Rafał Miłecki
2013-02-20 20:16           ` [PATCH 2/2] ssb: Convert ssb_printk to ssb_<level> Joe Perches
2013-02-20 19:07       ` [PATCH] ssb: fix unaligned access to mac address Joe Perches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1361384969.2219.4.camel@joe-AO722 \
    --to=joe@perches.com \
    --cc=Larry.Finger@lwfinger.net \
    --cc=hauke@hauke-m.de \
    --cc=linux-wireless@vger.kernel.org \
    --cc=linville@tuxdriver.com \
    --cc=zajec5@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.