From: Luca Boccassi Date: Thu, 18 Apr 2024 21:45:06 +0000 (+0200) Subject: Merge pull request #32299 from yuwata/network-radv-ignore-rs-from-the-same-interface X-Git-Tag: v256-rc1~125 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e54bf3fe0bea67f5e3cbc35fe116b1d362d15a70;p=thirdparty%2Fsystemd.git Merge pull request #32299 from yuwata/network-radv-ignore-rs-from-the-same-interface network/radv: ignore RS message from the same interface --- e54bf3fe0bea67f5e3cbc35fe116b1d362d15a70 diff --cc src/libsystemd-network/sd-radv.c index 6a71ce14ff4,62b69e633ff..053dd0653b1 --- a/src/libsystemd-network/sd-radv.c +++ b/src/libsystemd-network/sd-radv.c @@@ -283,8 -260,12 +283,12 @@@ static int radv_process_packet(sd_radv r = sd_ndisc_router_solicit_get_sender_address(rs, &src); if (r < 0 && r != -ENODATA) /* null address is allowed */ return log_radv_errno(ra, r, "Failed to get sender address of RS, ignoring: %m"); + if (r >= 0 && in6_addr_equal(&src, &ra->ipv6ll)) + /* This should be definitely caused by a misconfiguration. If we send RA to ourself, the + * kernel complains about that. Let's ignore the packet. */ + return log_radv_errno(ra, SYNTHETIC_ERRNO(EADDRINUSE), "Received RS from the same interface, ignoring."); - r = radv_send_router(ra, &src, ra->lifetime_usec); + r = radv_send_router(ra, &src); if (r < 0) return log_radv_errno(ra, r, "Unable to send solicited Router Advertisement to %s, ignoring: %m", IN6_ADDR_TO_STRING(&src));