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
9d2d111f78
commit
a10bfcd45d
@ -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 New Issue
Block a user