diff mbox series

[1/1] package/dahdi-linux: fix build with kernel >= 6.8

Message ID 20240407170327.2783623-1-fontaine.fabrice@gmail.com
State Accepted
Headers show
Series [1/1] package/dahdi-linux: fix build with kernel >= 6.8 | expand

Commit Message

Fabrice Fontaine April 7, 2024, 5:03 p.m. UTC
Fix the following build failure with kernel >= 6.8:

/home/autobuild/autobuild/instance-8/output-1/build/dahdi-linux-3.3.0/drivers/dahdi/xpp/card_global.c: In function ‘parse_chip_command’:
/home/autobuild/autobuild/instance-8/output-1/build/dahdi-linux-3.3.0/drivers/dahdi/xpp/card_global.c:345:9: error: implicit declaration of function ‘strlcpy’; did you mean ‘strscpy’? [-Werror=implicit-function-declaration]
  345 |         strlcpy(buf, cmdline, MAX_PROC_WRITE);  /* Save a copy */
      |         ^~~~~~~
      |         strscpy

Fixes:
 - http://autobuild.buildroot.org/results/a0d2dcd10af9bf465ded2da83eccf2d137187477

Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 ...ilation-issue-for-6-8-y-6-9-y-kernel.patch | 230 ++++++++++++++++++
 1 file changed, 230 insertions(+)
 create mode 100644 package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch

Comments

Arnout Vandecappelle April 7, 2024, 7:38 p.m. UTC | #1
On 07/04/2024 19:03, Fabrice Fontaine wrote:
> Fix the following build failure with kernel >= 6.8:
> 
> /home/autobuild/autobuild/instance-8/output-1/build/dahdi-linux-3.3.0/drivers/dahdi/xpp/card_global.c: In function ‘parse_chip_command’:
> /home/autobuild/autobuild/instance-8/output-1/build/dahdi-linux-3.3.0/drivers/dahdi/xpp/card_global.c:345:9: error: implicit declaration of function ‘strlcpy’; did you mean ‘strscpy’? [-Werror=implicit-function-declaration]
>    345 |         strlcpy(buf, cmdline, MAX_PROC_WRITE);  /* Save a copy */
>        |         ^~~~~~~
>        |         strscpy
> 
> Fixes:
>   - http://autobuild.buildroot.org/results/a0d2dcd10af9bf465ded2da83eccf2d137187477
> 
> Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>

  Applied to master, thanks.

  Regards,
  Arnout

