]> git.itanic.dy.fi Git - linux-stable/commit
net/smc: fix cleanup for linkgroup setup failures
authorUrsula Braun <ubraun@linux.ibm.com>
Tue, 25 Feb 2020 15:34:36 +0000 (16:34 +0100)
committerDavid S. Miller <davem@davemloft.net>
Thu, 27 Feb 2020 04:18:07 +0000 (20:18 -0800)
commit51e3dfa8906ace90c809235b3d3afebc166b6433
treed5a11fdd383811480c980d78eec9dc47521c1797
parent402482a6a78e5c61d8a2ec6311fc5b4aca392cd6
net/smc: fix cleanup for linkgroup setup failures

If an SMC connection to a certain peer is setup the first time,
a new linkgroup is created. In case of setup failures, such a
linkgroup is unusable and should disappear. As a first step the
linkgroup is removed from the linkgroup list in smc_lgr_forget().

There are 2 problems:
smc_listen_decline() might be called before linkgroup creation
resulting in a crash due to calling smc_lgr_forget() with
parameter NULL.
If a setup failure occurs after linkgroup creation, the connection
is never unregistered from the linkgroup, preventing linkgroup
freeing.

This patch introduces an enhanced smc_lgr_cleanup_early() function
which
* contains a linkgroup check for early smc_listen_decline()
  invocations
* invokes smc_conn_free() to guarantee unregistering of the
  connection.
* schedules fast linkgroup removal of the unusable linkgroup

And the unused function smcd_conn_free() is removed from smc_core.h.

Fixes: 3b2dec2603d5b ("net/smc: restructure client and server code in af_smc")
Fixes: 2a0674fffb6bc ("net/smc: improve abnormal termination of link groups")
Signed-off-by: Ursula Braun <ubraun@linux.ibm.com>
Signed-off-by: Karsten Graul <kgraul@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/smc/af_smc.c
net/smc/smc_core.c
net/smc/smc_core.h