Partially revert "net/smc: Add netlink net namespace support"
The change of sizeof(struct smc_diag_linkinfo) by commit79d39fc503
("net/smc: Add netlink net namespace support") introduced an ABI regression: since struct smc_diag_lgrinfo contains an object of type "struct smc_diag_linkinfo", offset of all subsequent members of struct smc_diag_lgrinfo was changed by that change. As result, applications compiled with the old version of struct smc_diag_linkinfo will receive garbage in struct smc_diag_lgrinfo.role if the kernel implements this new version of struct smc_diag_linkinfo. Fix this regression by reverting the part of commit79d39fc503
that changes struct smc_diag_linkinfo. After all, there is SMC_GEN_NETLINK interface which is good enough, so there is probably no need to touch the smc_diag ABI in the first place. Fixes:79d39fc503
("net/smc: Add netlink net namespace support") Signed-off-by: Dmitry V. Levin <ldv@altlinux.org> Reviewed-by: Karsten Graul <kgraul@linux.ibm.com> Link: https://lore.kernel.org/r/20220202030904.GA9742@altlinux.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
c8ff576e4e
commit
c86d86131a
|
@ -84,12 +84,11 @@ struct smc_diag_conninfo {
|
||||||
/* SMC_DIAG_LINKINFO */
|
/* SMC_DIAG_LINKINFO */
|
||||||
|
|
||||||
struct smc_diag_linkinfo {
|
struct smc_diag_linkinfo {
|
||||||
__u8 link_id; /* link identifier */
|
__u8 link_id; /* link identifier */
|
||||||
__u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */
|
__u8 ibname[IB_DEVICE_NAME_MAX]; /* name of the RDMA device */
|
||||||
__u8 ibport; /* RDMA device port number */
|
__u8 ibport; /* RDMA device port number */
|
||||||
__u8 gid[40]; /* local GID */
|
__u8 gid[40]; /* local GID */
|
||||||
__u8 peer_gid[40]; /* peer GID */
|
__u8 peer_gid[40]; /* peer GID */
|
||||||
__aligned_u64 net_cookie; /* RDMA device net namespace */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct smc_diag_lgrinfo {
|
struct smc_diag_lgrinfo {
|
||||||
|
|
|
@ -146,13 +146,11 @@ static int __smc_diag_dump(struct sock *sk, struct sk_buff *skb,
|
||||||
(req->diag_ext & (1 << (SMC_DIAG_LGRINFO - 1))) &&
|
(req->diag_ext & (1 << (SMC_DIAG_LGRINFO - 1))) &&
|
||||||
!list_empty(&smc->conn.lgr->list)) {
|
!list_empty(&smc->conn.lgr->list)) {
|
||||||
struct smc_link *link = smc->conn.lnk;
|
struct smc_link *link = smc->conn.lnk;
|
||||||
struct net *net = read_pnet(&link->smcibdev->ibdev->coredev.rdma_net);
|
|
||||||
|
|
||||||
struct smc_diag_lgrinfo linfo = {
|
struct smc_diag_lgrinfo linfo = {
|
||||||
.role = smc->conn.lgr->role,
|
.role = smc->conn.lgr->role,
|
||||||
.lnk[0].ibport = link->ibport,
|
.lnk[0].ibport = link->ibport,
|
||||||
.lnk[0].link_id = link->link_id,
|
.lnk[0].link_id = link->link_id,
|
||||||
.lnk[0].net_cookie = net->net_cookie,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
memcpy(linfo.lnk[0].ibname,
|
memcpy(linfo.lnk[0].ibname,
|
||||||
|
|
Loading…
Reference in New Issue