|
@@ -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 */
|