diff options
| author | jsing <> | 2020-03-10 17:11:25 +0000 |
|---|---|---|
| committer | jsing <> | 2020-03-10 17:11:25 +0000 |
| commit | 76ffd547d39ae8e7e343710553d13ff568e7d3ef (patch) | |
| tree | c720eff828444a92c90ec50ed52364e1de455f30 /src/lib/libssl/tls13_buffer.c | |
| parent | 7895b558af2262d6d71a405d98e524b072c4a3d8 (diff) | |
| download | openbsd-76ffd547d39ae8e7e343710553d13ff568e7d3ef.tar.gz openbsd-76ffd547d39ae8e7e343710553d13ff568e7d3ef.tar.bz2 openbsd-76ffd547d39ae8e7e343710553d13ff568e7d3ef.zip | |
Add a return value check to tls13_buffer_extend().
In the unlikely event that the return value from the read callback is
larger than the number of bytes we asked for, we can end up incrementing
buf->len beyond capacity. Check the return value from the read callback to
prevent this.
ok inoguchi@ tb@
Diffstat (limited to 'src/lib/libssl/tls13_buffer.c')
| -rw-r--r-- | src/lib/libssl/tls13_buffer.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/lib/libssl/tls13_buffer.c b/src/lib/libssl/tls13_buffer.c index 8990327bb6..bc10abded2 100644 --- a/src/lib/libssl/tls13_buffer.c +++ b/src/lib/libssl/tls13_buffer.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: tls13_buffer.c,v 1.2 2019/11/20 16:21:20 beck Exp $ */ | 1 | /* $OpenBSD: tls13_buffer.c,v 1.3 2020/03/10 17:11:25 jsing Exp $ */ |
| 2 | /* | 2 | /* |
| 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> | 3 | * Copyright (c) 2018, 2019 Joel Sing <jsing@openbsd.org> |
| 4 | * | 4 | * |
| @@ -104,6 +104,9 @@ tls13_buffer_extend(struct tls13_buffer *buf, size_t len, | |||
| 104 | buf->capacity - buf->len, cb_arg)) <= 0) | 104 | buf->capacity - buf->len, cb_arg)) <= 0) |
| 105 | return ret; | 105 | return ret; |
| 106 | 106 | ||
| 107 | if (ret > buf->capacity - buf->len) | ||
| 108 | return TLS13_IO_FAILURE; | ||
| 109 | |||
| 107 | buf->len += ret; | 110 | buf->len += ret; |
| 108 | 111 | ||
| 109 | if (buf->len == buf->capacity) | 112 | if (buf->len == buf->capacity) |
