[dahdi-commits] sruffell: linux/trunk r9365 - /linux/trunk/drivers/dahdi/dahdi-base.c

SVN commits to the DAHDI project dahdi-commits at lists.digium.com
Mon Sep 20 15:33:23 CDT 2010


Author: sruffell
Date: Mon Sep 20 15:33:19 2010
New Revision: 9365

URL: http://svnview.digium.com/svn/dahdi?view=rev&rev=9365
Log:
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 <sruffell at digium.com>

Modified:
    linux/trunk/drivers/dahdi/dahdi-base.c

Modified: linux/trunk/drivers/dahdi/dahdi-base.c
URL: http://svnview.digium.com/svn/dahdi/linux/trunk/drivers/dahdi/dahdi-base.c?view=diff&rev=9365&r1=9364&r2=9365
==============================================================================
--- linux/trunk/drivers/dahdi/dahdi-base.c (original)
+++ linux/trunk/drivers/dahdi/dahdi-base.c Mon Sep 20 15:33:19 2010
@@ -4410,15 +4410,39 @@
 	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;
-
-		if (copy_from_user(&ind, user_data, sizeof(ind)))
+		void *old;
+		static bool warned;
+
+		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:
 	{




More information about the dahdi-commits mailing list