> ---
>   ...ilation-issue-for-6-8-y-6-9-y-kernel.patch | 230 ++++++++++++++++++
>   1 file changed, 230 insertions(+)
>   create mode 100644 package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch
> 
> diff --git a/package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch b/package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch
> new file mode 100644
> index 0000000000..776d74218e
> --- /dev/null
> +++ b/package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch
> @@ -0,0 +1,230 @@
> +From 497f11466688d9e76a7b68ffdd2c3859279f5fce Mon Sep 17 00:00:00 2001
> +From: Pushkar Singh <psingh@sangoma.com>
> +Date: Thu, 4 Apr 2024 01:15:01 +0530
> +Subject: [PATCH] Fix compilation issue for 6.8.y/6.9.y kernel
> +
> +Upstream: https://github.com/asterisk/dahdi-linux/commit/497f11466688d9e76a7b68ffdd2c3859279f5fce
> +Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
> +---
> + drivers/dahdi/dahdi-base.c          | 40 ++++++++++++++---------------
> + drivers/dahdi/dahdi_dynamic.c       |  4 +--
> + drivers/dahdi/dahdi_dynamic_eth.c   |  4 +--
> + drivers/dahdi/dahdi_dynamic_ethmf.c |  2 +-
> + drivers/dahdi/dahdi_transcode.c     |  2 +-
> + drivers/dahdi/xpp/card_global.c     |  2 +-
> + 6 files changed, 27 insertions(+), 27 deletions(-)
> +
> +diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c
> +index b96f72b1..87177a69 100644
> +--- a/drivers/dahdi/dahdi-base.c
> ++++ b/drivers/dahdi/dahdi-base.c
> +@@ -4359,7 +4359,7 @@ static int dahdi_ioctl_getparams(struct file *file, unsigned long data)
> + 	param.pulsebreaktime = chan->pulsebreaktime;
> + 	param.pulseaftertime = chan->pulseaftertime;
> + 	param.spanno = (chan->span) ? chan->span->spanno : 0;
> +-	strlcpy(param.name, chan->name, sizeof(param.name));
> ++	strscpy(param.name, chan->name, sizeof(param.name));
> + 	param.chanpos = chan->chanpos;
> + 	param.sigcap = chan->sigcap;
> + 	/* Return current law */
> +@@ -4447,8 +4447,8 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
> +
> + 	spaninfo.spanno = s->spanno; /* put the span # in here */
> + 	spaninfo.totalspans = span_count();
> +-	strlcpy(spaninfo.desc, s->desc, sizeof(spaninfo.desc));
> +-	strlcpy(spaninfo.name, s->name, sizeof(spaninfo.name));
> ++	strscpy(spaninfo.desc, s->desc, sizeof(spaninfo.desc));
> ++	strscpy(spaninfo.name, s->name, sizeof(spaninfo.name));
> + 	spaninfo.alarms = s->alarms;		/* get alarm status */
> + 	spaninfo.rxlevel = s->rxlevel;	/* get rx level */
> + 	spaninfo.txlevel = s->txlevel;	/* get tx level */
> +@@ -4475,18 +4475,18 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
> + 	spaninfo.lineconfig = s->lineconfig;
> + 	spaninfo.irq = 0;
> + 	spaninfo.linecompat = s->linecompat;
> +-	strlcpy(spaninfo.lboname, dahdi_lboname(s->lbo),
> ++	strscpy(spaninfo.lboname, dahdi_lboname(s->lbo),
> + 			  sizeof(spaninfo.lboname));
> + 	if (s->parent->manufacturer) {
> +-		strlcpy(spaninfo.manufacturer, s->parent->manufacturer,
> ++		strscpy(spaninfo.manufacturer, s->parent->manufacturer,
> + 			sizeof(spaninfo.manufacturer));
> + 	}
> + 	if (s->parent->devicetype) {
> +-		strlcpy(spaninfo.devicetype, s->parent->devicetype,
> ++		strscpy(spaninfo.devicetype, s->parent->devicetype,
> + 			sizeof(spaninfo.devicetype));
> + 	}
> + 	if (s->parent->location) {
> +-		strlcpy(spaninfo.location, s->parent->location,
> ++		strscpy(spaninfo.location, s->parent->location,
> + 			sizeof(spaninfo.location));
> + 	}
> + 	if (s->spantype) {
> +@@ -4505,11 +4505,11 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
> + 		const char *st = dahdi_spantype2str(s->spantype);
> + 		switch (s->spantype) {
> + 		case SPANTYPE_DIGITAL_BRI_NT:
> +-			strlcpy(spaninfo.spantype, "NT",
> ++			strscpy(spaninfo.spantype, "NT",
> + 					sizeof(spaninfo.spantype));
> + 			break;
> + 		case SPANTYPE_DIGITAL_BRI_TE:
> +-			strlcpy(spaninfo.spantype, "TE",
> ++			strscpy(spaninfo.spantype, "TE",
> + 					sizeof(spaninfo.spantype));
> + 			break;
> + 		default:
> +@@ -4519,7 +4519,7 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
> + 			 * so no backward compatibility for this
> + 			 * broken interface.
> + 			 */
> +-			strlcpy(spaninfo.spantype, st,
> ++			strscpy(spaninfo.spantype, st,
> + 					sizeof(spaninfo.spantype));
> + 			break;
> + 		}
> +@@ -4568,10 +4568,10 @@ static int dahdi_ioctl_spanstat_v1(struct file *file, unsigned long data)
> + 	spaninfo_v1.spanno = s->spanno; /* put the span # in here */
> + 	spaninfo_v1.totalspans = 0;
> + 	spaninfo_v1.totalspans = span_count();
> +-	strlcpy(spaninfo_v1.desc,
> ++	strscpy(spaninfo_v1.desc,
> + 			  s->desc,
> + 			  sizeof(spaninfo_v1.desc));
> +-	strlcpy(spaninfo_v1.name,
> ++	strscpy(spaninfo_v1.name,
> + 			  s->name,
> + 			  sizeof(spaninfo_v1.name));
> + 	spaninfo_v1.alarms = s->alarms;
> +@@ -4593,25 +4593,25 @@ static int dahdi_ioctl_spanstat_v1(struct file *file, unsigned long data)
> + 	spaninfo_v1.lineconfig = s->lineconfig;
> + 	spaninfo_v1.irq = 0;
> + 	spaninfo_v1.linecompat = s->linecompat;
> +-	strlcpy(spaninfo_v1.lboname,
> ++	strscpy(spaninfo_v1.lboname,
> + 			  dahdi_lboname(s->lbo),
> + 			  sizeof(spaninfo_v1.lboname));
> +
> + 	if (s->parent->manufacturer) {
> +-		strlcpy(spaninfo_v1.manufacturer, s->parent->manufacturer,
> ++		strscpy(spaninfo_v1.manufacturer, s->parent->manufacturer,
> + 			sizeof(spaninfo_v1.manufacturer));
> + 	}
> +
> + 	if (s->parent->devicetype) {
> +-		strlcpy(spaninfo_v1.devicetype, s->parent->devicetype,
> ++		strscpy(spaninfo_v1.devicetype, s->parent->devicetype,
> + 			sizeof(spaninfo_v1.devicetype));
> + 	}
> +
> +-	strlcpy(spaninfo_v1.location, s->parent->location,
> ++	strscpy(spaninfo_v1.location, s->parent->location,
> + 		sizeof(spaninfo_v1.location));
> +
> + 	if (s->spantype) {
> +-		strlcpy(spaninfo_v1.spantype,
> ++		strscpy(spaninfo_v1.spantype,
> + 				  dahdi_spantype2str(s->spantype),
> + 				  sizeof(spaninfo_v1.spantype));
> + 	}
> +@@ -5285,7 +5285,7 @@ static int dahdi_ioctl_attach_echocan(unsigned long data)
> + 			 * always use it instead of any configured software
> + 			 * echocan. This matches the behavior in dahdi 2.4.1.2
> + 			 * and earlier releases. */
> +-			strlcpy(ae.echocan, hwec_def_name, sizeof(ae.echocan));
> ++			strscpy(ae.echocan, hwec_def_name, sizeof(ae.echocan));
> +
> + 		} else if (strcasecmp(ae.echocan, hwec_def_name) != 0) {
> + 			chan_dbg(GENERAL, chan,
> +@@ -5384,7 +5384,7 @@ static int dahdi_ioctl_get_version(unsigned long data)
> + 	bool have_hwec = dahdi_any_hwec_available();
> +
> + 	memset(&vi, 0, sizeof(vi));
> +-	strlcpy(vi.version, dahdi_version, sizeof(vi.version));
> ++	strscpy(vi.version, dahdi_version, sizeof(vi.version));
> + 	spin_lock(&ecfactory_list_lock);
> + 	list_for_each_entry(cur, &ecfactory_list, list) {
> + 		const char * const ec_name = cur->ec->get_name(NULL);
> +@@ -5640,7 +5640,7 @@ static int ioctl_dahdi_dial(struct dahdi_chan *chan, unsigned long data)
> + 			rv = -EBUSY;
> + 			break;
> + 		}
> +-		strlcpy(chan->txdialbuf + strlen(chan->txdialbuf), tdo->dialstr,
> ++		strscpy(chan->txdialbuf + strlen(chan->txdialbuf), tdo->dialstr,
> + 			DAHDI_MAX_DTMF_BUF - strlen(chan->txdialbuf));
> + 		if (!chan->dialing) {
> + 			chan->dialing = 1;
> +diff --git a/drivers/dahdi/dahdi_dynamic.c b/drivers/dahdi/dahdi_dynamic.c
> +index b1df408d..be58aff8 100644
> +--- a/drivers/dahdi/dahdi_dynamic.c
> ++++ b/drivers/dahdi/dahdi_dynamic.c
> +@@ -622,8 +622,8 @@ static int _create_dynamic(struct dahdi_dynamic_span *dds)
> + 	}
> + 	
> + 	/* Setup parameters properly assuming we're going to be okay. */
> +-	strlcpy(d->dname, dds->driver, sizeof(d->dname));
> +-	strlcpy(d->addr, dds->addr, sizeof(d->addr));
> ++	strscpy(d->dname, dds->driver, sizeof(d->dname));
> ++	strscpy(d->addr, dds->addr, sizeof(d->addr));
> + 	d->timing = dds->timing;
> + 	snprintf(d->span.name, sizeof(d->span.name), "DYN/%s/%s",
> + 		 dds->driver, dds->addr);
> +diff --git a/drivers/dahdi/dahdi_dynamic_eth.c b/drivers/dahdi/dahdi_dynamic_eth.c
> +index 0209489b..c7a293dd 100644
> +--- a/drivers/dahdi/dahdi_dynamic_eth.c
> ++++ b/drivers/dahdi/dahdi_dynamic_eth.c
> +@@ -292,12 +292,12 @@ static int ztdeth_create(struct dahdi_dynamic *dyn, const char *addr)
> + 		memset(z, 0, sizeof(struct ztdeth));
> +
> + 		/* Address should be <dev>/<macaddr>[/subaddr] */
> +-		strlcpy(tmp, addr, sizeof(tmp));
> ++		strscpy(tmp, addr, sizeof(tmp));
> + 		tmp2 = strchr(tmp, '/');
> + 		if (tmp2) {
> + 			*tmp2 = '\0';
> + 			tmp2++;
> +-			strlcpy(z->ethdev, tmp, sizeof(z->ethdev));
> ++			strscpy(z->ethdev, tmp, sizeof(z->ethdev));
> + 		} else {
> + 			printk(KERN_NOTICE "Invalid TDMoE address (no device) '%s'\n", addr);
> + 			kfree(z);
> +diff --git a/drivers/dahdi/dahdi_dynamic_ethmf.c b/drivers/dahdi/dahdi_dynamic_ethmf.c
> +index 73290d8d..f7c067fb 100644
> +--- a/drivers/dahdi/dahdi_dynamic_ethmf.c
> ++++ b/drivers/dahdi/dahdi_dynamic_ethmf.c
> +@@ -573,7 +573,7 @@ static int ztdethmf_create(struct dahdi_dynamic *dyn, const char *addr)
> + 	z->rcvbuf = kmalloc(bufsize, GFP_KERNEL);
> +
> + 	/* Address should be <dev>/<macaddr>/subaddr */
> +-	strlcpy(src, addr, sizeof(src));
> ++	strscpy(src, addr, sizeof(src));
> + 	/* replace all / with space; otherwise kernel sscanf does not work */
> + 	src_ptr = src;
> + 	while (*src_ptr) {
> +diff --git a/drivers/dahdi/dahdi_transcode.c b/drivers/dahdi/dahdi_transcode.c
> +index 6021aac2..7645e2f1 100644
> +--- a/drivers/dahdi/dahdi_transcode.c
> ++++ b/drivers/dahdi/dahdi_transcode.c
> +@@ -329,7 +329,7 @@ static long dahdi_tc_getinfo(unsigned long data)
> + 		return -ENOSYS;
> + 	}
> +
> +-	strlcpy(info.name, tc->name, sizeof(info.name));
> ++	strscpy(info.name, tc->name, sizeof(info.name));
> + 	info.numchannels = tc->numchannels;
> + 	info.srcfmts = tc->srcfmts;
> + 	info.dstfmts = tc->dstfmts;
> +diff --git a/drivers/dahdi/xpp/card_global.c b/drivers/dahdi/xpp/card_global.c
> +index 9e679bbc..064edbb3 100644
> +--- a/drivers/dahdi/xpp/card_global.c
> ++++ b/drivers/dahdi/xpp/card_global.c
> +@@ -342,7 +342,7 @@ int parse_chip_command(xpd_t *xpd, char *cmdline)
> + 		XBUS_DBG(GENERAL, xbus, "Dropped packet. Disconnected.\n");
> + 		return -EBUSY;
> + 	}
> +-	strlcpy(buf, cmdline, MAX_PROC_WRITE);	/* Save a copy */
> ++	strscpy(buf, cmdline, MAX_PROC_WRITE);	/* Save a copy */
> + 	if (buf[0] == '#' || buf[0] == ';')
> + 		XPD_DBG(REGS, xpd, "Note: '%s'\n", buf);
> + 	if ((p = strchr(buf, '#')) != NULL)	/* Truncate comments */
diff mbox series

Patch

diff --git a/package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch b/package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch
new file mode 100644
index 0000000000..776d74218e
--- /dev/null
+++ b/package/dahdi-linux/0002-Fix-compilation-issue-for-6-8-y-6-9-y-kernel.patch
@@ -0,0 +1,230 @@ 
+From 497f11466688d9e76a7b68ffdd2c3859279f5fce Mon Sep 17 00:00:00 2001
+From: Pushkar Singh <psingh@sangoma.com>
+Date: Thu, 4 Apr 2024 01:15:01 +0530
+Subject: [PATCH] Fix compilation issue for 6.8.y/6.9.y kernel
+
+Upstream: https://github.com/asterisk/dahdi-linux/commit/497f11466688d9e76a7b68ffdd2c3859279f5fce
+Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
+---
+ drivers/dahdi/dahdi-base.c          | 40 ++++++++++++++---------------
+ drivers/dahdi/dahdi_dynamic.c       |  4 +--
+ drivers/dahdi/dahdi_dynamic_eth.c   |  4 +--
+ drivers/dahdi/dahdi_dynamic_ethmf.c |  2 +-
+ drivers/dahdi/dahdi_transcode.c     |  2 +-
+ drivers/dahdi/xpp/card_global.c     |  2 +-
+ 6 files changed, 27 insertions(+), 27 deletions(-)
+
+diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c
+index b96f72b1..87177a69 100644
+--- a/drivers/dahdi/dahdi-base.c
++++ b/drivers/dahdi/dahdi-base.c
+@@ -4359,7 +4359,7 @@ static int dahdi_ioctl_getparams(struct file *file, unsigned long data)
+ 	param.pulsebreaktime = chan->pulsebreaktime;
+ 	param.pulseaftertime = chan->pulseaftertime;
+ 	param.spanno = (chan->span) ? chan->span->spanno : 0;
+-	strlcpy(param.name, chan->name, sizeof(param.name));
++	strscpy(param.name, chan->name, sizeof(param.name));
+ 	param.chanpos = chan->chanpos;
+ 	param.sigcap = chan->sigcap;
+ 	/* Return current law */
+@@ -4447,8 +4447,8 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
+ 
+ 	spaninfo.spanno = s->spanno; /* put the span # in here */
+ 	spaninfo.totalspans = span_count();
+-	strlcpy(spaninfo.desc, s->desc, sizeof(spaninfo.desc));
+-	strlcpy(spaninfo.name, s->name, sizeof(spaninfo.name));
++	strscpy(spaninfo.desc, s->desc, sizeof(spaninfo.desc));
++	strscpy(spaninfo.name, s->name, sizeof(spaninfo.name));
+ 	spaninfo.alarms = s->alarms;		/* get alarm status */
+ 	spaninfo.rxlevel = s->rxlevel;	/* get rx level */
+ 	spaninfo.txlevel = s->txlevel;	/* get tx level */
+@@ -4475,18 +4475,18 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
+ 	spaninfo.lineconfig = s->lineconfig;
+ 	spaninfo.irq = 0;
+ 	spaninfo.linecompat = s->linecompat;
+-	strlcpy(spaninfo.lboname, dahdi_lboname(s->lbo),
++	strscpy(spaninfo.lboname, dahdi_lboname(s->lbo),
+ 			  sizeof(spaninfo.lboname));
+ 	if (s->parent->manufacturer) {
+-		strlcpy(spaninfo.manufacturer, s->parent->manufacturer,
++		strscpy(spaninfo.manufacturer, s->parent->manufacturer,
+ 			sizeof(spaninfo.manufacturer));
+ 	}
+ 	if (s->parent->devicetype) {
+-		strlcpy(spaninfo.devicetype, s->parent->devicetype,
++		strscpy(spaninfo.devicetype, s->parent->devicetype,
+ 			sizeof(spaninfo.devicetype));
+ 	}
+ 	if (s->parent->location) {
+-		strlcpy(spaninfo.location, s->parent->location,
++		strscpy(spaninfo.location, s->parent->location,
+ 			sizeof(spaninfo.location));
+ 	}
+ 	if (s->spantype) {
+@@ -4505,11 +4505,11 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
+ 		const char *st = dahdi_spantype2str(s->spantype);
+ 		switch (s->spantype) {
+ 		case SPANTYPE_DIGITAL_BRI_NT:
+-			strlcpy(spaninfo.spantype, "NT",
++			strscpy(spaninfo.spantype, "NT",
+ 					sizeof(spaninfo.spantype));
+ 			break;
+ 		case SPANTYPE_DIGITAL_BRI_TE:
+-			strlcpy(spaninfo.spantype, "TE",
++			strscpy(spaninfo.spantype, "TE",
+ 					sizeof(spaninfo.spantype));
+ 			break;
+ 		default:
+@@ -4519,7 +4519,7 @@ static int dahdi_ioctl_spanstat(struct file *file, unsigned long data)
+ 			 * so no backward compatibility for this
+ 			 * broken interface.
+ 			 */
+-			strlcpy(spaninfo.spantype, st,
++			strscpy(spaninfo.spantype, st,
+ 					sizeof(spaninfo.spantype));
+ 			break;
+ 		}
+@@ -4568,10 +4568,10 @@ static int dahdi_ioctl_spanstat_v1(struct file *file, unsigned long data)
+ 	spaninfo_v1.spanno = s->spanno; /* put the span # in here */
+ 	spaninfo_v1.totalspans = 0;
+ 	spaninfo_v1.totalspans = span_count();
+-	strlcpy(spaninfo_v1.desc,
++	strscpy(spaninfo_v1.desc,
+ 			  s->desc,
+ 			  sizeof(spaninfo_v1.desc));
+-	strlcpy(spaninfo_v1.name,
++	strscpy(spaninfo_v1.name,
+ 			  s->name,
+ 			  sizeof(spaninfo_v1.name));
+ 	spaninfo_v1.alarms = s->alarms;
+@@ -4593,25 +4593,25 @@ static int dahdi_ioctl_spanstat_v1(struct file *file, unsigned long data)
+ 	spaninfo_v1.lineconfig = s->lineconfig;
+ 	spaninfo_v1.irq = 0;
+ 	spaninfo_v1.linecompat = s->linecompat;
+-	strlcpy(spaninfo_v1.lboname,
++	strscpy(spaninfo_v1.lboname,
+ 			  dahdi_lboname(s->lbo),
+ 			  sizeof(spaninfo_v1.lboname));
+ 
+ 	if (s->parent->manufacturer) {
+-		strlcpy(spaninfo_v1.manufacturer, s->parent->manufacturer,
++		strscpy(spaninfo_v1.manufacturer, s->parent->manufacturer,
+ 			sizeof(spaninfo_v1.manufacturer));
+ 	}
+ 
+ 	if (s->parent->devicetype) {
+-		strlcpy(spaninfo_v1.devicetype, s->parent->devicetype,
++		strscpy(spaninfo_v1.devicetype, s->parent->devicetype,
+ 			sizeof(spaninfo_v1.devicetype));
+ 	}
+ 
+-	strlcpy(spaninfo_v1.location, s->parent->location,
++	strscpy(spaninfo_v1.location, s->parent->location,
+ 		sizeof(spaninfo_v1.location));
+ 
+ 	if (s->spantype) {
+-		strlcpy(spaninfo_v1.spantype,
++		strscpy(spaninfo_v1.spantype,
+ 				  dahdi_spantype2str(s->spantype),
+ 				  sizeof(spaninfo_v1.spantype));
+ 	}
+@@ -5285,7 +5285,7 @@ static int dahdi_ioctl_attach_echocan(unsigned long data)
+ 			 * always use it instead of any configured software
+ 			 * echocan. This matches the behavior in dahdi 2.4.1.2
+ 			 * and earlier releases. */
+-			strlcpy(ae.echocan, hwec_def_name, sizeof(ae.echocan));
++			strscpy(ae.echocan, hwec_def_name, sizeof(ae.echocan));
+ 
+ 		} else if (strcasecmp(ae.echocan, hwec_def_name) != 0) {
+ 			chan_dbg(GENERAL, chan,
+@@ -5384,7 +5384,7 @@ static int dahdi_ioctl_get_version(unsigned long data)
+ 	bool have_hwec = dahdi_any_hwec_available();
+ 
+ 	memset(&vi, 0, sizeof(vi));
+-	strlcpy(vi.version, dahdi_version, sizeof(vi.version));
++	strscpy(vi.version, dahdi_version, sizeof(vi.version));
+ 	spin_lock(&ecfactory_list_lock);
+ 	list_for_each_entry(cur, &ecfactory_list, list) {
+ 		const char * const ec_name = cur->ec->get_name(NULL);
+@@ -5640,7 +5640,7 @@ static int ioctl_dahdi_dial(struct dahdi_chan *chan, unsigned long data)
+ 			rv = -EBUSY;
+ 			break;
+ 		}
+-		strlcpy(chan->txdialbuf + strlen(chan->txdialbuf), tdo->dialstr,
++		strscpy(chan->txdialbuf + strlen(chan->txdialbuf), tdo->dialstr,
+ 			DAHDI_MAX_DTMF_BUF - strlen(chan->txdialbuf));
+ 		if (!chan->dialing) {
+ 			chan->dialing = 1;
+diff --git a/drivers/dahdi/dahdi_dynamic.c b/drivers/dahdi/dahdi_dynamic.c
+index b1df408d..be58aff8 100644
+--- a/drivers/dahdi/dahdi_dynamic.c
++++ b/drivers/dahdi/dahdi_dynamic.c
+@@ -622,8 +622,8 @@ static int _create_dynamic(struct dahdi_dynamic_span *dds)
+ 	}
+ 	
+ 	/* Setup parameters properly assuming we're going to be okay. */
+-	strlcpy(d->dname, dds->driver, sizeof(d->dname));
+-	strlcpy(d->addr, dds->addr, sizeof(d->addr));
++	strscpy(d->dname, dds->driver, sizeof(d->dname));
++	strscpy(d->addr, dds->addr, sizeof(d->addr));
+ 	d->timing = dds->timing;
+ 	snprintf(d->span.name, sizeof(d->span.name), "DYN/%s/%s",
+ 		 dds->driver, dds->addr);
+diff --git a/drivers/dahdi/dahdi_dynamic_eth.c b/drivers/dahdi/dahdi_dynamic_eth.c
+index 0209489b..c7a293dd 100644
+--- a/drivers/dahdi/dahdi_dynamic_eth.c
++++ b/drivers/dahdi/dahdi_dynamic_eth.c
+@@ -292,12 +292,12 @@ static int ztdeth_create(struct dahdi_dynamic *dyn, const char *addr)
+ 		memset(z, 0, sizeof(struct ztdeth));
+ 
+ 		/* Address should be <dev>/<macaddr>[/subaddr] */
+-		strlcpy(tmp, addr, sizeof(tmp));
++		strscpy(tmp, addr, sizeof(tmp));
+ 		tmp2 = strchr(tmp, '/');
+ 		if (tmp2) {
+ 			*tmp2 = '\0';
+ 			tmp2++;
+-			strlcpy(z->ethdev, tmp, sizeof(z->ethdev));
++			strscpy(z->ethdev, tmp, sizeof(z->ethdev));
+ 		} else {
+ 			printk(KERN_NOTICE "Invalid TDMoE address (no device) '%s'\n", addr);
+ 			kfree(z);
+diff --git a/drivers/dahdi/dahdi_dynamic_ethmf.c b/drivers/dahdi/dahdi_dynamic_ethmf.c
+index 73290d8d..f7c067fb 100644
+--- a/drivers/dahdi/dahdi_dynamic_ethmf.c
++++ b/drivers/dahdi/dahdi_dynamic_ethmf.c
+@@ -573,7 +573,7 @@ static int ztdethmf_create(struct dahdi_dynamic *dyn, const char *addr)
+ 	z->rcvbuf = kmalloc(bufsize, GFP_KERNEL);
+ 
+ 	/* Address should be <dev>/<macaddr>/subaddr */
+-	strlcpy(src, addr, sizeof(src));
++	strscpy(src, addr, sizeof(src));
+ 	/* replace all / with space; otherwise kernel sscanf does not work */
+ 	src_ptr = src;
+ 	while (*src_ptr) {
+diff --git a/drivers/dahdi/dahdi_transcode.c b/drivers/dahdi/dahdi_transcode.c
+index 6021aac2..7645e2f1 100644
+--- a/drivers/dahdi/dahdi_transcode.c
++++ b/drivers/dahdi/dahdi_transcode.c
+@@ -329,7 +329,7 @@ static long dahdi_tc_getinfo(unsigned long data)
+ 		return -ENOSYS;
+ 	}
+ 
+-	strlcpy(info.name, tc->name, sizeof(info.name));
++	strscpy(info.name, tc->name, sizeof(info.name));
+ 	info.numchannels = tc->numchannels;
+ 	info.srcfmts = tc->srcfmts;
+ 	info.dstfmts = tc->dstfmts;
+diff --git a/drivers/dahdi/xpp/card_global.c b/drivers/dahdi/xpp/card_global.c
+index 9e679bbc..064edbb3 100644
+--- a/drivers/dahdi/xpp/card_global.c
++++ b/drivers/dahdi/xpp/card_global.c
+@@ -342,7 +342,7 @@ int parse_chip_command(xpd_t *xpd, char *cmdline)
+ 		XBUS_DBG(GENERAL, xbus, "Dropped packet. Disconnected.\n");
+ 		return -EBUSY;
+ 	}
+-	strlcpy(buf, cmdline, MAX_PROC_WRITE);	/* Save a copy */
++	strscpy(buf, cmdline, MAX_PROC_WRITE);	/* Save a copy */
+ 	if (buf[0] == '#' || buf[0] == ';')
+ 		XPD_DBG(REGS, xpd, "Note: '%s'\n", buf);
+ 	if ((p = strchr(buf, '#')) != NULL)	/* Truncate comments */