summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorCamelia Groza <camelia.groza@freescale.com>2015-04-27 08:35:19 (GMT)
committerMadalin-Cristian Bucur <madalin.bucur@freescale.com>2015-04-27 13:56:37 (GMT)
commit5ff3a8aa9d278182ce824b2b4bec3236ca7f0de2 (patch)
tree7590f4a11a5ddae18783b009a1d241d7c5694eea /drivers/net
parentd4dce299e2a6278f5d237e5bf17be232820db138 (diff)
downloadlinux-fsl-qoriq-5ff3a8aa9d278182ce824b2b4bec3236ca7f0de2.tar.xz
dpaa_eth: fix MACsec memory leak
Signed-off-by: Camelia Groza <camelia.groza@freescale.com> Change-Id: I5aafcea3016c2d82d2d2d9a592ffbb5c8574bc56 Reviewed-on: http://git.am.freescale.net:8181/35593 Reviewed-by: Cristian-Constantin Sovaiala <Cristian.Sovaiala@freescale.com> Reviewed-by: Madalin-Cristian Bucur <madalin.bucur@freescale.com> Tested-by: Cristian-Constantin Sovaiala <Cristian.Sovaiala@freescale.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/ethernet/freescale/dpa/dpaa_eth_macsec.c21
1 files changed, 6 insertions, 15 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_macsec.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_macsec.c
index bf83304..86fa3b4 100644
--- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_macsec.c
+++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_macsec.c
@@ -1530,29 +1530,25 @@ static int enable_macsec(struct generic_msg *gen)
void __iomem *mac_dev_base_addr;
uintptr_t macsec_reg_addr;
struct macsec_data *mdata;
- char *if_name;
+ char if_name[IFNAMSIZ];
struct macsec_priv_s *selected_macsec_priv;
- mdata = kmalloc(sizeof(*mdata), GFP_KERNEL);
- memcpy(mdata, &gen->payload.en_macsec, sizeof(*mdata));
+ mdata = &gen->payload.en_macsec;
- if_name = kmalloc((strlen(mdata->if_name) + 1), GFP_KERNEL);
- if (unlikely(!if_name)) {
- pr_err("error when allocating memory\n");
- return -ENOMEM;
+ if (unlikely(mdata->if_name_length > IFNAMSIZ)) {
+ pr_err("interface name too long\n");
+ return -EINVAL;
}
rv = copy_from_user(if_name, mdata->if_name, mdata->if_name_length);
if (unlikely(rv != 0)) {
pr_err("copy_from_user could not copy %i bytes\n", rv);
- kfree(if_name);
return -EFAULT;
}
macsec_id = ifname_to_id(if_name);
if (macsec_id < 0 || macsec_id >= FM_MAX_NUM_OF_MACS) {
pr_err("error on converting to macsec_id\n");
- kfree(if_name);
return -ENXIO;
}
@@ -1560,7 +1556,6 @@ static int enable_macsec(struct generic_msg *gen)
if (selected_macsec_priv->fm_macsec) {
pr_err("macsec has already been configured\n");
- kfree(if_name);
return -EINVAL;
}
@@ -1580,10 +1575,8 @@ static int enable_macsec(struct generic_msg *gen)
macsec_params.non_guest_params.app_h = selected_macsec_priv->mac_dev;
selected_macsec_priv->fm_macsec = fm_macsec_config(&macsec_params);
- if (unlikely(selected_macsec_priv->fm_macsec == NULL)) {
- kfree(if_name);
+ if (unlikely(selected_macsec_priv->fm_macsec == NULL))
return -EINVAL;
- }
if (mdata->config_unknown_sci_treatment) {
rv = fm_macsec_config_unknown_sci_frame_treatment(
@@ -1655,11 +1648,9 @@ static int enable_macsec(struct generic_msg *gen)
if (unlikely(rv < 0))
goto _return_fm_macsec_free;
- kfree(if_name);
return macsec_id;
_return_fm_macsec_free:
- kfree(if_name);
fm_macsec_free(selected_macsec_priv->fm_macsec);
selected_macsec_priv->fm_macsec = NULL;
return rv;