[PATCH] Addditional classmark check against A5/X support

Sylvain Munaut 246tnt at gmail.com
Mon Jun 16 21:04:30 UTC 2014


Hi,

>  /* According to GSM 04.08 Chapter 10.5.1.6 */
> -static inline int ms_cm2_a5n_support(uint8_t *cm2, int n) {
> +static inline int ms_cm2_a5n_support(uint8_t *cm2, unsigned n) {
>         switch (n) {
>                 case 0: return 1;
>                 case 1: return (cm2[0] & (1<<3)) ? 0 : 1;
>                 case 2: return (cm2[2] & (1<<0)) ? 1 : 0;
>                 case 3: return (cm2[2] & (1<<1)) ? 1 : 0;
>                 default:
> -                       return 0;
> +                       return (n > 7) ? 0 : -1;
>         }
>  }

Why this change ?  I mean, you'd now have to go over __every_ use of
that function in all projects and make sure it's not used in something
like :

if (!ms_cm2_a5n_support(cm2, n)) {
   error
}

Because an invalid n is now going to return something != 0 ...


> +/*! \brief Check whether MS supports given cipher
> + *  \param[in] cm Classmark data transmitted by MS, cannot be NULL
> + *  \param[in] n Cipher number - A5/n
> + *  \returns 1 if supported, 0 if unsupported, -1 on failures
> + *
> + * Implementation based on specifications from GSM 04.08
> + * parts 10.5.1.6 and 10.5.1.7.
> + */
> +static inline int ms_a5n_support(uint8_t *cm, unsigned n) {
> +    return ((n < 4) ? ms_cm2_a5n_support(cm, n) : ms_cm3_a5n_support(cm, n));
> +}
> +

Huh ... so the called has to know whether to give CM2 or CM3 ... you
might as well not have this method at all then and just require it to
call the right method.


Cheers,

   Sylvain




More information about the baseband-devel mailing list