summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarian Chereji <marian.chereji@freescale.com>2014-05-22 09:22:17 (GMT)
committerJose Rivera <German.Rivera@freescale.com>2014-05-22 19:18:14 (GMT)
commit8dbc55b11cafe0c4e0b3aedd71902b94802dd489 (patch)
tree1c932bff5527de7592a04bdf825fc2e98f7a09b4
parentde68f6b494a95a2ead57dc9c7338a72d8aca00e7 (diff)
downloadlinux-fsl-qoriq-8dbc55b11cafe0c4e0b3aedd71902b94802dd489.tar.xz
dpa_offload: Fix IPSec general stats issue on B4 and T platforms
The IPSec general statistics were displayed incorrectly on B4 and T platforms because in kernel compatibility mode (32bit user space apps combined with 64bit kernel) the DPA_IPSEC_IOC_GET_STATS message processing was not updated with the support for multiple IPSec instances. Signed-off-by: Marian Chereji <marian.chereji@freescale.com> Change-Id: I694324154ee70b9f54bdf941dfe78aa42f77823b Reviewed-on: http://git.am.freescale.net:8181/12781 Reviewed-by: Ioana Tibuleac <ioana.tibuleac@freescale.com> Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com> Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
-rw-r--r--drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
index d3cf32b..c07df76 100644
--- a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
+++ b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c
@@ -1595,20 +1595,35 @@ long wrp_dpa_ipsec_do_compat_ioctl(struct file *filp, unsigned int cmd,
}
case DPA_IPSEC_IOC_GET_STATS: {
- struct dpa_ipsec_stats ipsec_stats;
+ struct ioc_dpa_ipsec_instance_stats prm;
- ret = dpa_ipsec_get_stats(0, &ipsec_stats);
+ if (copy_from_user(&prm,
+ (struct ioc_dpa_ipsec_instance_stats *)args,
+ sizeof(prm))) {
+ log_err("Could not copy from user stats params\n");
+ return -EINVAL;
+ }
+
+ if (prm.instance_id < 0) {
+ log_err("Invalid instance id\n");
+ return -EINVAL;
+ }
+
+ ret = dpa_ipsec_get_stats(prm.instance_id, &prm.stats);
if (ret < 0) {
- log_err("Getting stats failed\n");
+ log_err("Failed to get statistics for instance %d\n",
+ prm.instance_id);
break;
}
- if (copy_to_user((struct dpa_ipsec_stats *)args,
- &ipsec_stats, sizeof(ipsec_stats))) {
+ if (copy_to_user((struct ioc_dpa_ipsec_instance_stats *)args,
+ &prm, sizeof(prm))) {
log_err("Could not copy stats to user\n");
return -EINVAL;
}
break;
+
+
}
case DPA_IPSEC_IOC_SA_MODIFY: {