[PATCH] drivers/ipsec_mb: fix aesni_mb set session ID
Ciara Power
ciara.power at intel.com
Fri Jun 30 10:34:41 CEST 2023
In the case of multiprocess, when the same session is being used for both
primary and secondary processes, the session ID will be the same.
However the pointers are not available to the secondary process, so in this
case when the session was created by a different process ID, then copy
the template session to the job again.
Fixes: 0fb4834e00af ("crypto/ipsec_mb: set and use session ID")
Cc: pablo.de.lara.guarch at intel.com
Signed-off-by: Ciara Power <ciara.power at intel.com>
---
drivers/crypto/ipsec_mb/pmd_aesni_mb.c | 8 +++++++-
drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h | 2 ++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
index f4322d9af4..555b59621d 100644
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb.c
@@ -2,6 +2,8 @@
* Copyright(c) 2015-2021 Intel Corporation
*/
+#include <unistd.h>
+
#include "pmd_aesni_mb_priv.h"
struct aesni_mb_op_buf_data {
@@ -847,6 +849,7 @@ aesni_mb_session_configure(IMB_MGR *mb_mgr,
#if IMB_VERSION(1, 3, 0) < IMB_VERSION_NUM
sess->session_id = imb_set_session(mb_mgr, &sess->template_job);
+ sess->pid = getpid();
#endif
return 0;
@@ -1482,7 +1485,10 @@ set_mb_job_params(IMB_JOB *job, struct ipsec_mb_qp *qp,
session->template_job.cipher_mode;
#if IMB_VERSION(1, 3, 0) < IMB_VERSION_NUM
- if (job->session_id != session->session_id)
+ if (session->pid != getpid()) {
+ memcpy(job, &session->template_job, sizeof(IMB_JOB));
+ imb_set_session(mb_mgr, job);
+ } else if (job->session_id != session->session_id)
#endif
memcpy(job, &session->template_job, sizeof(IMB_JOB));
diff --git a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h
index 4ffbe4b282..3f6cf30c39 100644
--- a/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h
+++ b/drivers/crypto/ipsec_mb/pmd_aesni_mb_priv.h
@@ -854,6 +854,8 @@ struct aesni_mb_session {
/*< Template job structure */
uint32_t session_id;
/*< IPSec MB session ID */
+ pid_t pid;
+ /*< Process ID that created session */
struct {
uint16_t offset;
} iv;
--
2.25.1
More information about the dev
mailing list