<div dir="ltr"><div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Thu, Oct 18, 2018 at 12:08 AM Sebastian Huber <<a href="mailto:sebastian.huber@embedded-brains.de">sebastian.huber@embedded-brains.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 17/10/2018 17:04, Joel Sherrill wrote:<br>
> Hi<br>
><br>
> We are updating the port of a large third party framework and ran<br>
> into an issue where what I would think are BSD kernel methods<br>
> leak into application space. All but one of the methods is used<br>
> by rtems-libbsd code.<br>
><br>
> I think the following in <machine/param.h> needs to be protected by<br>
> an _KERNEL ifdef.<br>
><br>
> Does that sound OK?<br>
><br>
> ============================<br>
> /*<br>
>  * Mach derived conversion macros<br>
>  */<br>
> #define round_page(x)           (((unsigned long)(x) + PAGE_MASK) & <br>
> ~PAGE_MASK)<br>
> #define trunc_page(x)           ((unsigned long)(x) & ~PAGE_MASK)<br>
><br>
> #define atop(x)                 ((unsigned long)(x) >> PAGE_SHIFT)<br>
> #define ptoa(x)                 ((unsigned long)(x) << PAGE_SHIFT)<br>
><br>
> #define pgtok(x)                ((unsigned long)(x) * (PAGE_SIZE / 1024))<br>
> ============================<br>
<br>
In FreeBSD they are always present:<br>
<br>
<a href="https://github.com/freebsd/freebsd/blob/master/sys/riscv/include/param.h#L97" rel="noreferrer" target="_blank">https://github.com/freebsd/freebsd/blob/master/sys/riscv/include/param.h#L97</a><br>
<br>
The <sys/param.h> is not a POSIX header file. Unfortunately it is <br>
included in <sys/_cpuset.h> and thus in <rtems.h>. I think we should fix.<br>
<br>
Are these macros only used in kernel-space files in libbsd?<br></blockquote><div><br></div><div>Looks that way to me:</div><div><br></div><div>[joel@rtbf64c rtems-libbsd]$ for s in round_page trunc_page atop ptoa pgtok ; do grep -r $s; done | grep -v catopen</div><div>freebsd/sys/kern/sys_pipe.c:    size = round_page(size);</div><div>freebsd/sys/kern/subr_uio.c:    *addr = round_page((vm_offset_t)vms->vm_daddr +</div><div>freebsd/sys/kern/subr_uio.c:    size = (vm_size_t)round_page(sz);</div><div>freebsd/sys/kern/subr_uio.c:    size = (vm_size_t)round_page(sz);</div><div>freebsd/sys/vm/uma_core.c:          atomic_fetchadd_long(&keg->uk_offset, round_page(bytes));</div><div>freebsd/contrib/tcpdump/print-atm.c:            /* SCCOP with some unknown protocol atop it */</div><div>freebsd/contrib/tcpdump/print-ip6.c:                     * which payload can be piggybacked atop a</div><div>freebsd/sys/kern/init_main.c:   pageablemem = ptoa((vm_paddr_t)vm_cnt.v_free_count);</div><div>freebsd/usr.bin/vmstat/vmstat.c:#define vmstat_pgtok(a) ((a) * (sum.v_page_size >> 10))</div><div>freebsd/usr.bin/vmstat/vmstat.c:                                vmstat_pgtok(total.t_avm));</div><div>freebsd/usr.bin/vmstat/vmstat.c:                                vmstat_pgtok(total.t_free));</div><div> </div><div>freebsd/usr.bin/vmstat/vmstat.c defines its own vmstat_pgtok() so I think this is a clean change.</div><div><br></div><div>Going to proceed with assuming it is OK for us.</div><div><br></div><div>Is this something that we may need to discuss with upstream FreeBSD?</div><div><br></div><div>--joel</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
-- <br>
Sebastian Huber, embedded brains GmbH<br>
<br>
Address : Dornierstr. 4, D-82178 Puchheim, Germany<br>
Phone   : +49 89 189 47 41-16<br>
Fax     : +49 89 189 47 41-09<br>
E-Mail  : <a href="mailto:sebastian.huber@embedded-brains.de" target="_blank">sebastian.huber@embedded-brains.de</a><br>
PGP     : Public key available on request.<br>
<br>
Diese Nachricht ist keine geschäftliche Mitteilung im Sinne des EHUG.<br>
<br>
</blockquote></div></div></div>