mirror of
https://github.com/opnsense/src.git
synced 2026-04-21 06:07:31 -04:00
Fix PINNED routes handling.
Before r291643, adding new interface prefix had the following logic:
try_add:
EEXIST && (PINNED) {
try_del(w/o PINNED flag)
if (OK)
try_add(PINNED)
}
In r291643, deletion was performed w/ PINNED flag held which leaded
to new interface prefixes (like ::1) overriding older ones.
Fix this by requesting deletion w/o RTF_PINNED.
PR: kern/205285
Submitted by: Fabian Keil <fk at fabiankeil.de>
This commit is contained in:
parent
af1a7b2526
commit
6af272d88e
1 changed files with 3 additions and 0 deletions
|
|
@ -1586,7 +1586,10 @@ rtrequest1_fib(int req, struct rt_addrinfo *info, struct rtentry **ret_nrt,
|
|||
*/
|
||||
struct sockaddr *info_dst = info->rti_info[RTAX_DST];
|
||||
info->rti_info[RTAX_DST] = ndst;
|
||||
/* Do not delete existing PINNED(interface) routes */
|
||||
info->rti_flags &= ~RTF_PINNED;
|
||||
rt_old = rt_unlinkrte(rnh, info, &error);
|
||||
info->rti_flags |= RTF_PINNED;
|
||||
info->rti_info[RTAX_DST] = info_dst;
|
||||
if (rt_old != NULL)
|
||||
rn = rnh->rnh_addaddr(ndst, netmask, rnh,
|
||||
|
|
|
|||
Loading…
Reference in a new issue