From 20328895a28831024baf7fcd9e7bce57ef7cf263 Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Thu, 9 Aug 2018 22:27:40 -0500 Subject: [PATCH] Disable -Wformat-truncation and prevent potential string overflows. GCC 7.3.0 complained about the potential to overflow the fixed size span and channel names and descriptions. It also flagged potential truncations of the strings. The sprintf calls are now changed to snprintf to prevent the potential overflows, but the warning about truncations are now disabled globally. --- drivers/dahdi/Kbuild | 2 +- drivers/dahdi/dahdi_dynamic.c | 4 ++-- drivers/dahdi/wcte12xp/base.c | 3 ++- drivers/dahdi/wcte13xp-base.c | 3 ++- drivers/dahdi/wcte43x-base.c | 3 ++- 5 files changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/dahdi/Kbuild b/drivers/dahdi/Kbuild index ee2cd59..25a8d37 100644 --- a/drivers/dahdi/Kbuild +++ b/drivers/dahdi/Kbuild @@ -66,7 +66,7 @@ obj-m += dahdi_echocan_oslec.o obj-m += ../staging/echo/echo.o endif -CFLAGS_MODULE += -I$(DAHDI_INCLUDE) -I$(src) +CFLAGS_MODULE += -I$(DAHDI_INCLUDE) -I$(src) -Wno-format-truncation ifndef HOTPLUG_FIRMWARE ifneq (,$(filter y m,$(CONFIG_FW_LOADER))) diff --git a/drivers/dahdi/dahdi_dynamic.c b/drivers/dahdi/dahdi_dynamic.c index 0a37e2a..7811f9d 100644 --- a/drivers/dahdi/dahdi_dynamic.c +++ b/drivers/dahdi/dahdi_dynamic.c @@ -638,8 +638,8 @@ static int _create_dynamic(struct dahdi_dynamic_span *dds) DAHDI_CONFIG_HDB3 | DAHDI_CONFIG_CRC4 | DAHDI_CONFIG_NOTOPEN; d->span.ops = &dynamic_ops; for (x = 0; x < d->span.channels; x++) { - sprintf(d->chans[x]->name, "DYN/%s/%s/%d", - dds->driver, dds->addr, x+1); + snprintf(d->chans[x]->name, sizeof(d->chans[x]->name), + "DYN/%s/%s/%d", dds->driver, dds->addr, x+1); d->chans[x]->sigcap = DAHDI_SIG_EM | DAHDI_SIG_CLEAR | DAHDI_SIG_FXSLS | DAHDI_SIG_FXSKS | DAHDI_SIG_FXSGS | DAHDI_SIG_FXOLS | diff --git a/drivers/dahdi/wcte12xp/base.c b/drivers/dahdi/wcte12xp/base.c index c327c5f..2164e63 100644 --- a/drivers/dahdi/wcte12xp/base.c +++ b/drivers/dahdi/wcte12xp/base.c @@ -2069,7 +2069,8 @@ static int t1_software_init(struct t1 *wc, enum linemode type) t4_serial_setup(wc); set_bit(DAHDI_FLAGBIT_RBS, &wc->span.flags); for (x = 0; x < wc->span.channels; x++) { - sprintf(wc->chans[x]->name, "%s/%d", wc->span.name, x + 1); + snprintf(wc->chans[x]->name, sizeof(wc->chans[x]->name), + "%s/%d", wc->span.name, x + 1); t1_chan_set_sigcap(&wc->span, x); wc->chans[x]->pvt = wc; wc->chans[x]->chanpos = x + 1; diff --git a/drivers/dahdi/wcte13xp-base.c b/drivers/dahdi/wcte13xp-base.c index c5ebe9d..bb80f15 100644 --- a/drivers/dahdi/wcte13xp-base.c +++ b/drivers/dahdi/wcte13xp-base.c @@ -1805,7 +1805,8 @@ static int t13x_software_init(struct t13x *wc, enum linemode type) t13x_serial_setup(wc); set_bit(DAHDI_FLAGBIT_RBS, &wc->span.flags); for (x = 0; x < wc->span.channels; x++) { - sprintf(wc->chans[x]->name, "%s/%d", wc->span.name, x + 1); + snprintf(wc->chans[x]->name, sizeof(wc->chans[x]->name), + "%s/%d", wc->span.name, x + 1); t13x_chan_set_sigcap(&wc->span, x); wc->chans[x]->pvt = wc; wc->chans[x]->chanpos = x + 1; diff --git a/drivers/dahdi/wcte43x-base.c b/drivers/dahdi/wcte43x-base.c index 3e6159b..c9b7978 100644 --- a/drivers/dahdi/wcte43x-base.c +++ b/drivers/dahdi/wcte43x-base.c @@ -2536,7 +2536,8 @@ t43x_init_one_span(struct t43x *wc, struct t43x_span *ts, enum linemode type) set_bit(DAHDI_FLAGBIT_RBS, &ts->span.flags); for (x = 0; x < ts->span.channels; x++) { - sprintf(ts->chans[x]->name, "%s/%d", ts->span.name, x + 1); + snprintf(ts->chans[x]->name, sizeof(ts->chans[x]->name), + "%s/%d", ts->span.name, x + 1); t43x_chan_set_sigcap(&ts->span, x); ts->chans[x]->pvt = wc; ts->chans[x]->chanpos = x + 1;