diff options
Diffstat (limited to 'drivers/s390/net/ctcm_sysfs.c')
| -rw-r--r-- | drivers/s390/net/ctcm_sysfs.c | 14 | 
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/s390/net/ctcm_sysfs.c b/drivers/s390/net/ctcm_sysfs.c index 985b5dcbdac..6bcfbbb20f0 100644 --- a/drivers/s390/net/ctcm_sysfs.c +++ b/drivers/s390/net/ctcm_sysfs.c @@ -34,8 +34,9 @@ static ssize_t ctcm_buffer_write(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t count)  {  	struct net_device *ndev; -	int bs1; +	unsigned int bs1;  	struct ctcm_priv *priv = dev_get_drvdata(dev); +	int rc;  	ndev = priv->channel[CTCM_READ]->netdev;  	if (!(priv && priv->channel[CTCM_READ] && ndev)) { @@ -43,7 +44,9 @@ static ssize_t ctcm_buffer_write(struct device *dev,  		return -ENODEV;  	} -	sscanf(buf, "%u", &bs1); +	rc = sscanf(buf, "%u", &bs1); +	if (rc != 1) +		goto einval;  	if (bs1 > CTCM_BUFSIZE_LIMIT)  					goto einval;  	if (bs1 < (576 + LL_HEADER_LENGTH + 2)) @@ -143,13 +146,14 @@ static ssize_t ctcm_proto_show(struct device *dev,  static ssize_t ctcm_proto_store(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t count)  { -	int value; +	int value, rc;  	struct ctcm_priv *priv = dev_get_drvdata(dev);  	if (!priv)  		return -ENODEV; -	sscanf(buf, "%u", &value); -	if (!((value == CTCM_PROTO_S390)  || +	rc = sscanf(buf, "%d", &value); +	if ((rc != 1) || +	    !((value == CTCM_PROTO_S390)  ||  	      (value == CTCM_PROTO_LINUX) ||  	      (value == CTCM_PROTO_MPC) ||  	      (value == CTCM_PROTO_OS390)))  | 
