diff options
author | mvs <mvs@openbsd.org> | 2021-03-26 22:41:06 +0000 |
---|---|---|
committer | mvs <mvs@openbsd.org> | 2021-03-26 22:41:06 +0000 |
commit | 51772eb6ca0378a11bd1f4965abf57cb7fb874bc (patch) | |
tree | 9e7db48d4e2be83af76fdbc10455aaf871ffa612 /share | |
parent | Push kernel lock down to rt_setsource() to make `ifa' dereference safe. (diff) | |
download | wireguard-openbsd-51772eb6ca0378a11bd1f4965abf57cb7fb874bc.tar.xz wireguard-openbsd-51772eb6ca0378a11bd1f4965abf57cb7fb874bc.zip |
Push kernel lock within rtable_add(9) and rework it to return 0 in the
case when requested table is already exists.
Except initialization time, route_output() and if_createrdomain() are the
only paths where we call rtable_add(9). We check requested table existence
by rtable_exists(9) and it's not the error condition if the table exists.
Otherwise we are trying to create requested table by rtable_add(9). Those
paths are kernel locked so concurrent thread can't create requested table
just after rtable_exists(9) check. Also rtable_add(9) has internal
rtable_exists(9) check and in this case the table existence assumed as
EEXIST error. This error path is never reached.
We are going to unlock PF_ROUTE sockets. This means route_output() will
not be serialized with if_createrdomain() and concurrent thread could
create requested table. Table existence check and creation should be
serialized and it makes sense to do this within rtable_add(9). This time
kernel lock is used for this so it pushed down to rtable_add(9). The
internal rtable_exists(9) check was modified and table existence is not
error now.
Since the external rtable_exists(9) check is useless it was removed from
if_createrdomain(). It still exists in route_output() path because the
logic is more complicated here.
ok mpi@
Diffstat (limited to 'share')
-rw-r--r-- | share/man/man9/rtable_add.9 | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/share/man/man9/rtable_add.9 b/share/man/man9/rtable_add.9 index f82b22a3491..05d91ccb44d 100644 --- a/share/man/man9/rtable_add.9 +++ b/share/man/man9/rtable_add.9 @@ -1,4 +1,4 @@ -.\" $OpenBSD: rtable_add.9,v 1.8 2016/11/14 10:32:46 mpi Exp $ +.\" $OpenBSD: rtable_add.9,v 1.9 2021/03/26 22:41:06 mvs Exp $ .\" .\" Copyright (c) 2011 Bret S. Lambert <blambert@openbsd.org> .\" All rights reserved. @@ -15,7 +15,7 @@ .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" -.Dd $Mdocdate: November 14 2016 $ +.Dd $Mdocdate: March 26 2021 $ .Dt RTABLE_ADD 9 .Os .Sh NAME @@ -83,10 +83,6 @@ can be called during autoconf, from process context, or from interrupt context. may fail with: .Pp .Bl -tag -width Er -compact -.It Bq Er EEXIST -A routing table with ID of -.Fa id -already exists. .It Bq Er ENOMEM Memory could not be allocated to extend the list of routing domains. .El |