return 1;
}
-static ossl_inline void ring_buf_destroy(struct ring_buf *r)
+static ossl_inline void ring_buf_destroy(struct ring_buf *r, int cleanse)
{
- OPENSSL_free(r->start);
+ if (cleanse)
+ OPENSSL_clear_free(r->start, r->alloc);
+ else
+ OPENSSL_free(r->start);
r->start = NULL;
r->alloc = 0;
}
r->head_offset = r->ctail_offset;
}
-static ossl_inline int ring_buf_resize(struct ring_buf *r, size_t num_bytes)
+static ossl_inline int ring_buf_resize(struct ring_buf *r, size_t num_bytes,
+ int cleanse)
{
struct ring_buf rnew = {0};
const unsigned char *src = NULL;
}
assert(rnew.head_offset == r->head_offset);
- rnew.ctail_offset = r->ctail_offset;
+ rnew.ctail_offset = r->ctail_offset;
- OPENSSL_free(r->start);
+ ring_buf_destroy(r, cleanse);
memcpy(r, &rnew, sizeof(*r));
return 1;
}
return NULL;
ring_buf_init(&ret->rbuf);
- if (!ring_buf_resize(&ret->rbuf, rbuf_size)) {
+ if (!ring_buf_resize(&ret->rbuf, rbuf_size, 0)) {
OPENSSL_free(ret);
return NULL;
}
void ossl_quic_rstream_free(QUIC_RSTREAM *qrs)
{
+ int cleanse;
+
if (qrs == NULL)
return;
+ cleanse = qrs->fl.cleanse;
ossl_sframe_list_destroy(&qrs->fl);
- ring_buf_destroy(&qrs->rbuf);
+ ring_buf_destroy(&qrs->rbuf, cleanse);
OPENSSL_free(qrs);
}
if (ossl_sframe_list_is_head_locked(&qrs->fl))
return 0;
- if (!ring_buf_resize(&qrs->rbuf, rbuf_size))
+ if (!ring_buf_resize(&qrs->rbuf, rbuf_size, qrs->fl.cleanse))
return 0;
return 1;
return NULL;
ring_buf_init(&qss->ring_buf);
- if (!ring_buf_resize(&qss->ring_buf, init_buf_size)) {
- ring_buf_destroy(&qss->ring_buf);
+ if (!ring_buf_resize(&qss->ring_buf, init_buf_size, 0)) {
+ ring_buf_destroy(&qss->ring_buf, 0);
OPENSSL_free(qss);
return NULL;
}
ossl_uint_set_destroy(&qss->new_set);
ossl_uint_set_destroy(&qss->acked_set);
- ring_buf_destroy(&qss->ring_buf);
+ ring_buf_destroy(&qss->ring_buf, qss->cleanse);
OPENSSL_free(qss);
}
int ossl_quic_sstream_set_buffer_size(QUIC_SSTREAM *qss, size_t num_bytes)
{
- return ring_buf_resize(&qss->ring_buf, num_bytes);
+ return ring_buf_resize(&qss->ring_buf, num_bytes, qss->cleanse);
}
size_t ossl_quic_sstream_get_buffer_size(QUIC_SSTREAM *qss)