tls: return -EFAULT if copy_to_user() fails
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 23 Jun 2017 10:15:44 +0000 (13:15 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 23 Jun 2017 18:19:27 +0000 (14:19 -0400)
The copy_to_user() function returns the number of bytes remaining but we
want to return -EFAULT here.

Fixes: 3c4d7559159b ("tls: kernel TLS support")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Dave Watson <davejwatson@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/tls/tls_main.c

index 2ebc328bda9600ff60e5edd4cea9e6dd7e86cf5a..a03130a47b852cff3fddf174d9cf8ce921e3fe86 100644 (file)
@@ -273,7 +273,8 @@ static int do_tls_getsockopt_tx(struct sock *sk, char __user *optval,
        }
 
        if (len == sizeof(crypto_info)) {
-               rc = copy_to_user(optval, crypto_info, sizeof(*crypto_info));
+               if (copy_to_user(optval, crypto_info, sizeof(*crypto_info)))
+                       rc = -EFAULT;
                goto out;
        }
 
@@ -293,9 +294,10 @@ static int do_tls_getsockopt_tx(struct sock *sk, char __user *optval,
                memcpy(crypto_info_aes_gcm_128->iv, ctx->iv,
                       TLS_CIPHER_AES_GCM_128_IV_SIZE);
                release_sock(sk);
-               rc = copy_to_user(optval,
-                                 crypto_info_aes_gcm_128,
-                                 sizeof(*crypto_info_aes_gcm_128));
+               if (copy_to_user(optval,
+                                crypto_info_aes_gcm_128,
+                                sizeof(*crypto_info_aes_gcm_128)))
+                       rc = -EFAULT;
                break;
        }
        default: