git: 8fa89d8b1904 - stable/12 - Fix NULL deref in ip_output during route change
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 30 May 2023 17:12:41 UTC
The branch stable/12 has been updated by vangyzen: URL: https://cgit.FreeBSD.org/src/commit/?id=8fa89d8b190472778ed07db9d8937cb1ce7b44fc commit 8fa89d8b190472778ed07db9d8937cb1ce7b44fc Author: Eric van Gyzen <vangyzen@FreeBSD.org> AuthorDate: 2023-05-23 09:46:42 +0000 Commit: Eric van Gyzen <vangyzen@FreeBSD.org> CommitDate: 2023-05-30 12:10:03 +0000 Fix NULL deref in ip_output during route change When changing the interface address during a route change, the rtentry's rt_ifa will be NULL briefly. Some parts of ip_output do not handle that NULL. In such case, re-validate the rtentry. That validation does not check the rt_ifa, but it does lock the route, which will synchronize with rtrequest1_fib_change. I would prefer to leave the rt_ifa pointer intact during the route change, but ip6_output is not fully protected by the net_epoch, so that could allow a use-after-free. ip6_output already handles a NULL rt_ifa. This is a direct commit to stable/12 because later branches have nexthop and do not appear to have this bug. PR: 271573 Reported by: Gaurav.Gandhi@dell.com Sponsored by: Dell EMC Isilon Differential Revision: https://reviews.freebsd.org/D40236 --- sys/netinet/ip_output.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 399afa184999..93b41376f3c2 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -393,6 +393,10 @@ again: goto bad; } ia = ifatoia(rte->rt_ifa); + if (ia == NULL) { + /* race with rtrequest1_fib_change */ + goto again; + } ifp = rte->rt_ifp; counter_u64_add(rte->rt_pksent, 1); rt_update_ro_flags(ro);