]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: ndisc - Ignore route information if reserved (10) value is
authorSusant Sahani <ssahani@gmail.com>
Mon, 24 Jul 2023 09:34:59 +0000 (15:04 +0530)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 14 Aug 2023 03:43:38 +0000 (12:43 +0900)
received

RFC4191 – Section 2.3 Route Information Option's Prf field:
If the Reserved (10) value is received, the Route Information Option MUST be ignored.

src/libsystemd-network/ndisc-router.c
src/network/networkd-ndisc.c

index 43a36e4b14c49a77f3279c74f53032f210ff4e21..e25b3c2d9b9b794150351910a3ccc205c5e32344 100644 (file)
@@ -530,10 +530,10 @@ int sd_ndisc_router_route_get_preference(sd_ndisc_router *rt, unsigned *ret) {
         if (r < 0)
                 return r;
 
-        *ret = (ri[3] >> 3) & 3;
-        if (!IN_SET(*ret, SD_NDISC_PREFERENCE_LOW, SD_NDISC_PREFERENCE_HIGH))
-                *ret = SD_NDISC_PREFERENCE_MEDIUM;
+        if (!IN_SET((ri[3] >> 3) & 3, SD_NDISC_PREFERENCE_LOW, SD_NDISC_PREFERENCE_MEDIUM, SD_NDISC_PREFERENCE_HIGH))
+                return -ENOTSUP;
 
+        *ret = (ri[3] >> 3) & 3;
         return 0;
 }
 
index 5ac6e1f9ec40dbfec109aedb6e662eba163794e3..b2b222147d154e36fc80005fc90584228042cfd0 100644 (file)
@@ -585,6 +585,10 @@ static int ndisc_router_process_route(Link *link, sd_ndisc_router *rt) {
         }
 
         r = sd_ndisc_router_route_get_preference(rt, &preference);
+        if (r == -ENOTSUP) {
+                log_link_debug_errno(link, r, "Received route prefix with unsupported preference, ignoring: %m");
+                return 0;
+        }
         if (r < 0)
                 return log_link_warning_errno(link, r, "Failed to get default router preference from RA: %m");