drivers/ipsec_mb: fix aesni_mb set session ID

Message ID 20230630083441.429989-1-ciara.power@intel.com (mailing list archive)
State Accepted, archived
Delegated to: akhil goyal
Headers
Series drivers/ipsec_mb: fix aesni_mb set session ID |

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/loongarch-compilation success Compilation OK
ci/loongarch-unit-testing success Unit Testing PASS
ci/Intel-compilation success Compilation OK
ci/intel-Testing success Testing PASS
ci/github-robot: build success github build: passed
ci/intel-Functional success Functional PASS
ci/iol-abi-testing success Testing PASS
ci/iol-aarch-unit-testing success Testing PASS
ci/iol-unit-testing success Testing PASS
ci/iol-x86_64-compile-testing success Testing PASS
ci/iol-testing success Testing PASS
ci/iol-x86_64-unit-testing success Testing PASS
ci/iol-intel-Performance success Performance Testing PASS
ci/iol-broadcom-Functional success Functional Testing PASS
ci/iol-intel-Functional success Functional Testing PASS
ci/iol-broadcom-Performance success Performance Testing PASS
ci/iol-aarch64-compile-testing success Testing PASS

Commit Message

Power, Ciara June 30, 2023, 8:34 a.m. UTC
  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@intel.com

Signed-off-by: Ciara Power <ciara.power@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(-)
  

Comments

Ji, Kai July 4, 2023, 10:30 p.m. UTC | #1
Acked-by: Kai Ji <kai.ji@intel.com<mailto:kai.ji@intel.com>>
  
De Lara Guarch, Pablo July 5, 2023, 7:32 a.m. UTC | #2
> -----Original Message-----
> From: Power, Ciara <ciara.power@intel.com>
> Sent: Friday, June 30, 2023 9:35 AM
> To: dev@dpdk.org
> Cc: Ji, Kai <kai.ji@intel.com>; Power, Ciara <ciara.power@intel.com>; De Lara
> Guarch, Pablo <pablo.de.lara.guarch@intel.com>
> Subject: [PATCH] drivers/ipsec_mb: fix aesni_mb set session ID
> 
> 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@intel.com
> 
> Signed-off-by: Ciara Power <ciara.power@intel.com>

Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
  
Akhil Goyal July 5, 2023, 1:29 p.m. UTC | #3
> > Subject: [PATCH] drivers/ipsec_mb: fix aesni_mb set session ID
> >
> > 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@intel.com
> >
> > Signed-off-by: Ciara Power <ciara.power@intel.com>
> 
> Acked-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>

Applied to dpdk-next-crypto
Thanks.
  

Patch

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;