* Fixes: David Huggins-Daines, <dhd@cepstral.com>
* Fabio Ferrari, <fabio.ferrari@digitro.com.br>
* Artis Kugevics, <artis@mt.lv>
+ * Daniele Bellucci, <bellucda@tiscali.it>
*
* More information about the hardware related to this driver can be found
* at our website: http://www.quicknet.net
/*
* $Log: ixj.c,v $
+ *
+ * Revision 4.8 2003/07/09 19:39:00 Daniele Bellucci
+ * Audit some copy_*_user and minor cleanup.
+ *
* Revision 4.7 2001/08/13 06:19:33 craigs
* Added additional changes from Alan Cox and John Anderson for
* 2.2 to 2.4 cleanup and bounds checking
static IXJ *ixj_alloc(void)
{
int cnt;
- for(cnt=0; cnt<IXJMAX; cnt++)
- {
+ for(cnt=0; cnt<IXJMAX; cnt++) {
if(!ixj[cnt].DSPbase)
- {
return &ixj[cnt];
- }
}
return NULL;
}
break;
case IXJCTL_CIDCW:
if(arg) {
- copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID));
- }
- else {
+ if (copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID))) {
+ retval = -EFAULT;
+ break;
+ }
+ } else {
memset(&j->cid_send, 0, sizeof(PHONE_CID));
}
ixj_write_cidcw(j);
/* Fall through */
case PHONE_RING_START:
if(arg) {
- if(copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID)))
- {
+ if (copy_from_user(&j->cid_send, (char *)arg, sizeof(PHONE_CID))) {
retval = -EFAULT;
break;
}
ixj_write_cid(j);
- }
- else {
+ } else {
memset(&j->cid_send, 0, sizeof(PHONE_CID));
}
ixj_ring_start(j);
case IXJCTL_SET_FILTER_RAW:
if (copy_from_user(&jfr, (char *) arg, sizeof(jfr)))
retval = -EFAULT;
- retval = ixj_init_filter_raw(j, &jfr);
+ else
+ retval = ixj_init_filter_raw(j, &jfr);
break;
case IXJCTL_GET_FILTER_HIST:
if(arg<0||arg>3)
retval = j->filter_hist[arg];
break;
case IXJCTL_INIT_TONE:
- copy_from_user(&ti, (char *) arg, sizeof(ti));
- retval = ixj_init_tone(j, &ti);
+ if (copy_from_user(&ti, (char *) arg, sizeof(ti)))
+ retval = -EFAULT;
+ else
+ retval = ixj_init_tone(j, &ti);
break;
case IXJCTL_TONE_CADENCE:
retval = ixj_build_cadence(j, (IXJ_CADENCE *) arg);
retval = ixj_build_filter_cadence(j, (IXJ_FILTER_CADENCE *) arg);
break;
case IXJCTL_SIGCTL:
- if (copy_from_user(&j->sigdef, (char *)arg, sizeof(IXJ_SIGDEF)))
+ if (copy_from_user(&j->sigdef, (char *)arg, sizeof(IXJ_SIGDEF))) {
retval = -EFAULT;
+ break;
+ }
j->ixj_signals[j->sigdef.event] = j->sigdef.signal;
if(j->sigdef.event < 33) {
raise = 1;
MODULE_AUTHOR("Ed Okerson <eokerson@quicknet.net>");
MODULE_LICENSE("GPL");
-void ixj_exit(void)
+static void __exit ixj_exit(void)
{
cleanup();
}
return probe;
}
-int __init ixj_init(void)
+static int __init ixj_init(void)
{
int cnt = 0;
int probe = 0;