]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: ssl: TLS Ticket Key rotation broken via socket command
authorPradeep Jindal <praddyjindal@gmail.com>
Thu, 20 Aug 2015 12:55:17 +0000 (18:25 +0530)
committerWilly Tarreau <w@1wt.eu>
Thu, 20 Aug 2015 14:23:22 +0000 (16:23 +0200)
It seems haproxy was doing wrong pointer arithmetic to update the ticket
ring correctly.

src/dumpstats.c
src/ssl_sock.c

index a779f4783d3c22a1d029da93cfc2f4b4d15f323d..b97318bebff3a1f3af53cc55d43d309b1f3f8c87 100644 (file)
@@ -1933,8 +1933,8 @@ static int stats_sock_parse_request(struct stream_interface *si, char *line)
                                        return 1;
                                }
 
-                               memcpy(appctx->ctx.tlskeys.ref->tlskeys + 2 % TLS_TICKETS_NO, trash.str, trash.len);
-                               appctx->ctx.tlskeys.ref->tls_ticket_enc_index = appctx->ctx.tlskeys.ref->tls_ticket_enc_index + 1 % TLS_TICKETS_NO;
+                               memcpy(appctx->ctx.tlskeys.ref->tlskeys + ((appctx->ctx.tlskeys.ref->tls_ticket_enc_index + 2) % TLS_TICKETS_NO), trash.str, trash.len);
+                               appctx->ctx.tlskeys.ref->tls_ticket_enc_index = (appctx->ctx.tlskeys.ref->tls_ticket_enc_index + 1) % TLS_TICKETS_NO;
 
                                appctx->ctx.cli.msg = "TLS ticket key updated!";
                                appctx->st0 = STAT_CLI_PRINT;
index 2b91eedbe88ff8070fe3bf480a76b587632a1331..85ffd5fb778aa78945f45f0a92443071736fcaf5 100644 (file)
@@ -500,8 +500,8 @@ int ssl_sock_update_tlskey(char *filename, struct chunk *tlskey, char **err) {
                return 1;
        }
 
-       memcpy((char *) (ref->tlskeys + 2 % TLS_TICKETS_NO), tlskey->str, tlskey->len);
-       ref->tls_ticket_enc_index = ref->tls_ticket_enc_index + 1 % TLS_TICKETS_NO;
+       memcpy((char *) (ref->tlskeys + ((ref->tls_ticket_enc_index + 2) % TLS_TICKETS_NO)), tlskey->str, tlskey->len);
+       ref->tls_ticket_enc_index = (ref->tls_ticket_enc_index + 1) % TLS_TICKETS_NO;
 
        return 0;
 }