device: check platform link compatibility when setting nm-owned flag

We set nm-owned to indicate whether a software device was created by
NM or it was pre-existing. When checking the existence, we must verify
also whether the link type is compatible with the device, otherwise it
is possible to match unrelated interfaces. For example, when checking
for the existence of an ovs-bridge (which is not compatible with any
platform link) we could match a unrelated platform link with the same
name.

https://bugzilla.redhat.com/show_bug.cgi?id=1733709
(cherry picked from commit 3cb4b36261)
(cherry picked from commit cb20d0791a)
This commit is contained in:
Beniamino Galvani 2019-07-30 11:03:59 +02:00
parent d69b4b3e70
commit 511ef27d5e

View file

@ -4102,13 +4102,14 @@ nm_device_create_and_realize (NMDevice *self,
{
nm_auto_nmpobj const NMPObject *plink_keep_alive = NULL;
NMDevicePrivate *priv = NM_DEVICE_GET_PRIVATE (self);
const NMPlatformLink *plink = NULL;
const NMPlatformLink *plink;
/* Must be set before device is realized */
priv->nm_owned = !nm_platform_link_get_by_ifname (nm_device_get_platform (self), priv->iface);
plink = nm_platform_link_get_by_ifname (nm_device_get_platform (self), priv->iface);
priv->nm_owned = !plink || !link_type_compatible (self, plink->type, NULL, NULL);
_LOGD (LOGD_DEVICE, "create (is %snm-owned)", priv->nm_owned ? "" : "not ");
plink = NULL;
/* Create any resources the device needs */
if (NM_DEVICE_GET_CLASS (self)->create_and_realize) {
if (!NM_DEVICE_GET_CLASS (self)->create_and_realize (self, connection, parent, &plink, error))