From 3e6b113991e6f67c5a8d8e9b4dc0f55048c99a58 Mon Sep 17 00:00:00 2001 From: Shaun Ruffell Date: Mon, 20 Sep 2010 20:33:19 +0000 Subject: [PATCH] dahdi: Issue warning if DAHDI_INDIRECT ioctl is used. DAHDI_INDIRECT is only used when setting up pciradio channels. dahdi_cfg no longer should need DAHDI_INDIRECT since revision 9352. Review: https://reviewboard.asterisk.org/r/905/ Signed-off-by: Shaun Ruffell git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9365 a0bf4364-ded3-4de4-8d8a-66a801d63aff --- drivers/dahdi/dahdi-base.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/drivers/dahdi/dahdi-base.c b/drivers/dahdi/dahdi-base.c index fd5fcae..1fa06d5 100644 --- a/drivers/dahdi/dahdi-base.c +++ b/drivers/dahdi/dahdi-base.c @@ -4410,15 +4410,39 @@ static int dahdi_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long da void __user * const user_data = (void __user *)data; int rv; struct dahdi_span *s; - switch(cmd) { + struct dahdi_chan *chan; + + switch (cmd) { case DAHDI_INDIRECT: { struct dahdi_indirect_data ind; + void *old; + static bool warned; - if (copy_from_user(&ind, user_data, sizeof(ind))) + if (copy_from_user(&ind, (void __user *)data, sizeof(ind))) return -EFAULT; + VALID_CHANNEL(ind.chan); - return dahdi_chan_ioctl(file, ind.op, (unsigned long) ind.data, ind.chan); + chan = chans[ind.chan]; + if (!chan) + return -EINVAL; + + if (!warned) { + warned = true; + module_printk(KERN_WARNING, "Using deprecated " \ + "DAHDI_INDIRECT. Please update " \ + "dahdi-tools.\n"); + } + + /* Since dahdi_chan_ioctl expects to be called on file handles + * associated with channels, we'll temporarily set the + * private_data pointer on the ctl file handle just for this + * call. */ + old = file->private_data; + file->private_data = chan; + res = dahdi_chan_ioctl(file, ind.op, (unsigned long) ind.data, ind.chan); + file->private_data = old; + return res; } case DAHDI_SPANCONFIG: {