Hello Willy,

On 03/25/2016 01:37 PM, Willy Tarreau wrote:
> Hi Nenad,
> 
> On Fri, Mar 25, 2016 at 11:35:01AM +0100, Nenad Merdanovic wrote:
>> diff --git a/src/ssl_sock.c b/src/ssl_sock.c
>> index 1017388..767d6e9 100644
>> --- a/src/ssl_sock.c
>> +++ b/src/ssl_sock.c
>> @@ -5406,7 +5406,7 @@ static int bind_parse_tls_ticket_keys(char **args, int 
>> cur_arg, struct proxy *px
>>      fclose(f);
>>  
>>      /* Use penultimate key for encryption, handle when TLS_TICKETS_NO = 1 */
>> -    i-=2;
>> +    i = (i - 2) % TLS_TICKETS_NO;
>>      keys_ref->tls_ticket_enc_index = i < 0 ? 0 : i;
> 
> I'm still seeing an issue here which is that i is an integer so
> (i - 2) % TLS_TICKETS_NO will be negative for values of i between
> 0 and 1.
> 

Right, but this is covered with:
keys_ref->tls_ticket_enc_index = i < 0 ? 0 : i;

It can only happen in one case, if TLS_TICKET_NO = 1 (build time) and
there is only one key in the file (i = 1). There are explicit checks for
other cases:
#if (defined SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB && TLS_TICKETS_NO > 0)

and

        if (i < TLS_TICKETS_NO) {
                if (err)
                        memprintf(err, "'%s' : please supply at least %d
keys in the tls-tickets-file", args[cur_arg+1], TLS_TICKETS_NO);
                return ERR_ALERT | ERR_FATAL;
        }

The ternary operator here covers the case where the result is negative
and sets the index to 0 (which is the only key we have).

> If this is intended, then maybe it would be better do fix it this way
> instead so that there's no ambiguity regarding the validity of the
> above operation :
> 
> -     keys_ref->tls_ticket_enc_index = i < 0 ? 0 : i;
> +     keys_ref->tls_ticket_enc_index = i < 0 ? 0 : i % TLS_TICKETS_NO;
> 

I am afraid this would do the unwanted, because i % TLS_TICKET_NO, as
you said, can be negative, and we'd have a negative index being used as
an array index:
        head =
objt_listener(conn->target)->bind_conf->keys_ref->tls_ticket_enc_index;
        memcpy(key_name, keys[head].name, 16);


> What do you think ?
> 
> Thanks,
> Willy
> 

I might've missed something, but I think the fix should be as-is, but
please do not commit it yet, I need to do some more testing.

Regards,
Nenad

Reply via email to