diff options
author | Ganesh Goudar <ganeshgr@chelsio.com> | 2018-08-10 08:57:41 -0400 |
---|---|---|
committer | Herbert Xu <herbert@gondor.apana.org.au> | 2018-08-25 07:50:41 -0400 |
commit | 65b2c12dcdb883fc015c0ec65d6c2f857e0456ac (patch) | |
tree | f55627a7acd67cc611d70e6e55daa6faa610861e | |
parent | 7fa885e2a22fd0f91a2c23d9275f5021f618ff5a (diff) |
crypto: chtls - fix null dereference chtls_free_uld()
call chtls_free_uld() only for the initialized cdev,
this fixes NULL dereference in chtls_free_uld()
Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: Atul Gupta <atul.gupta@chelsio.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r-- | drivers/crypto/chelsio/chtls/chtls.h | 5 | ||||
-rw-r--r-- | drivers/crypto/chelsio/chtls/chtls_main.c | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/drivers/crypto/chelsio/chtls/chtls.h b/drivers/crypto/chelsio/chtls/chtls.h index a53a0e6ba024..7725b6ee14ef 100644 --- a/drivers/crypto/chelsio/chtls/chtls.h +++ b/drivers/crypto/chelsio/chtls/chtls.h | |||
@@ -96,6 +96,10 @@ enum csk_flags { | |||
96 | CSK_CONN_INLINE, /* Connection on HW */ | 96 | CSK_CONN_INLINE, /* Connection on HW */ |
97 | }; | 97 | }; |
98 | 98 | ||
99 | enum chtls_cdev_state { | ||
100 | CHTLS_CDEV_STATE_UP = 1 | ||
101 | }; | ||
102 | |||
99 | struct listen_ctx { | 103 | struct listen_ctx { |
100 | struct sock *lsk; | 104 | struct sock *lsk; |
101 | struct chtls_dev *cdev; | 105 | struct chtls_dev *cdev; |
@@ -146,6 +150,7 @@ struct chtls_dev { | |||
146 | unsigned int send_page_order; | 150 | unsigned int send_page_order; |
147 | int max_host_sndbuf; | 151 | int max_host_sndbuf; |
148 | struct key_map kmap; | 152 | struct key_map kmap; |
153 | unsigned int cdev_state; | ||
149 | }; | 154 | }; |
150 | 155 | ||
151 | struct chtls_hws { | 156 | struct chtls_hws { |
diff --git a/drivers/crypto/chelsio/chtls/chtls_main.c b/drivers/crypto/chelsio/chtls/chtls_main.c index 9b07f9165658..f59b044ebd25 100644 --- a/drivers/crypto/chelsio/chtls/chtls_main.c +++ b/drivers/crypto/chelsio/chtls/chtls_main.c | |||
@@ -160,6 +160,7 @@ static void chtls_register_dev(struct chtls_dev *cdev) | |||
160 | tlsdev->hash = chtls_create_hash; | 160 | tlsdev->hash = chtls_create_hash; |
161 | tlsdev->unhash = chtls_destroy_hash; | 161 | tlsdev->unhash = chtls_destroy_hash; |
162 | tls_register_device(&cdev->tlsdev); | 162 | tls_register_device(&cdev->tlsdev); |
163 | cdev->cdev_state = CHTLS_CDEV_STATE_UP; | ||
163 | } | 164 | } |
164 | 165 | ||
165 | static void chtls_unregister_dev(struct chtls_dev *cdev) | 166 | static void chtls_unregister_dev(struct chtls_dev *cdev) |
@@ -281,8 +282,10 @@ static void chtls_free_all_uld(void) | |||
281 | struct chtls_dev *cdev, *tmp; | 282 | struct chtls_dev *cdev, *tmp; |
282 | 283 | ||
283 | mutex_lock(&cdev_mutex); | 284 | mutex_lock(&cdev_mutex); |
284 | list_for_each_entry_safe(cdev, tmp, &cdev_list, list) | 285 | list_for_each_entry_safe(cdev, tmp, &cdev_list, list) { |
285 | chtls_free_uld(cdev); | 286 | if (cdev->cdev_state == CHTLS_CDEV_STATE_UP) |
287 | chtls_free_uld(cdev); | ||
288 | } | ||
286 | mutex_unlock(&cdev_mutex); | 289 | mutex_unlock(&cdev_mutex); |
287 | } | 290 | } |
288 | 291 | ||