diff options
Diffstat (limited to 'net/atm/common.c')
| -rw-r--r-- | net/atm/common.c | 20 | 
1 files changed, 5 insertions, 15 deletions
diff --git a/net/atm/common.c b/net/atm/common.c index 8575f5d52087..84367b844b14 100644 --- a/net/atm/common.c +++ b/net/atm/common.c @@ -745,7 +745,7 @@ static int check_qos(const struct atm_qos *qos)  }  int vcc_setsockopt(struct socket *sock, int level, int optname, -		   char __user *optval, unsigned int optlen) +		   sockptr_t optval, unsigned int optlen)  {  	struct atm_vcc *vcc;  	unsigned long value; @@ -760,7 +760,7 @@ int vcc_setsockopt(struct socket *sock, int level, int optname,  	{  		struct atm_qos qos; -		if (copy_from_user(&qos, optval, sizeof(qos))) +		if (copy_from_sockptr(&qos, optval, sizeof(qos)))  			return -EFAULT;  		error = check_qos(&qos);  		if (error) @@ -774,7 +774,7 @@ int vcc_setsockopt(struct socket *sock, int level, int optname,  		return 0;  	}  	case SO_SETCLP: -		if (get_user(value, (unsigned long __user *)optval)) +		if (copy_from_sockptr(&value, optval, sizeof(value)))  			return -EFAULT;  		if (value)  			vcc->atm_options |= ATM_ATMOPT_CLP; @@ -782,13 +782,8 @@ int vcc_setsockopt(struct socket *sock, int level, int optname,  			vcc->atm_options &= ~ATM_ATMOPT_CLP;  		return 0;  	default: -		if (level == SOL_SOCKET) -			return -EINVAL; -		break; -	} -	if (!vcc->dev || !vcc->dev->ops->setsockopt)  		return -EINVAL; -	return vcc->dev->ops->setsockopt(vcc, level, optname, optval, optlen); +	}  }  int vcc_getsockopt(struct socket *sock, int level, int optname, @@ -826,13 +821,8 @@ int vcc_getsockopt(struct socket *sock, int level, int optname,  		return copy_to_user(optval, &pvc, sizeof(pvc)) ? -EFAULT : 0;  	}  	default: -		if (level == SOL_SOCKET) -			return -EINVAL; -		break; -	} -	if (!vcc->dev || !vcc->dev->ops->getsockopt)  		return -EINVAL; -	return vcc->dev->ops->getsockopt(vcc, level, optname, optval, len); +	}  }  int register_atmdevice_notifier(struct notifier_block *nb)  | 
