From f3bc6bacd25a4cd5b69e680348727997b3f177d1 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin <jmvalin@amazon.com> Date: Thu, 3 Feb 2022 00:26:44 -0500 Subject: [PATCH] Avoiding tmp buffer overflows --- dnn/lpcnet.c | 1 - dnn/lpcnet_plc.c | 2 +- dnn/nnet.c | 9 ++++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/dnn/lpcnet.c b/dnn/lpcnet.c index bd61d6f75..48dca42d6 100644 --- a/dnn/lpcnet.c +++ b/dnn/lpcnet.c @@ -98,7 +98,6 @@ void run_frame_network(LPCNetState *lpcnet, float *gru_a_condition, float *gru_b compute_conv1d(&feature_conv1, conv1_out, net->feature_conv1_state, in); if (lpcnet->frame_count < FEATURE_CONV1_DELAY) RNN_CLEAR(conv1_out, FEATURE_CONV1_OUT_SIZE); compute_conv1d(&feature_conv2, conv2_out, net->feature_conv2_state, conv1_out); - celt_assert(FRAME_INPUT_SIZE == FEATURE_CONV2_OUT_SIZE); if (lpcnet->frame_count < FEATURES_DELAY) RNN_CLEAR(conv2_out, FEATURE_CONV2_OUT_SIZE); _lpcnet_compute_dense(&feature_dense1, dense1_out, conv2_out); _lpcnet_compute_dense(&feature_dense2, condition, dense1_out); diff --git a/dnn/lpcnet_plc.c b/dnn/lpcnet_plc.c index 9e67c2cce..788801b0b 100644 --- a/dnn/lpcnet_plc.c +++ b/dnn/lpcnet_plc.c @@ -62,7 +62,7 @@ LPCNET_EXPORT void lpcnet_plc_destroy(LPCNetPLCState *st) { } static void compute_plc_pred(PLCNetState *net, float *out, const float *in) { - float zeros[1024] = {0}; + float zeros[3*PLC_MAX_RNN_NEURONS] = {0}; float dense_out[PLC_DENSE1_OUT_SIZE]; _lpcnet_compute_dense(&plc_dense1, dense_out, in); compute_gruB(&plc_gru1, zeros, net->plc_gru1_state, dense_out); diff --git a/dnn/nnet.c b/dnn/nnet.c index 8af887137..2f78ac0cc 100644 --- a/dnn/nnet.c +++ b/dnn/nnet.c @@ -38,6 +38,7 @@ #include "tansig_table.h" #include "nnet.h" #include "nnet_data.h" +#include "plc_data.h" #ifdef NO_OPTIMIZATIONS #warning Compiling without any vectorization. This code will be very slow @@ -315,13 +316,15 @@ void compute_gru2(const GRULayer *gru, float *state, const float *input) state[i] = h[i]; } +#define MAX_RNN_NEURONS_ALL IMAX(MAX_RNN_NEURONS, PLC_MAX_RNN_NEURONS) + void compute_gruB(const GRULayer *gru, const float* gru_b_condition, float *state, const float *input) { int i; int N, M; int stride; - float zrh[3*MAX_RNN_NEURONS]; - float recur[3*MAX_RNN_NEURONS]; + float zrh[3*MAX_RNN_NEURONS_ALL]; + float recur[3*MAX_RNN_NEURONS_ALL]; float *z; float *r; float *h; @@ -330,7 +333,7 @@ void compute_gruB(const GRULayer *gru, const float* gru_b_condition, float *stat z = zrh; r = &zrh[N]; h = &zrh[2*N]; - celt_assert(gru->nb_neurons <= MAX_RNN_NEURONS); + celt_assert(gru->nb_neurons <= MAX_RNN_NEURONS_ALL); celt_assert(input != state); celt_assert(gru->reset_after); stride = 3*N; -- GitLab