On Thu, Mar 17, 2022 at 02:09:39PM +0100, Mark Kettenis wrote: > I fear the fundamental problem is that we should not expose data > structures internal to the kernel to userland. What I don't > understand though is how that happens. The sysctl code doesn't seem > to export "struct inpcb" instances directly, but instead it exports > selected members through "struct kinfo_file". So why is "struct > inpcb" exposed to userland at all?
A few tools use it. One thing is post mortem analysis of kernel core dumps. Sometimes I get dumps sent from customers. They don't have WITNESS. Some traditional network debugging tools use these strutures. lib/libkvm sbin/sysctl usr.bin/netstat usr.bin/tcpbench usr.sbin/trpt As you need sysctl kern.allowkmem=1 for them this is only useful on debugging machines. Ob course they can be rewritten using sysctl. A drawback is that you have to write a lot of copy code and post mortem analysis code gets out of sync. I see tools with -M -N breaking over time. The question is how to proceed. For MP in the network stack I need mutex in structs. And I don't want to rewrite all tools before making progress. bluhm > > Index: sys/netinet/in_pcb.h > > =================================================================== > > RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.h,v > > retrieving revision 1.125 > > diff -u -p -r1.125 in_pcb.h > > --- sys/netinet/in_pcb.h 14 Mar 2022 22:38:43 -0000 1.125 > > +++ sys/netinet/in_pcb.h 17 Mar 2022 00:44:54 -0000 > > @@ -65,6 +65,7 @@ > > #define _NETINET_IN_PCB_H_ > > > > #include <sys/queue.h> > > +#include <sys/mutex.h> > > #include <sys/refcnt.h> > > #include <netinet/ip6.h> > > #include <netinet6/ip6_var.h> > > Index: sys/sys/mutex.h > > =================================================================== > > RCS file: /data/mirror/openbsd/cvs/src/sys/sys/mutex.h,v > > retrieving revision 1.18 > > diff -u -p -r1.18 mutex.h > > --- sys/sys/mutex.h 23 Apr 2019 13:35:12 -0000 1.18 > > +++ sys/sys/mutex.h 17 Mar 2022 00:44:23 -0000 > > @@ -48,6 +48,8 @@ struct mutex { > > #endif > > }; > > > > +#ifdef _KERNEL > > + > > /* > > * To prevent lock ordering problems with the kernel lock, we need to > > * make sure we block all interrupts that can grab the kernel lock. > > @@ -148,7 +150,7 @@ void _mtx_init_flags(struct mutex *, int > > > > #endif /* WITNESS */ > > > > -#if defined(_KERNEL) && defined(DDB) > > +#ifdef DDB > > > > struct db_mutex { > > struct cpu_info *mtx_owner; > > @@ -160,6 +162,8 @@ struct db_mutex { > > void db_mtx_enter(struct db_mutex *); > > void db_mtx_leave(struct db_mutex *); > > > > -#endif /* _KERNEL && DDB */ > > +#endif /* DDB */ > > + > > +#endif /* _KERNEL */ > > > > #endif > > > >