Subject: Re: Problem authenticating using WPA with bcm43xx-softmac

From: Dan Williams <[email-masked]>
Date: Wed, 07 Jun 2006 15:36:27 -0400

On Wed, 2006-06-07 at 13:12 -0500, Larry Finger wrote:
> Dan Williams wrote:
> > 
> > from ieee80211softmac_wx.c: ieee80211softmac_wx_set_genie()
> > 
> >                 memcpy(mac->wpa.IE, extra, wrqu->data.length);
> >                 dprintk(KERN_INFO PFX "generic IE set to ");
> >                 for (i=0;i<wrqu->data.length;i++)
> >                         dprintk("%.2x", mac->wpa.IE[i]);
> >                 dprintk("\n");
> > 
> > the dprintk code isn't doing the right thing here, given an array of
> > bytes.  You probably want:
> > 
> >                         dprintk("%.2hhx", mac->wpa.IE[i]);
> > 
> > (ie, add the "hh" before the x to tell the print that it's a char)
> > 
> That doesn't work - the result is

Weird, does the kernel not do something that fprintf() _does_ do here?
I tested with a short C program that mimics the behavior of this chunk
of code, and "%.2x" didn't work, but "%.2hhx" certainly did.  "hh" is
supposed to mean "A following integer conversion corresponds to a signed
char or unsigned char argument".  The original conversion was converting
stuff from la-la land after the first 4 bytes (in both softmac and my
testcase), and "hh" solved it in the testcase.  I did try casting to
char, but glibc pretty much ignored that.

Dan

> %hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx%hx
> 
> I changed the line to cast the output byte as a u8 as follows:
> 
>                          dprintk("%.2x", (u8)mac->wpa.IE[i]);
> 
> This produces the line
> 
> generic IE set to dd160050f20101000050f20201000050f20201000050f202
> 
> This is the WPA IE supplied by wpa_supplicant and it matches the one used in the ndiswrapper case. 
> One mystery solved, but why doesn't it work?
> 
> Johannes - should I submit the patch to fix this printout, or would you like to do it?
> 
> Larry