On Tue, May 30, 2023 at 11:56:01PM +0000, Klemens Nanni wrote: > On Tue, May 23, 2023 at 07:13:28PM +0000, Klemens Nanni wrote: > > On Sat, Jan 14, 2023 at 02:28:27PM +0000, Stuart Henderson wrote: > > > On 2023/01/12 04:49, Mikolaj Kucharski wrote: > > > > Hi, > > > > > > > > Is there anything else which I can do, to help this diff reviwed and > > > > increase the chance of getting in? > > > > > > > > Thread at https://marc.info/?t=163478298600001&r=1&w=2 > > > > > > > > Last version of the diff at > > > > https://marc.info/?l=openbsd-tech&m=167185582521873&q=mbox > > > > > > Inlining that for a few comments, otherwise it's ok sthen > > > > wgdescr[iption] would be consistent with the existing descr[iption]. > > At least my keep typing the trailing "r"... > > > > Then '-wgdescr' and 'wgdescr ""' work and are implemented exactly like > > te inteface description equivalents. > > > > I could use this now in a new VPN setup, so here's a polished diff, > > with the above, missing ifconfig.8 bits written and other nits inline. > > > > As Theo suggested, I'd drop the wg.4 and leave it to ifconfig.8 proper. > > > > Feedback? > > > > Either way, net/wireguard-tools needs a bump/rebuild. > > Updated diff at the end, grabbing the new per-description mutex also for > reading, not just writing it. > > I did not run into an issue with the first two diffs, but other peer > properties have their own mutex as well and they're consistently used > for all accesses, as I'd expect, so protect new description properly. > > Also fixed ifconfig.8's wireguard synopsis bits. > > Anyone?
This mutex makes very little sense to me. Access to this field is already serialized by the sc->sc_lock rwlock so there is no need for this mutex. > Index: sys/net/if_wg.c > =================================================================== > RCS file: /cvs/src/sys/net/if_wg.c,v > retrieving revision 1.27 > diff -u -p -r1.27 if_wg.c > --- sys/net/if_wg.c 30 May 2023 08:30:01 -0000 1.27 > +++ sys/net/if_wg.c 30 May 2023 15:37:41 -0000 > @@ -221,6 +221,9 @@ struct wg_peer { > > SLIST_ENTRY(wg_peer) p_start_list; > int p_start_onlist; > + > + struct mutex p_description_mtx; > + char p_description[IFDESCRSIZE]; > }; > > struct wg_softc { > @@ -275,6 +278,8 @@ int wg_peer_get_sockaddr(struct wg_peer > void wg_peer_clear_src(struct wg_peer *); > void wg_peer_get_endpoint(struct wg_peer *, struct wg_endpoint *); > void wg_peer_counters_add(struct wg_peer *, uint64_t, uint64_t); > +void wg_peer_set_description(struct wg_peer *, const char *); > +void wg_peer_get_description(struct wg_peer *, char *); > > int wg_aip_add(struct wg_softc *, struct wg_peer *, struct wg_aip_io *); > struct wg_peer * > @@ -407,6 +412,9 @@ wg_peer_create(struct wg_softc *sc, uint > peer->p_counters_tx = 0; > peer->p_counters_rx = 0; > > + mtx_init(&peer->p_description_mtx, IPL_NET); > + strlcpy(peer->p_description, "", IFDESCRSIZE); > + > mtx_init(&peer->p_endpoint_mtx, IPL_NET); > bzero(&peer->p_endpoint, sizeof(peer->p_endpoint)); > > @@ -581,6 +589,22 @@ wg_peer_counters_add(struct wg_peer *pee > mtx_leave(&peer->p_counters_mtx); > } > > +void > +wg_peer_set_description(struct wg_peer *peer, const char *description) > +{ > + mtx_enter(&peer->p_description_mtx); > + strlcpy(peer->p_description, description, IFDESCRSIZE); > + mtx_leave(&peer->p_description_mtx); > +} > + > +void > +wg_peer_get_description(struct wg_peer *peer, char *description) > +{ > + mtx_enter(&peer->p_description_mtx); > + strlcpy(description, peer->p_description, IFDESCRSIZE); > + mtx_leave(&peer->p_description_mtx); > +} > + > int > wg_aip_add(struct wg_softc *sc, struct wg_peer *peer, struct wg_aip_io *d) > { > @@ -2320,6 +2344,9 @@ wg_ioctl_set(struct wg_softc *sc, struct > } > } > > + if (peer_o.p_flags & WG_PEER_SET_DESCRIPTION) > + wg_peer_set_description(peer, peer_o.p_description); > + > aip_p = &peer_p->p_aips[0]; > for (j = 0; j < peer_o.p_aips_count; j++) { > if ((ret = copyin(aip_p, &aip_o, sizeof(aip_o))) != 0) > @@ -2429,6 +2456,8 @@ wg_ioctl_get(struct wg_softc *sc, struct > aip_count++; > } > peer_o.p_aips_count = aip_count; > + > + wg_peer_get_description(peer, peer_o.p_description); > > if ((ret = copyout(&peer_o, peer_p, sizeof(peer_o))) != 0) > goto unlock_and_ret_size; -- :wq Claudio