[Bug 276392] if_wg: Fix noise_remote_alloc() to acquire 'l_identity_lock' lock

[email protected]
Newsgroups gmane.os.freebsd.devel.net
Message-ID <[email protected]/bugzilla/>
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=276392

--- Comment #2 from Aaron LI <[email protected]> ---
Yes, it should be a read lock, and that’s why I use RA_LOCKED in the added
rw_assert(). I made a typo in the previous patch. Thanks.


--- wg_noise.c.orig     2024-01-16 22:53:33.518906792 +0800
+++ wg_noise.c  2024-01-16 23:21:16.069687841 +0800
@@ -281,6 +281,8 @@ noise_local_keys(struct noise_local *l,
 static void
 noise_precompute_ss(struct noise_local *l, struct noise_remote *r)
 {
+       rw_assert(&l->l_identity_lock, RA_LOCKED);
+
        rw_wlock(&r->r_handshake_lock);
        if (!l->l_has_identity ||
            !curve25519(r->r_ss, l->l_private, r->r_public))
@@ -302,7 +304,10 @@ noise_remote_alloc(struct noise_local *l
        r->r_handshake_state = HANDSHAKE_DEAD;
        r->r_last_sent = TIMER_RESET;
        r->r_last_init_recv = TIMER_RESET;
+
+       rw_rlock(&l->l_identity_lock);
        noise_precompute_ss(l, r);
+       rw_runlock(&l->l_identity_lock);

        refcount_init(&r->r_refcnt, 1);
        r->r_local = noise_local_ref(l);

-- 
You are receiving this mail because:
You are the assignee for the bug.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.