]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-ndisc: disable timer event source only when a valid RA received
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 22 Feb 2024 04:59:57 +0000 (13:59 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 22 Feb 2024 05:35:24 +0000 (14:35 +0900)
Fixes #31439.

src/libsystemd-network/sd-ndisc.c

index 0b5626670b92237b3a1ea957c69e512514c5c3cf..9b2635ae1cd151959c388b5e36a3c07a5e175189 100644 (file)
@@ -196,6 +196,8 @@ static int ndisc_handle_datagram(sd_ndisc *nd, sd_ndisc_router *rt) {
         if (r < 0)
                 return r;
 
+        (void) event_source_disable(nd->timeout_event_source);
+
         log_ndisc(nd, "Received Router Advertisement: flags %s preference %s lifetime %s",
                   rt->flags & ND_RA_FLAG_MANAGED ? "MANAGED" : rt->flags & ND_RA_FLAG_OTHER ? "OTHER" : "none",
                   rt->preference == SD_NDISC_PREFERENCE_HIGH ? "high" : rt->preference == SD_NDISC_PREFERENCE_LOW ? "low" : "medium",
@@ -253,7 +255,6 @@ static int ndisc_recv(sd_event_source *s, int fd, uint32_t revents, void *userda
         if (in6_addr_is_null(&rt->address))
                 log_ndisc(nd, "Received RA from null address. Ignoring.");
 
-        (void) event_source_disable(nd->timeout_event_source);
         (void) ndisc_handle_datagram(nd, rt);
         return 0;
 }