On Dec 5, 8:38am, thor...@me.com (Jason Thorpe) wrote: -- Subject: Re: enhance sysctl kern.expose_address
| PK_KMEM should only be set if mm_open returns 0. There's a case where | mm_md_open can return an error and PK_KMEM is still set. Thanks, christos Index: mm.c =================================================================== RCS file: /cvsroot/src/sys/dev/mm.c,v retrieving revision 1.22 diff -u -p -u -r1.22 mm.c --- mm.c 13 Oct 2016 08:56:31 -0000 1.22 +++ mm.c 5 Dec 2018 16:47:49 -0000 @@ -53,17 +53,14 @@ static void * dev_zero_page __read_most static kmutex_t dev_mem_lock __cacheline_aligned; static vaddr_t dev_mem_addr __read_mostly; +static dev_type_open(mm_open); static dev_type_read(mm_readwrite); static dev_type_ioctl(mm_ioctl); static dev_type_mmap(mm_mmap); static dev_type_ioctl(mm_ioctl); const struct cdevsw mem_cdevsw = { -#ifdef __HAVE_MM_MD_OPEN - .d_open = mm_md_open, -#else - .d_open = nullopen, -#endif + .d_open = mm_open, .d_close = nullclose, .d_read = mm_readwrite, .d_write = mm_readwrite, @@ -94,6 +91,18 @@ const struct cdevsw mem_ultrix_cdevsw = }; #endif +static int +mm_open(dev_t dev, int flag, int mode, struct lwp *l) +{ +#ifdef __HAVE_MM_MD_OPEN + int error; + if ((error = mm_md_open(dev, flag, mode, l)) != 0) + return error; +#endif + l->l_proc->p_flag |= PK_KMEM; + return 0; +} + /* * mm_init: initialize memory device driver. */