diff options
| author | Radim Krčmář <rkrcmar@redhat.com> | 2018-02-01 15:04:17 +0100 | 
|---|---|---|
| committer | Radim Krčmář <rkrcmar@redhat.com> | 2018-02-01 15:04:17 +0100 | 
| commit | 7bf14c28ee776be567855bd39ed8ff795ea19f55 (patch) | |
| tree | 6113748c673e85fccc2c56c050697789c00c6bc2 /net/tls/tls_sw.c | |
| parent | 87cedc6be55954c6efd6eca2e694132513f65a2a (diff) | |
| parent | 5fa4ec9cb2e6679e2f828033726f758ea314b9c5 (diff) | |
Merge branch 'x86/hyperv' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Topic branch for stable KVM clockource under Hyper-V.
Thanks to Christoffer Dall for resolving the ARM conflict.
Diffstat (limited to 'net/tls/tls_sw.c')
| -rw-r--r-- | net/tls/tls_sw.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/net/tls/tls_sw.c b/net/tls/tls_sw.c index 73d19210dd49..0a9b72fbd761 100644 --- a/net/tls/tls_sw.c +++ b/net/tls/tls_sw.c @@ -391,7 +391,7 @@ int tls_sw_sendmsg(struct sock *sk, struct msghdr *msg, size_t size)  	while (msg_data_left(msg)) {  		if (sk->sk_err) { -			ret = sk->sk_err; +			ret = -sk->sk_err;  			goto send_end;  		} @@ -544,7 +544,7 @@ int tls_sw_sendpage(struct sock *sk, struct page *page,  		size_t copy, required_size;  		if (sk->sk_err) { -			ret = sk->sk_err; +			ret = -sk->sk_err;  			goto sendpage_end;  		} @@ -577,6 +577,8 @@ alloc_payload:  		get_page(page);  		sg = ctx->sg_plaintext_data + ctx->sg_plaintext_num_elem;  		sg_set_page(sg, page, copy, offset); +		sg_unmark_end(sg); +  		ctx->sg_plaintext_num_elem++;  		sk_mem_charge(sk, copy); @@ -681,18 +683,17 @@ int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx)  	}  	default:  		rc = -EINVAL; -		goto out; +		goto free_priv;  	}  	ctx->prepend_size = TLS_HEADER_SIZE + nonce_size;  	ctx->tag_size = tag_size;  	ctx->overhead_size = ctx->prepend_size + ctx->tag_size;  	ctx->iv_size = iv_size; -	ctx->iv = kmalloc(iv_size + TLS_CIPHER_AES_GCM_128_SALT_SIZE, -			  GFP_KERNEL); +	ctx->iv = kmalloc(iv_size + TLS_CIPHER_AES_GCM_128_SALT_SIZE, GFP_KERNEL);  	if (!ctx->iv) {  		rc = -ENOMEM; -		goto out; +		goto free_priv;  	}  	memcpy(ctx->iv, gcm_128_info->salt, TLS_CIPHER_AES_GCM_128_SALT_SIZE);  	memcpy(ctx->iv + TLS_CIPHER_AES_GCM_128_SALT_SIZE, iv, iv_size); @@ -740,7 +741,7 @@ int tls_set_sw_offload(struct sock *sk, struct tls_context *ctx)  	rc = crypto_aead_setauthsize(sw_ctx->aead_send, ctx->tag_size);  	if (!rc) -		goto out; +		return 0;  free_aead:  	crypto_free_aead(sw_ctx->aead_send); @@ -751,6 +752,9 @@ free_rec_seq:  free_iv:  	kfree(ctx->iv);  	ctx->iv = NULL; +free_priv: +	kfree(ctx->priv_ctx); +	ctx->priv_ctx = NULL;  out:  	return rc;  }  | 
