On Mon, 21 Aug 2023 at 09:01, Christian Schoenebeck <qemu_...@crudebyte.com> wrote: > > On Friday, August 18, 2023 5:58:45 PM CEST Peter Maydell wrote: > > Avoid a dynamic stack allocation in qjack_client_init(), by using > > a g_autofree heap allocation instead. > > > > (We stick with allocate + snprintf() because the JACK API requires > > the name to be no more than its maximum size, so g_strdup_printf() > > would require an extra truncation step.) > > > > The codebase has very few VLAs, and if we can get rid of them all we > > can make the compiler error on new additions. This is a defensive > > measure against security bugs where an on-stack dynamic allocation > > isn't correctly size-checked (e.g. CVE-2021-3527). > > Sounds good, what compiler flag will that be?
It's "-Wvla". > > Signed-off-by: Peter Maydell <peter.mayd...@linaro.org> > > --- > > audio/jackaudio.c | 5 +++-- > > 1 file changed, 3 insertions(+), 2 deletions(-) > > > > diff --git a/audio/jackaudio.c b/audio/jackaudio.c > > index 5bdf3d7a78d..7cb2a49f971 100644 > > --- a/audio/jackaudio.c > > +++ b/audio/jackaudio.c > > @@ -400,7 +400,8 @@ static void qjack_client_connect_ports(QJackClient *c) > > static int qjack_client_init(QJackClient *c) > > { > > jack_status_t status; > > - char client_name[jack_client_name_size()]; > > + int client_name_len = jack_client_name_size(); /* includes NUL */ > > I would add `const` here. Sure, I can do this. (I tend not to use 'const' except when dealing with pointers, personally, but that's just habit.) > > + g_autofree char *client_name = g_new(char, client_name_len); > > jack_options_t options = JackNullOption; > > > > if (c->state == QJACK_STATE_RUNNING) { > > @@ -409,7 +410,7 @@ static int qjack_client_init(QJackClient *c) > > > > c->connect_ports = true; > > > > - snprintf(client_name, sizeof(client_name), "%s-%s", > > + snprintf(client_name, client_name_len, "%s-%s", > > c->out ? "out" : "in", > > c->opt->client_name ? c->opt->client_name : > > audio_application_name()); > > Unrelated, but this could be shortened by Elvis operator BTW: > > c->opt->client_name ?: audio_application_name() > > Anyway: > > Reviewed-by: Christian Schoenebeck <qemu_...@crudebyte.com> thanks -- PMM