kernel-janitors.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks
@ 2020-09-28 17:41 Dan Carpenter
  2020-09-28 17:42 ` [PATCH 2/2 net-next] net/mlx5e: TC: Fix potential Oops in mlx5e_tc_unoffload_from_slow_path() Dan Carpenter
  2020-09-28 18:31 ` [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Ariel Levkovich
  0 siblings, 2 replies; 7+ messages in thread
From: Dan Carpenter @ 2020-09-28 17:41 UTC (permalink / raw)
  To: Saeed Mahameed
  Cc: Leon Romanovsky, David S. Miller, Jakub Kicinski, Roi Dayan,
	Ariel Levkovich, netdev, linux-rdma, kernel-janitors

The mlx5_tc_ct_init() function doesn't return error pointers it returns
NULL.  Also we need to set the error codes on this path.

Fixes: aedd133d17bc ("net/mlx5e: Support CT offload for tc nic flows")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 104b1c339de0..438fbcf478d1 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -5224,8 +5224,10 @@ int mlx5e_tc_nic_init(struct mlx5e_priv *priv)
 
 	tc->ct = mlx5_tc_ct_init(priv, tc->chains, &priv->fs.tc.mod_hdr,
 				 MLX5_FLOW_NAMESPACE_KERNEL);
-	if (IS_ERR(tc->ct))
+	if (!tc->ct) {
+		err = -ENOMEM;
 		goto err_ct;
+	}
 
 	tc->netdevice_nb.notifier_call = mlx5e_tc_netdev_event;
 	err = register_netdevice_notifier_dev_net(priv->netdev,
@@ -5300,8 +5300,10 @@ int mlx5e_tc_esw_init(struct rhashtable *tc_ht)
 					       esw_chains(esw),
 					       &esw->offloads.mod_hdr,
 					       MLX5_FLOW_NAMESPACE_FDB);
-	if (IS_ERR(uplink_priv->ct_priv))
+	if (!uplink_priv->ct_priv) {
+		err = -ENOMEM;
 		goto err_ct;
+	}
 
 	mapping = mapping_create(sizeof(struct tunnel_match_key),
 				 TUNNEL_INFO_BITS_MASK, true);
-- 
2.28.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2 net-next] net/mlx5e: TC: Fix potential Oops in mlx5e_tc_unoffload_from_slow_path()
  2020-09-28 17:41 [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Dan Carpenter
@ 2020-09-28 17:42 ` Dan Carpenter
  2020-09-28 18:31 ` [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Ariel Levkovich
  1 sibling, 0 replies; 7+ messages in thread
From: Dan Carpenter @ 2020-09-28 17:42 UTC (permalink / raw)
  To: Saeed Mahameed
  Cc: Leon Romanovsky, David S. Miller, Jakub Kicinski, Vlad Buslov,
	Ariel Levkovich, Roi Dayan, netdev, linux-rdma, kernel-janitors

If "slow_attr" is NULL then this function will Oops.

Fixes: c620b772152b ("net/mlx5: Refactor tc flow attributes structure")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 438fbcf478d1..854153d02778 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -1238,8 +1238,10 @@ mlx5e_tc_unoffload_from_slow_path(struct mlx5_eswitch *esw,
 	struct mlx5_flow_attr *slow_attr;
 
 	slow_attr = mlx5_alloc_flow_attr(MLX5_FLOW_NAMESPACE_FDB);
-	if (!slow_attr)
+	if (!slow_attr) {
 		mlx5_core_warn(flow->priv->mdev, "Unable to unoffload slow path rule\n");
+		return;
+	}
 
 	memcpy(slow_attr, flow->attr, ESW_FLOW_ATTR_SZ);
 	slow_attr->action = MLX5_FLOW_CONTEXT_ACTION_FWD_DEST;
-- 
2.28.0

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks
  2020-09-28 17:41 [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Dan Carpenter
  2020-09-28 17:42 ` [PATCH 2/2 net-next] net/mlx5e: TC: Fix potential Oops in mlx5e_tc_unoffload_from_slow_path() Dan Carpenter
@ 2020-09-28 18:31 ` Ariel Levkovich
  2020-09-28 18:51   ` Dan Carpenter
  2021-02-15  8:30   ` Dan Carpenter
  1 sibling, 2 replies; 7+ messages in thread
From: Ariel Levkovich @ 2020-09-28 18:31 UTC (permalink / raw)
  To: Dan Carpenter
  Cc: Saeed Mahameed, Leon Romanovsky, David S. Miller, Jakub Kicinski,
	Roi Dayan, Ariel Levkovich, netdev, linux-rdma, kernel-janitors

T24gU2VwIDI4LCAyMDIwLCBhdCAxMzo0MiwgRGFuIENhcnBlbnRlciA8ZGFuLmNhcnBlbnRlckBv
cmFjbGUuY29tPiB3cm90ZToNCj4gDQo+IO+7v1RoZSBtbHg1X3RjX2N0X2luaXQoKSBmdW5jdGlv
biBkb2Vzbid0IHJldHVybiBlcnJvciBwb2ludGVycyBpdCByZXR1cm5zDQo+IE5VTEwuICBBbHNv
IHdlIG5lZWQgdG8gc2V0IHRoZSBlcnJvciBjb2RlcyBvbiB0aGlzIHBhdGguDQo+IA0KPiBGaXhl
czogYWVkZDEzM2QxN2JjICgibmV0L21seDVlOiBTdXBwb3J0IENUIG9mZmxvYWQgZm9yIHRjIG5p
YyBmbG93cyIpDQo+IFNpZ25lZC1vZmYtYnk6IERhbiBDYXJwZW50ZXIgPGRhbi5jYXJwZW50ZXJA
b3JhY2xlLmNvbT4NCj4gLS0tDQo+IGRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUv
Y29yZS9lbl90Yy5jIHwgOCArKysrKystLQ0KPiAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25z
KCspLCAyIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVy
bmV0L21lbGxhbm94L21seDUvY29yZS9lbl90Yy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVs
bGFub3gvbWx4NS9jb3JlL2VuX3RjLmMNCj4gaW5kZXggMTA0YjFjMzM5ZGUwLi40MzhmYmNmNDc4
ZDEgMTAwNjQ0DQo+IC0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29y
ZS9lbl90Yy5jDQo+ICsrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29y
ZS9lbl90Yy5jDQo+IEBAIC01MjI0LDggKzUyMjQsMTAgQEAgaW50IG1seDVlX3RjX25pY19pbml0
KHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2KQ0KPiANCj4gICAgdGMtPmN0ID0gbWx4NV90Y19jdF9p
bml0KHByaXYsIHRjLT5jaGFpbnMsICZwcml2LT5mcy50Yy5tb2RfaGRyLA0KPiAgICAgICAgICAg
ICAgICAgTUxYNV9GTE9XX05BTUVTUEFDRV9LRVJORUwpOw0KPiAtICAgIGlmIChJU19FUlIodGMt
PmN0KSkNCj4gKyAgICBpZiAoIXRjLT5jdCkgew0KPiArICAgICAgICBlcnIgPSAtRU5PTUVNOw0K
PiAgICAgICAgZ290byBlcnJfY3Q7DQo+ICsgICAgfQ0KDQpIaSBEYW4sDQpUaGF0IHdhcyBpbXBs
ZW1lbnQgbGlrZSB0aGF0IG9uIHB1cnBvc2UuIElmIG1seDVfdGNfaW5pdF9jdCByZXR1cm5zIE5V
TEwgaXQgbWVhbnMgdGhlIGRldmljZSBkb2VzbuKAmXQgc3VwcG9ydCBDVCBvZmZsb2FkIHdoaWNo
IGNhbiBoYXBwZW4gd2l0aCBvbGRlciBkZXZpY2VzIG9yIG9sZCBGVyBvbiB0aGUgZGV2aWNlcy4N
Ckhvd2V2ZXIsIGluIHRoaXMgY2FzZSB3ZSB3YW50IHRvIGNvbnRpbnVlIHdpdGggdGhlIHJlc3Qg
b2YgdGhlIFRjIGluaXRpYWxpemF0aW9uIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIHN1cHBvcnQgb3Ro
ZXIgVEMgb2ZmbG9hZHMuIE5vIG5lZWQgdG8gZmFpbCB0aGUgZW50aXJlIFRDIGluaXQgaW4gdGhp
cyBjYXNlLiBPbmx5IGlmIG1seDVfdGNfaW5pdF9jdCByZXR1cm4gZXJyX3B0ciB0aGF0IG1lYW5z
IHRoZSB0YyBpbml0IGZhaWxlZCBub3QgYmVjYXVzZSBvZiBsYWNrIG9mIHN1cHBvcnQgYnV0IGR1
ZSB0byBhIHJlYWwgZXJyb3IgYW5kIG9ubHkgdGhlbiB3ZSB3YW50IHRvIGZhaWwgdGhlIHJlc3Qg
b2YgdGhlIHRjIGluaXQuDQoNCllvdXIgY2hhbmdlIHdpbGwgYnJlYWsgY29tcGF0aWJpbGl0eSBm
b3IgZGV2aWNlcy9GVyB2ZXJzaW9ucyB0aGF0IGRvbuKAmXQgaGF2ZSBDVCBvZmZsb2FkIHN1cHBv
cnQuDQoNCkFyaWVsDQoNCj4gDQo+ICAgIHRjLT5uZXRkZXZpY2VfbmIubm90aWZpZXJfY2FsbCA9
IG1seDVlX3RjX25ldGRldl9ldmVudDsNCj4gICAgZXJyID0gcmVnaXN0ZXJfbmV0ZGV2aWNlX25v
dGlmaWVyX2Rldl9uZXQocHJpdi0+bmV0ZGV2LA0KPiBAQCAtNTMwMCw4ICs1MzAwLDEwIEBAIGlu
dCBtbHg1ZV90Y19lc3dfaW5pdChzdHJ1Y3Qgcmhhc2h0YWJsZSAqdGNfaHQpDQo+ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXN3X2NoYWlucyhlc3cpLA0KPiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZlc3ctPm9mZmxvYWRzLm1vZF9oZHIsDQo+ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTUxYNV9GTE9XX05BTUVTUEFDRV9GREIpOw0KPiAtICAgIGlmIChJU19FUlIodXBsaW5rX3By
aXYtPmN0X3ByaXYpKQ0KPiArICAgIGlmICghdXBsaW5rX3ByaXYtPmN0X3ByaXYpIHsNCj4gKyAg
ICAgICAgZXJyID0gLUVOT01FTTsNCj4gICAgICAgIGdvdG8gZXJyX2N0Ow0KPiArICAgIH0NCj4g
DQo+ICAgIG1hcHBpbmcgPSBtYXBwaW5nX2NyZWF0ZShzaXplb2Yoc3RydWN0IHR1bm5lbF9tYXRj
aF9rZXkpLA0KPiAgICAgICAgICAgICAgICAgVFVOTkVMX0lORk9fQklUU19NQVNLLCB0cnVlKTsN
Cj4gLS0gDQo+IDIuMjguMA0KPiANCg=

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks
  2020-09-28 18:31 ` [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Ariel Levkovich
@ 2020-09-28 18:51   ` Dan Carpenter
  2021-02-15  8:30   ` Dan Carpenter
  1 sibling, 0 replies; 7+ messages in thread
From: Dan Carpenter @ 2020-09-28 18:51 UTC (permalink / raw)
  To: Ariel Levkovich
  Cc: Saeed Mahameed, Leon Romanovsky, David S. Miller, Jakub Kicinski,
	Roi Dayan, Ariel Levkovich, netdev, linux-rdma, kernel-janitors

On Mon, Sep 28, 2020 at 06:31:04PM +0000, Ariel Levkovich wrote:
> On Sep 28, 2020, at 13:42, Dan Carpenter <dan.carpenter@oracle.com> wrote:
> > 
> > The mlx5_tc_ct_init() function doesn't return error pointers it returns
> > NULL.  Also we need to set the error codes on this path.
> > 
> > Fixes: aedd133d17bc ("net/mlx5e: Support CT offload for tc nic flows")
> > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> > ---
> > drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 8 ++++++--
> > 1 file changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > index 104b1c339de0..438fbcf478d1 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > @@ -5224,8 +5224,10 @@ int mlx5e_tc_nic_init(struct mlx5e_priv *priv)
> > 
> >    tc->ct = mlx5_tc_ct_init(priv, tc->chains, &priv->fs.tc.mod_hdr,
> >                 MLX5_FLOW_NAMESPACE_KERNEL);
> > -    if (IS_ERR(tc->ct))
> > +    if (!tc->ct) {
> > +        err = -ENOMEM;
> >        goto err_ct;
> > +    }
> 
> Hi Dan,
> That was implement like that on purpose. If mlx5_tc_init_ct returns
> NULL it means the device doesn’t support CT offload which can happen
> with older devices or old FW on the devices.
> However, in this case we want to continue with the rest of the Tc
> initialization because we can still support other TC offloads. No
> need to fail the entire TC init in this case. Only if mlx5_tc_init_ct
> return err_ptr that means the tc init failed not because of lack of
> support but due to a real error and only then we want to fail the rest
> of the tc init.
> 
> Your change will break compatibility for devices/FW versions that
> don’t have CT offload support.
> 

I should have looked at this more closely.  It seems the bug is in
mlx5_tc_ct_init().

drivers/net/ethernet/mellanox/mlx5/core/en/tc_ct.c
  1897  struct mlx5_tc_ct_priv *
  1898  mlx5_tc_ct_init(struct mlx5e_priv *priv, struct mlx5_fs_chains *chains,
  1899                  struct mod_hdr_tbl *mod_hdr,
  1900                  enum mlx5_flow_namespace_type ns_type)
  1901  {
  1902          struct mlx5_tc_ct_priv *ct_priv;
  1903          struct mlx5_core_dev *dev;
  1904          const char *msg;
  1905          int err;
  1906  
  1907          dev = priv->mdev;
  1908          err = mlx5_tc_ct_init_check_support(priv, ns_type, &msg);
  1909          if (err) {
  1910                  mlx5_core_warn(dev,
  1911                                 "tc ct offload not supported, %s\n",
  1912                                 msg);
  1913                  goto err_support;

This should probably return NULL and it does.

  1914          }
  1915  
  1916          ct_priv = kzalloc(sizeof(*ct_priv), GFP_KERNEL);
  1917          if (!ct_priv)
  1918                  goto err_alloc;

This should probably return an ERR_PTR(-ENOMEM) but it instead returns
NULL.

  1919  
  1920          ct_priv->zone_mapping = mapping_create(sizeof(u16), 0, true);
  1921          if (IS_ERR(ct_priv->zone_mapping)) {
  1922                  err = PTR_ERR(ct_priv->zone_mapping);
  1923                  goto err_mapping_zone;
                        ^^^^^^^^^^^^^^^^^^^^^^
This sets "err" but it still returns NULL.

Then in the caller if the mlx5_tc_ct_init() call returns an error
pointer, it should set the error code.  (NULL is a special case of
success etc).

Can you fix this and give me a reported-by tag?  I think my new analysis
is correct...

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks
  2020-09-28 18:31 ` [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Ariel Levkovich
  2020-09-28 18:51   ` Dan Carpenter
@ 2021-02-15  8:30   ` Dan Carpenter
  2021-02-16 21:37     ` Saeed Mahameed
  1 sibling, 1 reply; 7+ messages in thread
From: Dan Carpenter @ 2021-02-15  8:30 UTC (permalink / raw)
  To: Ariel Levkovich
  Cc: Saeed Mahameed, Leon Romanovsky, David S. Miller, Jakub Kicinski,
	Roi Dayan, Ariel Levkovich, netdev, linux-rdma, kernel-janitors

On Mon, Sep 28, 2020 at 06:31:04PM +0000, Ariel Levkovich wrote:
> On Sep 28, 2020, at 13:42, Dan Carpenter <dan.carpenter@oracle.com> wrote:
> > 
> > The mlx5_tc_ct_init() function doesn't return error pointers it returns
> > NULL.  Also we need to set the error codes on this path.
> > 
> > Fixes: aedd133d17bc ("net/mlx5e: Support CT offload for tc nic flows")
> > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> > ---
> > drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 8 ++++++--
> > 1 file changed, 6 insertions(+), 2 deletions(-)
> > 
> > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > index 104b1c339de0..438fbcf478d1 100644
> > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > @@ -5224,8 +5224,10 @@ int mlx5e_tc_nic_init(struct mlx5e_priv *priv)
> > 
> >    tc->ct = mlx5_tc_ct_init(priv, tc->chains, &priv->fs.tc.mod_hdr,
> >                 MLX5_FLOW_NAMESPACE_KERNEL);
> > -    if (IS_ERR(tc->ct))
> > +    if (!tc->ct) {
> > +        err = -ENOMEM;
> >        goto err_ct;
> > +    }
> 
> Hi Dan,
> That was implement like that on purpose. If mlx5_tc_init_ct returns NULL it means the device doesn’t support CT offload which can happen with older devices or old FW on the devices.
> However, in this case we want to continue with the rest of the Tc initialization because we can still support other TC offloads. No need to fail the entire TC init in this case. Only if mlx5_tc_init_ct return err_ptr that means the tc init failed not because of lack of support but due to a real error and only then we want to fail the rest of the tc init.
> 
> Your change will break compatibility for devices/FW versions that don’t have CT offload support.
> 

When we have a function like this which is optional then returning NULL
is a special kind of success as you say.  Returning NULL should not
generate a warning message.  At the same time, if the user enables the
option and the code fails because we are low on memory then returning an
error pointer is the correct behavior.  Just because the feature is
optional does not mean we should ignore what the user told us to do.

This code never returns error pointers.  It always returns NULL/success
when an allocation fails.  That triggers the first static checker
warning from last year.  Now Smatch is complaining about a new static
checker warning:

drivers/net/ethernet/mellanox/mlx5/core/en_tc.c:4754
mlx5e_tc_esw_init() warn: missing error code here? 'IS_ERR()' failed. 'err' = '0'

  4708  int mlx5e_tc_esw_init(struct rhashtable *tc_ht)
  4709  {
  4710          const size_t sz_enc_opts = sizeof(struct tunnel_match_enc_opts);
  4711          struct mlx5_rep_uplink_priv *uplink_priv;
  4712          struct mlx5e_rep_priv *rpriv;
  4713          struct mapping_ctx *mapping;
  4714          struct mlx5_eswitch *esw;
  4715          struct mlx5e_priv *priv;
  4716          int err = 0;
  4717  
  4718          uplink_priv = container_of(tc_ht, struct mlx5_rep_uplink_priv, tc_ht);
  4719          rpriv = container_of(uplink_priv, struct mlx5e_rep_priv, uplink_priv);
  4720          priv = netdev_priv(rpriv->netdev);
  4721          esw = priv->mdev->priv.eswitch;
  4722  
  4723          uplink_priv->ct_priv = mlx5_tc_ct_init(netdev_priv(priv->netdev),
  4724                                                 esw_chains(esw),
  4725                                                 &esw->offloads.mod_hdr,
  4726                                                 MLX5_FLOW_NAMESPACE_FDB);
  4727          if (IS_ERR(uplink_priv->ct_priv))
  4728                  goto err_ct;

If mlx5_tc_ct_init() fails, which it should do if kmalloc() fails but
currently it does not, then the error should be propagated all the way
back.  So this code should preserve the error code instead of returning
success.

  4729  
  4730          mapping = mapping_create(sizeof(struct tunnel_match_key),
  4731                                   TUNNEL_INFO_BITS_MASK, true);

regards,
dan carpenter

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks
  2021-02-15  8:30   ` Dan Carpenter
@ 2021-02-16 21:37     ` Saeed Mahameed
  2021-02-16 21:37       ` Saeed Mahameed
  0 siblings, 1 reply; 7+ messages in thread
From: Saeed Mahameed @ 2021-02-16 21:37 UTC (permalink / raw)
  To: dan.carpenter, Ariel Levkovich
  Cc: linux-rdma, kernel-janitors, davem, kuba, netdev, Roi Dayan, leon

T24gTW9uLCAyMDIxLTAyLTE1IGF0IDExOjMwICswMzAwLCBEYW4gQ2FycGVudGVyIHdyb3RlOg0K
PiBPbiBNb24sIFNlcCAyOCwgMjAyMCBhdCAwNjozMTowNFBNICswMDAwLCBBcmllbCBMZXZrb3Zp
Y2ggd3JvdGU6DQo+ID4gT24gU2VwIDI4LCAyMDIwLCBhdCAxMzo0MiwgRGFuIENhcnBlbnRlciA8
ZGFuLmNhcnBlbnRlckBvcmFjbGUuY29tPg0KPiA+IHdyb3RlOg0KPiA+ID4gDQo+ID4gPiDvu79U
aGUgbWx4NV90Y19jdF9pbml0KCkgZnVuY3Rpb24gZG9lc24ndCByZXR1cm4gZXJyb3IgcG9pbnRl
cnMgaXQNCj4gPiA+IHJldHVybnMNCj4gPiA+IE5VTEwuwqAgQWxzbyB3ZSBuZWVkIHRvIHNldCB0
aGUgZXJyb3IgY29kZXMgb24gdGhpcyBwYXRoLg0KPiA+ID4gDQo+ID4gPiBGaXhlczogYWVkZDEz
M2QxN2JjICgibmV0L21seDVlOiBTdXBwb3J0IENUIG9mZmxvYWQgZm9yIHRjIG5pYw0KPiA+ID4g
Zmxvd3MiKQ0KPiA+ID4gU2lnbmVkLW9mZi1ieTogRGFuIENhcnBlbnRlciA8ZGFuLmNhcnBlbnRl
ckBvcmFjbGUuY29tPg0KPiA+ID4gLS0tDQo+ID4gPiBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxs
YW5veC9tbHg1L2NvcmUvZW5fdGMuYyB8IDggKysrKysrLS0NCj4gPiA+IDEgZmlsZSBjaGFuZ2Vk
LCA2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQo+ID4gPiANCj4gPiA+IGRpZmYgLS1n
aXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYw0KPiA+
ID4gYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYw0KPiA+
ID4gaW5kZXggMTA0YjFjMzM5ZGUwLi40MzhmYmNmNDc4ZDEgMTAwNjQ0DQo+ID4gPiAtLS0gYS9k
cml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYw0KPiA+ID4gKysr
IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL2VuX3RjLmMNCj4gPiA+
IEBAIC01MjI0LDggKzUyMjQsMTAgQEAgaW50IG1seDVlX3RjX25pY19pbml0KHN0cnVjdCBtbHg1
ZV9wcml2DQo+ID4gPiAqcHJpdikNCj4gPiA+IA0KPiA+ID4gwqDCoCB0Yy0+Y3QgPSBtbHg1X3Rj
X2N0X2luaXQocHJpdiwgdGMtPmNoYWlucywgJnByaXYtDQo+ID4gPiA+ZnMudGMubW9kX2hkciwN
Cj4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBNTFg1X0ZMT1dfTkFNRVNQQUNF
X0tFUk5FTCk7DQo+ID4gPiAtwqDCoMKgIGlmIChJU19FUlIodGMtPmN0KSkNCj4gPiA+ICvCoMKg
wqAgaWYgKCF0Yy0+Y3QpIHsNCj4gPiA+ICvCoMKgwqDCoMKgwqDCoCBlcnIgPSAtRU5PTUVNOw0K
PiA+ID4gwqDCoMKgwqDCoMKgIGdvdG8gZXJyX2N0Ow0KPiA+ID4gK8KgwqDCoCB9DQo+ID4gDQo+
ID4gSGkgRGFuLA0KPiA+IFRoYXQgd2FzIGltcGxlbWVudCBsaWtlIHRoYXQgb24gcHVycG9zZS4g
SWYgbWx4NV90Y19pbml0X2N0IHJldHVybnMNCj4gPiBOVUxMIGl0IG1lYW5zIHRoZSBkZXZpY2Ug
ZG9lc27igJl0IHN1cHBvcnQgQ1Qgb2ZmbG9hZCB3aGljaCBjYW4NCj4gPiBoYXBwZW4gd2l0aCBv
bGRlciBkZXZpY2VzIG9yIG9sZCBGVyBvbiB0aGUgZGV2aWNlcy4NCj4gPiBIb3dldmVyLCBpbiB0
aGlzIGNhc2Ugd2Ugd2FudCB0byBjb250aW51ZSB3aXRoIHRoZSByZXN0IG9mIHRoZSBUYw0KPiA+
IGluaXRpYWxpemF0aW9uIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIHN1cHBvcnQgb3RoZXIgVEMgb2Zm
bG9hZHMuIE5vDQo+ID4gbmVlZCB0byBmYWlsIHRoZSBlbnRpcmUgVEMgaW5pdCBpbiB0aGlzIGNh
c2UuIE9ubHkgaWYNCj4gPiBtbHg1X3RjX2luaXRfY3QgcmV0dXJuIGVycl9wdHIgdGhhdCBtZWFu
cyB0aGUgdGMgaW5pdCBmYWlsZWQgbm90DQo+ID4gYmVjYXVzZSBvZiBsYWNrIG9mIHN1cHBvcnQg
YnV0IGR1ZSB0byBhIHJlYWwgZXJyb3IgYW5kIG9ubHkgdGhlbiB3ZQ0KPiA+IHdhbnQgdG8gZmFp
bCB0aGUgcmVzdCBvZiB0aGUgdGMgaW5pdC4NCj4gPiANCj4gPiBZb3VyIGNoYW5nZSB3aWxsIGJy
ZWFrIGNvbXBhdGliaWxpdHkgZm9yIGRldmljZXMvRlcgdmVyc2lvbnMgdGhhdA0KPiA+IGRvbuKA
mXQgaGF2ZSBDVCBvZmZsb2FkIHN1cHBvcnQuDQo+ID4gDQo+IA0KPiBXaGVuIHdlIGhhdmUgYSBm
dW5jdGlvbiBsaWtlIHRoaXMgd2hpY2ggaXMgb3B0aW9uYWwgdGhlbiByZXR1cm5pbmcNCj4gTlVM
TA0KPiBpcyBhIHNwZWNpYWwga2luZCBvZiBzdWNjZXNzIGFzIHlvdSBzYXkuwqAgUmV0dXJuaW5n
IE5VTEwgc2hvdWxkIG5vdA0KPiBnZW5lcmF0ZSBhIHdhcm5pbmcgbWVzc2FnZS7CoCBBdCB0aGUg
c2FtZSB0aW1lLCBpZiB0aGUgdXNlciBlbmFibGVzDQo+IHRoZQ0KPiBvcHRpb24gYW5kIHRoZSBj
b2RlIGZhaWxzIGJlY2F1c2Ugd2UgYXJlIGxvdyBvbiBtZW1vcnkgdGhlbiByZXR1cm5pbmcNCj4g
YW4NCj4gZXJyb3IgcG9pbnRlciBpcyB0aGUgY29ycmVjdCBiZWhhdmlvci7CoCBKdXN0IGJlY2F1
c2UgdGhlIGZlYXR1cmUgaXMNCj4gb3B0aW9uYWwgZG9lcyBub3QgbWVhbiB3ZSBzaG91bGQgaWdu
b3JlIHdoYXQgdGhlIHVzZXIgdG9sZCB1cyB0byBkby4NCj4gDQo+IFRoaXMgY29kZSBuZXZlciBy
ZXR1cm5zIGVycm9yIHBvaW50ZXJzLsKgIEl0IGFsd2F5cyByZXR1cm5zDQo+IE5VTEwvc3VjY2Vz
cw0KPiB3aGVuIGFuIGFsbG9jYXRpb24gZmFpbHMuwqAgVGhhdCB0cmlnZ2VycyB0aGUgZmlyc3Qg
c3RhdGljIGNoZWNrZXINCj4gd2FybmluZyBmcm9tIGxhc3QgeWVhci7CoCBOb3cgU21hdGNoIGlz
IGNvbXBsYWluaW5nIGFib3V0IGEgbmV3IHN0YXRpYw0KPiBjaGVja2VyIHdhcm5pbmc6DQo+IA0K
PiBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvZW5fdGMuYzo0NzU0DQo+
IG1seDVlX3RjX2Vzd19pbml0KCkgd2FybjogbWlzc2luZyBlcnJvciBjb2RlIGhlcmU/ICdJU19F
UlIoKScgZmFpbGVkLg0KPiAnZXJyJyA9ICcwJw0KPiANCj4gwqAgNDcwOMKgIGludCBtbHg1ZV90
Y19lc3dfaW5pdChzdHJ1Y3Qgcmhhc2h0YWJsZSAqdGNfaHQpDQo+IMKgIDQ3MDnCoCB7DQo+IMKg
IDQ3MTDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc2l6ZV90IHN6X2VuY19vcHRzID0gc2l6ZW9m
KHN0cnVjdA0KPiB0dW5uZWxfbWF0Y2hfZW5jX29wdHMpOw0KPiDCoCA0NzExwqDCoMKgwqDCoMKg
wqDCoMKgIHN0cnVjdCBtbHg1X3JlcF91cGxpbmtfcHJpdiAqdXBsaW5rX3ByaXY7DQo+IMKgIDQ3
MTLCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IG1seDVlX3JlcF9wcml2ICpycHJpdjsNCj4gwqAg
NDcxM8KgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbWFwcGluZ19jdHggKm1hcHBpbmc7DQo+IMKg
IDQ3MTTCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IG1seDVfZXN3aXRjaCAqZXN3Ow0KPiDCoCA0
NzE1wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBtbHg1ZV9wcml2ICpwcml2Ow0KPiDCoCA0NzE2
wqDCoMKgwqDCoMKgwqDCoMKgIGludCBlcnIgPSAwOw0KPiDCoCA0NzE3wqAgDQo+IMKgIDQ3MTjC
oMKgwqDCoMKgwqDCoMKgwqAgdXBsaW5rX3ByaXYgPSBjb250YWluZXJfb2YodGNfaHQsIHN0cnVj
dA0KPiBtbHg1X3JlcF91cGxpbmtfcHJpdiwgdGNfaHQpOw0KPiDCoCA0NzE5wqDCoMKgwqDCoMKg
wqDCoMKgIHJwcml2ID0gY29udGFpbmVyX29mKHVwbGlua19wcml2LCBzdHJ1Y3QNCj4gbWx4NWVf
cmVwX3ByaXYsIHVwbGlua19wcml2KTsNCj4gwqAgNDcyMMKgwqDCoMKgwqDCoMKgwqDCoCBwcml2
ID0gbmV0ZGV2X3ByaXYocnByaXYtPm5ldGRldik7DQo+IMKgIDQ3MjHCoMKgwqDCoMKgwqDCoMKg
wqAgZXN3ID0gcHJpdi0+bWRldi0+cHJpdi5lc3dpdGNoOw0KPiDCoCA0NzIywqAgDQo+IMKgIDQ3
MjPCoMKgwqDCoMKgwqDCoMKgwqAgdXBsaW5rX3ByaXYtPmN0X3ByaXYgPQ0KPiBtbHg1X3RjX2N0
X2luaXQobmV0ZGV2X3ByaXYocHJpdi0+bmV0ZGV2KSwNCj4gwqAgNDcyNMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoA0KPiBlc3dfY2hhaW5zKGVzdyksDQo+IMKgIDQ3MjXC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmVzdy0NCj4gPm9mZmxvYWRz
Lm1vZF9oZHIsDQo+IMKgIDQ3MjbCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqANCj4gTUxYNV9GTE9XX05BTUVTUEFDRV9GREIpOw0KPiDCoCA0NzI3wqDCoMKgwqDCoMKgwqDC
oMKgIGlmIChJU19FUlIodXBsaW5rX3ByaXYtPmN0X3ByaXYpKQ0KPiDCoCA0NzI4wqDCoMKgwqDC
oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGVycl9jdDsNCj4gDQoNClRoZSBkcml2ZXIg
aXMgZGVzaWduZWQgdG8gdG9sZXJhdGVkIGZhaWx1cmUgaW4gbWx4NV90Y19jdF9pbml0IGFuZCBp
cw0Kc3VwcG9zZWQgdG8gY29udGludWUgaGVyZSBhbmQgbm90IGFib3J0IHdpdGggcmV0dXJuIDAu
Lg0KDQpzbyBlaXRoZXIgcmV0dXJuIHByb3BlciBlcnJubyBvciBjb250aW51ZSBpbml0aWFsaXpp
bmcsIHRoZSBjb2RlDQpjdXJyZW50bHkgaGFzIGEgYnVnLiANCg0KVGhhbmtzIERhbiBmb3IgcG9p
bnRpbmcgdGhhdCBvdXQuDQoNCj4gSWYgbWx4NV90Y19jdF9pbml0KCkgZmFpbHMsIHdoaWNoIGl0
IHNob3VsZCBkbyBpZiBrbWFsbG9jKCkgZmFpbHMgYnV0DQo+IGN1cnJlbnRseSBpdCBkb2VzIG5v
dCwgdGhlbiB0aGUgZXJyb3Igc2hvdWxkIGJlIHByb3BhZ2F0ZWQgYWxsIHRoZQ0KPiB3YXkNCj4g
YmFjay7CoCBTbyB0aGlzIGNvZGUgc2hvdWxkIHByZXNlcnZlIHRoZSBlcnJvciBjb2RlIGluc3Rl
YWQgb2YNCj4gcmV0dXJuaW5nDQo+IHN1Y2Nlc3MuDQo+IA0KPiDCoCA0NzI5wqAgDQo+IMKgIDQ3
MzDCoMKgwqDCoMKgwqDCoMKgwqAgbWFwcGluZyA9IG1hcHBpbmdfY3JlYXRlKHNpemVvZihzdHJ1
Y3QNCj4gdHVubmVsX21hdGNoX2tleSksDQo+IMKgIDQ3MzHCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBUVU5ORUxfSU5G
T19CSVRTX01BU0ssDQo+IHRydWUpOw0KPiANCj4gcmVnYXJkcywNCj4gZGFuIGNhcnBlbnRlcg0K
PiANCg0K

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks
  2021-02-16 21:37     ` Saeed Mahameed
@ 2021-02-16 21:37       ` Saeed Mahameed
  0 siblings, 0 replies; 7+ messages in thread
From: Saeed Mahameed @ 2021-02-16 21:37 UTC (permalink / raw)
  To: dan.carpenter, Ariel Levkovich
  Cc: linux-rdma, kernel-janitors, davem, kuba, netdev, Roi Dayan,
	Ariel Levkovich, leon

On Mon, 2021-02-15 at 11:30 +0300, Dan Carpenter wrote:
> On Mon, Sep 28, 2020 at 06:31:04PM +0000, Ariel Levkovich wrote:
> > On Sep 28, 2020, at 13:42, Dan Carpenter <dan.carpenter@oracle.com>
> > wrote:
> > > 
> > > The mlx5_tc_ct_init() function doesn't return error pointers it
> > > returns
> > > NULL.  Also we need to set the error codes on this path.
> > > 
> > > Fixes: aedd133d17bc ("net/mlx5e: Support CT offload for tc nic
> > > flows")
> > > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> > > ---
> > > drivers/net/ethernet/mellanox/mlx5/core/en_tc.c | 8 ++++++--
> > > 1 file changed, 6 insertions(+), 2 deletions(-)
> > > 
> > > diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > > b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > > index 104b1c339de0..438fbcf478d1 100644
> > > --- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > > +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
> > > @@ -5224,8 +5224,10 @@ int mlx5e_tc_nic_init(struct mlx5e_priv
> > > *priv)
> > > 
> > >    tc->ct = mlx5_tc_ct_init(priv, tc->chains, &priv-
> > > >fs.tc.mod_hdr,
> > >                 MLX5_FLOW_NAMESPACE_KERNEL);
> > > -    if (IS_ERR(tc->ct))
> > > +    if (!tc->ct) {
> > > +        err = -ENOMEM;
> > >        goto err_ct;
> > > +    }
> > 
> > Hi Dan,
> > That was implement like that on purpose. If mlx5_tc_init_ct returns
> > NULL it means the device doesn’t support CT offload which can
> > happen with older devices or old FW on the devices.
> > However, in this case we want to continue with the rest of the Tc
> > initialization because we can still support other TC offloads. No
> > need to fail the entire TC init in this case. Only if
> > mlx5_tc_init_ct return err_ptr that means the tc init failed not
> > because of lack of support but due to a real error and only then we
> > want to fail the rest of the tc init.
> > 
> > Your change will break compatibility for devices/FW versions that
> > don’t have CT offload support.
> > 
> 
> When we have a function like this which is optional then returning
> NULL
> is a special kind of success as you say.  Returning NULL should not
> generate a warning message.  At the same time, if the user enables
> the
> option and the code fails because we are low on memory then returning
> an
> error pointer is the correct behavior.  Just because the feature is
> optional does not mean we should ignore what the user told us to do.
> 
> This code never returns error pointers.  It always returns
> NULL/success
> when an allocation fails.  That triggers the first static checker
> warning from last year.  Now Smatch is complaining about a new static
> checker warning:
> 
> drivers/net/ethernet/mellanox/mlx5/core/en_tc.c:4754
> mlx5e_tc_esw_init() warn: missing error code here? 'IS_ERR()' failed.
> 'err' = '0'
> 
>   4708  int mlx5e_tc_esw_init(struct rhashtable *tc_ht)
>   4709  {
>   4710          const size_t sz_enc_opts = sizeof(struct
> tunnel_match_enc_opts);
>   4711          struct mlx5_rep_uplink_priv *uplink_priv;
>   4712          struct mlx5e_rep_priv *rpriv;
>   4713          struct mapping_ctx *mapping;
>   4714          struct mlx5_eswitch *esw;
>   4715          struct mlx5e_priv *priv;
>   4716          int err = 0;
>   4717  
>   4718          uplink_priv = container_of(tc_ht, struct
> mlx5_rep_uplink_priv, tc_ht);
>   4719          rpriv = container_of(uplink_priv, struct
> mlx5e_rep_priv, uplink_priv);
>   4720          priv = netdev_priv(rpriv->netdev);
>   4721          esw = priv->mdev->priv.eswitch;
>   4722  
>   4723          uplink_priv->ct_priv =
> mlx5_tc_ct_init(netdev_priv(priv->netdev),
>   4724                                                
> esw_chains(esw),
>   4725                                                 &esw-
> >offloads.mod_hdr,
>   4726                                                
> MLX5_FLOW_NAMESPACE_FDB);
>   4727          if (IS_ERR(uplink_priv->ct_priv))
>   4728                  goto err_ct;
> 

The driver is designed to tolerated failure in mlx5_tc_ct_init and is
supposed to continue here and not abort with return 0..

so either return proper errno or continue initializing, the code
currently has a bug. 

Thanks Dan for pointing that out.

> If mlx5_tc_ct_init() fails, which it should do if kmalloc() fails but
> currently it does not, then the error should be propagated all the
> way
> back.  So this code should preserve the error code instead of
> returning
> success.
> 
>   4729  
>   4730          mapping = mapping_create(sizeof(struct
> tunnel_match_key),
>   4731                                   TUNNEL_INFO_BITS_MASK,
> true);
> 
> regards,
> dan carpenter
> 


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-02-16 21:38 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-28 17:41 [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Dan Carpenter
2020-09-28 17:42 ` [PATCH 2/2 net-next] net/mlx5e: TC: Fix potential Oops in mlx5e_tc_unoffload_from_slow_path() Dan Carpenter
2020-09-28 18:31 ` [PATCH 1/2 net-next] net/mlx5e: TC: Fix IS_ERR() vs NULL checks Ariel Levkovich
2020-09-28 18:51   ` Dan Carpenter
2021-02-15  8:30   ` Dan Carpenter
2021-02-16 21:37     ` Saeed Mahameed
2021-02-16 21:37       ` Saeed Mahameed

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).