diff options
Diffstat (limited to 'net/batman-adv/icmp_socket.c')
| -rw-r--r-- | net/batman-adv/icmp_socket.c | 14 | 
1 files changed, 4 insertions, 10 deletions
diff --git a/net/batman-adv/icmp_socket.c b/net/batman-adv/icmp_socket.c index ac3520e057c..d9c1e7bb7fb 100644 --- a/net/batman-adv/icmp_socket.c +++ b/net/batman-adv/icmp_socket.c @@ -136,10 +136,9 @@ static ssize_t bat_socket_read(struct file *file, char __user *buf,  	spin_unlock_bh(&socket_client->lock); -	error = __copy_to_user(buf, &socket_packet->icmp_packet, -			       socket_packet->icmp_len); +	packet_len = min(count, socket_packet->icmp_len); +	error = copy_to_user(buf, &socket_packet->icmp_packet, packet_len); -	packet_len = socket_packet->icmp_len;  	kfree(socket_packet);  	if (error) @@ -187,12 +186,7 @@ static ssize_t bat_socket_write(struct file *file, const char __user *buff,  	skb_reserve(skb, sizeof(struct ethhdr));  	icmp_packet = (struct icmp_packet_rr *)skb_put(skb, packet_len); -	if (!access_ok(VERIFY_READ, buff, packet_len)) { -		len = -EFAULT; -		goto free_skb; -	} - -	if (__copy_from_user(icmp_packet, buff, packet_len)) { +	if (copy_from_user(icmp_packet, buff, packet_len)) {  		len = -EFAULT;  		goto free_skb;  	} @@ -217,7 +211,7 @@ static ssize_t bat_socket_write(struct file *file, const char __user *buff,  	if (icmp_packet->version != COMPAT_VERSION) {  		icmp_packet->msg_type = PARAMETER_PROBLEM; -		icmp_packet->ttl = COMPAT_VERSION; +		icmp_packet->version = COMPAT_VERSION;  		bat_socket_add_packet(socket_client, icmp_packet, packet_len);  		goto free_skb;  	}  |