Skip to content

Commit

Permalink
mctp: Warn if pointer is set for a wrong dev type
Browse files Browse the repository at this point in the history
Should not occur but is a sanity check.

May help tracking down Trinity reported issue
https://lore.kernel.org/lkml/20210913030701.GA5926@xsang-OptiPlex-9020/

Signed-off-by: Matt Johnston <matt@codeconstruct.com.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Matt Johnston authored and David S. Miller committed Sep 29, 2021
1 parent 6183569 commit 7b1871a
Showing 1 changed file with 24 additions and 7 deletions.
31 changes: 24 additions & 7 deletions net/mctp/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,12 +337,26 @@ static int mctp_set_link_af(struct net_device *dev, const struct nlattr *attr,
return 0;
}

/* Matches netdev types that should have MCTP handling */
static bool mctp_known(struct net_device *dev)
{
/* only register specific types (inc. NONE for TUN devices) */
return dev->type == ARPHRD_MCTP ||
dev->type == ARPHRD_LOOPBACK ||
dev->type == ARPHRD_NONE;
}

static void mctp_unregister(struct net_device *dev)
{
struct mctp_dev *mdev;

mdev = mctp_dev_get_rtnl(dev);

if (mctp_known(dev) != (bool)mdev) {
// Sanity check, should match what was set in mctp_register
netdev_warn(dev, "%s: mdev pointer %d but type (%d) match is %d",
__func__, (bool)mdev, mctp_known(dev), dev->type);
return;
}
if (!mdev)
return;

Expand All @@ -360,16 +374,19 @@ static int mctp_register(struct net_device *dev)
struct mctp_dev *mdev;

/* Already registered? */
if (rtnl_dereference(dev->mctp_ptr))
return 0;
mdev = rtnl_dereference(dev->mctp_ptr);

/* only register specific types (inc. NONE for TUN devices) */
if (!(dev->type == ARPHRD_MCTP ||
dev->type == ARPHRD_LOOPBACK ||
dev->type == ARPHRD_NONE)) {
if (mdev) {
if (!mctp_known(dev))
netdev_warn(dev, "%s: mctp_dev set for unknown type %d",
__func__, dev->type);
return 0;
}

/* only register specific types */
if (!mctp_known(dev))
return 0;

mdev = mctp_add_dev(dev);
if (IS_ERR(mdev))
return PTR_ERR(mdev);
Expand Down

0 comments on commit 7b1871a

Please sign in to comment.