]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - net/tls/tls_main.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[linux.git] / net / tls / tls_main.c
index 9547cea0ce3b078b4ca79fec7b24232b046b74c6..7e546b8ec0004304d263e6b289317c6a2d70a4a4 100644 (file)
@@ -493,27 +493,32 @@ static int do_tls_setsockopt_conf(struct sock *sk, char __user *optval,
 
        switch (crypto_info->cipher_type) {
        case TLS_CIPHER_AES_GCM_128:
+               optsize = sizeof(struct tls12_crypto_info_aes_gcm_128);
+               break;
        case TLS_CIPHER_AES_GCM_256: {
-               optsize = crypto_info->cipher_type == TLS_CIPHER_AES_GCM_128 ?
-                       sizeof(struct tls12_crypto_info_aes_gcm_128) :
-                       sizeof(struct tls12_crypto_info_aes_gcm_256);
-               if (optlen != optsize) {
-                       rc = -EINVAL;
-                       goto err_crypto_info;
-               }
-               rc = copy_from_user(crypto_info + 1, optval + sizeof(*crypto_info),
-                                   optlen - sizeof(*crypto_info));
-               if (rc) {
-                       rc = -EFAULT;
-                       goto err_crypto_info;
-               }
+               optsize = sizeof(struct tls12_crypto_info_aes_gcm_256);
                break;
        }
+       case TLS_CIPHER_AES_CCM_128:
+               optsize = sizeof(struct tls12_crypto_info_aes_ccm_128);
+               break;
        default:
                rc = -EINVAL;
                goto err_crypto_info;
        }
 
+       if (optlen != optsize) {
+               rc = -EINVAL;
+               goto err_crypto_info;
+       }
+
+       rc = copy_from_user(crypto_info + 1, optval + sizeof(*crypto_info),
+                           optlen - sizeof(*crypto_info));
+       if (rc) {
+               rc = -EFAULT;
+               goto err_crypto_info;
+       }
+
        if (tx) {
 #ifdef CONFIG_TLS_DEVICE
                rc = tls_set_device_offload(sk, ctx);