[OpenAFS] Fwd: Bug#415952: openafs-client: klog fails with an "bus access error" for password longer then 8 symbols.

Russ Allbery rra@stanford.edu
Fri, 22 Jun 2007 02:42:22 -0700

Marcus Watts <mdw@spam.ifs.umich.edu> writes:

> It's a shame there's not a bit more information here.
> If compiled with "-g", it ought to be possible to see line numbers
> and procedure arguments, which would be helpful.  Absent that,
> it would have been interesting to see the current instruction
> and register contents, or better yet, instructions from the last
> subroutine entered up to around the point of failure...
> As it is- the above traceback appears to be ignoring static routines
> where it's probably actually dying.

Yeah, I'm not sure why the debugging information was so lame.  Although..
hm, maybe this is because we strip stuff in our install rules.

> Anyways, to take a stab in the dark: pwlen.gt.8 characters goes to
> StringToKey (instead of Andrew_StringToKey), (in src/kauth/client.c).
> This calls des_key_sched with 2 parms, char temp_key[8] and
> des_key_schedule schedule.  Somewhere inside the depths of
> des_key_schedule, it is indeed assumed that the key schedule can be
> accessed as integers.  Presumably this is what is failing.

Yup, that would do it.

> So, key_schedule in stock 1.4.4 is defined this way:
> typedef struct des_ks_struct { des_cblock _; } des_key_schedule[16];
> That is, an array of 16 blocks of 8 characters.  The C compiler will
> indeed only give that character alignment, so a problem is quite possible.
> A relatively simple fix is to instead do this:
> typedef struct des_ks_struct { int _[8/sizeof(int)]; } des_key_schedule[16];
> which will give it exactly the same size but require int alignment, which
> is what is required.  This should compile and work without errors; the
> fieldname itself is never used.

This loses if we ever get an int larger than 8 bytes, right?  (Not that
I'm expecting that soon... maybe DES will be gone by then.)

I'll send the bug reporter a patch and see if that change solves their

> I don't see any reason why this would suddenly start to fail on sparc --
> was the compiler changed recently?  Could BUFSIZ be defined by stdio.h
> to have an odd value?  Regardless, it has probably been a latent bug for
> a long time.

It's probably a change in compilers somewhere along the line.

Russ Allbery (rra@stanford.edu)             <http://www.eyrie.org/~eagle/>