| 334 | } |
| 335 | |
| 336 | static void |
| 337 | vhost_crypto_create_sess(struct vhost_crypto *vcrypto, |
| 338 | VhostUserCryptoSessionParam *sess_param) |
| 339 | { |
| 340 | struct rte_crypto_sym_xform xform1 = {0}, xform2 = {0}; |
| 341 | struct rte_cryptodev_sym_session *session; |
| 342 | int ret; |
| 343 | |
| 344 | switch (sess_param->op_type) { |
| 345 | case VIRTIO_CRYPTO_SYM_OP_NONE: |
| 346 | case VIRTIO_CRYPTO_SYM_OP_CIPHER: |
| 347 | ret = transform_cipher_param(&xform1, sess_param); |
| 348 | if (unlikely(ret)) { |
| 349 | VC_LOG_ERR("Error transform session msg (%i)", ret); |
| 350 | sess_param->session_id = ret; |
| 351 | return; |
| 352 | } |
| 353 | break; |
| 354 | case VIRTIO_CRYPTO_SYM_OP_ALGORITHM_CHAINING: |
| 355 | if (unlikely(sess_param->hash_mode != |
| 356 | VIRTIO_CRYPTO_SYM_HASH_MODE_AUTH)) { |
| 357 | sess_param->session_id = -VIRTIO_CRYPTO_NOTSUPP; |
| 358 | VC_LOG_ERR("Error transform session message (%i)", |
| 359 | -VIRTIO_CRYPTO_NOTSUPP); |
| 360 | return; |
| 361 | } |
| 362 | |
| 363 | xform1.next = &xform2; |
| 364 | |
| 365 | ret = transform_chain_param(&xform1, sess_param); |
| 366 | if (unlikely(ret)) { |
| 367 | VC_LOG_ERR("Error transform session message (%i)", ret); |
| 368 | sess_param->session_id = ret; |
| 369 | return; |
| 370 | } |
| 371 | |
| 372 | break; |
| 373 | default: |
| 374 | VC_LOG_ERR("Algorithm not yet supported"); |
| 375 | sess_param->session_id = -VIRTIO_CRYPTO_NOTSUPP; |
| 376 | return; |
| 377 | } |
| 378 | |
| 379 | session = rte_cryptodev_sym_session_create(vcrypto->cid, &xform1, |
| 380 | vcrypto->sess_pool); |
| 381 | if (!session) { |
| 382 | VC_LOG_ERR("Failed to create session"); |
| 383 | sess_param->session_id = -VIRTIO_CRYPTO_ERR; |
| 384 | return; |
| 385 | } |
| 386 | |
| 387 | /* insert hash to map */ |
| 388 | if (rte_hash_add_key_data(vcrypto->session_map, |
| 389 | &vcrypto->last_session_id, session) < 0) { |
| 390 | VC_LOG_ERR("Failed to insert session to hash table"); |
| 391 | |
| 392 | if (rte_cryptodev_sym_session_free(vcrypto->cid, session) < 0) |
| 393 | VC_LOG_ERR("Failed to free session"); |
no test coverage detected