diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-09-15 15:37:25 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2020-09-17 00:04:22 +0900 |
commit | 03ae4490157f7209ce0804ac22b7a39a2d8798c2 (patch) | |
tree | 3ce021e1863379c8da6442cc59fc3bafaf7ec3bd | |
parent | ccea2448652cddb2d9ff492e1870432461128c7c (diff) | |
download | systemd-03ae4490157f7209ce0804ac22b7a39a2d8798c2.tar.gz |
network: check MulticastGroupAddress= is neither a local multicast address nor all nodes address
-rw-r--r-- | src/network/networkd-mdb.c | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/src/network/networkd-mdb.c b/src/network/networkd-mdb.c index e9e364acbc..fa9daa3472 100644 --- a/src/network/networkd-mdb.c +++ b/src/network/networkd-mdb.c @@ -239,9 +239,30 @@ int mdb_entry_verify(MdbEntry *mdb_entry) { if (section_is_invalid(mdb_entry->section)) return -EINVAL; - if (in_addr_is_multicast(mdb_entry->family, &mdb_entry->group_addr) <= 0) { - log_error("No valid MulticastGroupAddress= assignment in this section"); - return -EINVAL; + if (mdb_entry->family == AF_UNSPEC) + return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), + "%s: [BridgeMDB] section without MulticastGroupAddress= field configured. " + "Ignoring [BridgeMDB] section from line %u.", + mdb_entry->section->filename, mdb_entry->section->line); + + if (!in_addr_is_multicast(mdb_entry->family, &mdb_entry->group_addr)) + return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), + "%s: MulticastGroupAddress= is not a multicast address. " + "Ignoring [BridgeMDB] section from line %u.", + mdb_entry->section->filename, mdb_entry->section->line); + + if (mdb_entry->family == AF_INET) { + if (in4_addr_is_local_multicast(&mdb_entry->group_addr.in)) + return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), + "%s: MulticastGroupAddress= is a local multicast address. " + "Ignoring [BridgeMDB] section from line %u.", + mdb_entry->section->filename, mdb_entry->section->line); + } else { + if (in6_addr_is_link_local_all_nodes(&mdb_entry->group_addr.in6)) + return log_warning_errno(SYNTHETIC_ERRNO(EINVAL), + "%s: MulticastGroupAddress= is the multicast all nodes address. " + "Ignoring [BridgeMDB] section from line %u.", + mdb_entry->section->filename, mdb_entry->section->line); } return 0; |