Skip to content

Commit 156c939

Browse files
committed
Merge branch 'mlx5-ipsec-fixes'
Leon Romanovsky says: ==================== Fixes to mlx5 IPsec implementation This small patchset includes various fixes and one refactoring patch which I collected for the features sent in this cycle, with one exception - first patch. First patch fixes code which was introduced in previous cycle, however I was able to trigger FW error only in custom debug code, so don't see a need to send it to net-rc. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
2 parents 3522675 + 45fd01f commit 156c939

File tree

3 files changed

+35
-36
lines changed

3 files changed

+35
-36
lines changed

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.c

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,8 @@ static void mlx5e_ipsec_init_macs(struct mlx5e_ipsec_sa_entry *sa_entry,
252252
struct net_device *netdev;
253253
struct neighbour *n;
254254
u8 addr[ETH_ALEN];
255+
const void *pkey;
256+
u8 *dst, *src;
255257

256258
if (attrs->mode != XFRM_MODE_TUNNEL ||
257259
attrs->type != XFRM_DEV_OFFLOAD_PACKET)
@@ -262,36 +264,31 @@ static void mlx5e_ipsec_init_macs(struct mlx5e_ipsec_sa_entry *sa_entry,
262264
mlx5_query_mac_address(mdev, addr);
263265
switch (attrs->dir) {
264266
case XFRM_DEV_OFFLOAD_IN:
265-
ether_addr_copy(attrs->dmac, addr);
266-
n = neigh_lookup(&arp_tbl, &attrs->saddr.a4, netdev);
267-
if (!n) {
268-
n = neigh_create(&arp_tbl, &attrs->saddr.a4, netdev);
269-
if (IS_ERR(n))
270-
return;
271-
neigh_event_send(n, NULL);
272-
attrs->drop = true;
273-
break;
274-
}
275-
neigh_ha_snapshot(addr, n, netdev);
276-
ether_addr_copy(attrs->smac, addr);
267+
src = attrs->dmac;
268+
dst = attrs->smac;
269+
pkey = &attrs->saddr.a4;
277270
break;
278271
case XFRM_DEV_OFFLOAD_OUT:
279-
ether_addr_copy(attrs->smac, addr);
280-
n = neigh_lookup(&arp_tbl, &attrs->daddr.a4, netdev);
281-
if (!n) {
282-
n = neigh_create(&arp_tbl, &attrs->daddr.a4, netdev);
283-
if (IS_ERR(n))
284-
return;
285-
neigh_event_send(n, NULL);
286-
attrs->drop = true;
287-
break;
288-
}
289-
neigh_ha_snapshot(addr, n, netdev);
290-
ether_addr_copy(attrs->dmac, addr);
272+
src = attrs->smac;
273+
dst = attrs->dmac;
274+
pkey = &attrs->daddr.a4;
291275
break;
292276
default:
293277
return;
294278
}
279+
280+
ether_addr_copy(src, addr);
281+
n = neigh_lookup(&arp_tbl, pkey, netdev);
282+
if (!n) {
283+
n = neigh_create(&arp_tbl, pkey, netdev);
284+
if (IS_ERR(n))
285+
return;
286+
neigh_event_send(n, NULL);
287+
attrs->drop = true;
288+
} else {
289+
neigh_ha_snapshot(addr, n, netdev);
290+
ether_addr_copy(dst, addr);
291+
}
295292
neigh_release(n);
296293
}
297294

@@ -708,11 +705,12 @@ static int mlx5e_xfrm_add_state(struct xfrm_state *x,
708705
release_dwork:
709706
kfree(sa_entry->dwork);
710707
release_work:
711-
kfree(sa_entry->work->data);
708+
if (sa_entry->work)
709+
kfree(sa_entry->work->data);
712710
kfree(sa_entry->work);
713711
err_xfrm:
714712
kfree(sa_entry);
715-
NL_SET_ERR_MSG_MOD(extack, "Device failed to offload this policy");
713+
NL_SET_ERR_MSG_WEAK_MOD(extack, "Device failed to offload this state");
716714
return err;
717715
}
718716

@@ -752,7 +750,8 @@ static void mlx5e_xfrm_free_state(struct xfrm_state *x)
752750
mlx5e_accel_ipsec_fs_del_rule(sa_entry);
753751
mlx5_ipsec_free_sa_ctx(sa_entry);
754752
kfree(sa_entry->dwork);
755-
kfree(sa_entry->work->data);
753+
if (sa_entry->work)
754+
kfree(sa_entry->work->data);
756755
kfree(sa_entry->work);
757756
sa_entry_free:
758757
kfree(sa_entry);

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ static inline bool addr6_all_zero(__be32 *addr6)
287287
{
288288
static const __be32 zaddr6[4] = {};
289289

290-
return !memcmp(addr6, zaddr6, sizeof(*zaddr6));
290+
return !memcmp(addr6, zaddr6, sizeof(zaddr6));
291291
}
292292
#else
293293
static inline void mlx5e_ipsec_init(struct mlx5e_priv *priv)

drivers/net/ethernet/mellanox/mlx5/core/en_accel/ipsec_fs.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,16 +1252,16 @@ static int tx_add_policy(struct mlx5e_ipsec_pol_entry *pol_entry)
12521252
setup_fte_no_frags(spec);
12531253
setup_fte_upper_proto_match(spec, &attrs->upspec);
12541254

1255-
if (attrs->reqid) {
1255+
switch (attrs->action) {
1256+
case XFRM_POLICY_ALLOW:
1257+
flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
1258+
if (!attrs->reqid)
1259+
break;
1260+
12561261
err = setup_modify_header(mdev, attrs->reqid,
12571262
XFRM_DEV_OFFLOAD_OUT, &flow_act);
12581263
if (err)
12591264
goto err_mod_header;
1260-
}
1261-
1262-
switch (attrs->action) {
1263-
case XFRM_POLICY_ALLOW:
1264-
flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
12651265
break;
12661266
case XFRM_POLICY_BLOCK:
12671267
flow_act.action |= MLX5_FLOW_CONTEXT_ACTION_DROP |
@@ -1273,7 +1273,7 @@ static int tx_add_policy(struct mlx5e_ipsec_pol_entry *pol_entry)
12731273
default:
12741274
WARN_ON(true);
12751275
err = -EINVAL;
1276-
goto err_action;
1276+
goto err_mod_header;
12771277
}
12781278

12791279
flow_act.flags |= FLOW_ACT_NO_APPEND;
@@ -1293,7 +1293,7 @@ static int tx_add_policy(struct mlx5e_ipsec_pol_entry *pol_entry)
12931293
return 0;
12941294

12951295
err_action:
1296-
if (attrs->reqid)
1296+
if (flow_act.modify_hdr)
12971297
mlx5_modify_header_dealloc(mdev, flow_act.modify_hdr);
12981298
err_mod_header:
12991299
kvfree(spec);

0 commit comments

Comments
 (0)