svn commit: r318561 - in projects/clang500-import: bin/sh cddl/contrib/opensolaris/lib/libzpool/common cddl/usr.sbin/dtrace/tests/tools contrib/netbsd-tests/fs/tmpfs etc etc/cron.d etc/mtree lib/li...
Dimitry Andric
dim at FreeBSD.org
Fri May 19 21:20:06 UTC 2017
Author: dim
Date: Fri May 19 21:20:01 2017
New Revision: 318561
URL: https://svnweb.freebsd.org/changeset/base/318561
Log:
Merge ^/head r318380 through r318559.
Added:
projects/clang500-import/etc/cron.d/
- copied from r318559, head/etc/cron.d/
projects/clang500-import/lib/libc/tests/gen/realpath2_test.c
- copied unchanged from r318559, head/lib/libc/tests/gen/realpath2_test.c
projects/clang500-import/share/man/man4/ccr.4
- copied unchanged from r318559, head/share/man/man4/ccr.4
projects/clang500-import/sys/dev/cxgbe/crypto/
- copied from r318559, head/sys/dev/cxgbe/crypto/
projects/clang500-import/sys/dev/mpr/mpi/mpi2_pci.h
- copied unchanged from r318559, head/sys/dev/mpr/mpi/mpi2_pci.h
projects/clang500-import/sys/modules/cxgbe/ccr/
- copied from r318559, head/sys/modules/cxgbe/ccr/
projects/clang500-import/usr.bin/getconf/tests/
- copied from r318559, head/usr.bin/getconf/tests/
projects/clang500-import/usr.bin/indent/tests/binary.0
- copied unchanged from r318559, head/usr.bin/indent/tests/binary.0
projects/clang500-import/usr.bin/indent/tests/binary.0.stdout
- copied unchanged from r318559, head/usr.bin/indent/tests/binary.0.stdout
Modified:
projects/clang500-import/bin/sh/eval.c
projects/clang500-import/bin/sh/output.c
projects/clang500-import/bin/sh/output.h
projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c
projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh
projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
projects/clang500-import/etc/Makefile
projects/clang500-import/etc/crontab
projects/clang500-import/etc/mtree/BSD.tests.dist
projects/clang500-import/lib/libc/stdlib/qsort.c
projects/clang500-import/lib/libc/tests/gen/Makefile
projects/clang500-import/lib/libthr/thread/thr_attr.c
projects/clang500-import/lib/libthr/thread/thr_exit.c
projects/clang500-import/lib/libthr/thread/thr_sig.c
projects/clang500-import/lib/libthr/thread/thr_spec.c
projects/clang500-import/lib/libthr/thread/thr_stack.c
projects/clang500-import/lib/libthr/thread/thr_symbols.c
projects/clang500-import/lib/libthr/thread/thr_umtx.c
projects/clang500-import/lib/libthr/thread/thr_umtx.h
projects/clang500-import/libexec/rtld-elf/rtld.1
projects/clang500-import/libexec/rtld-elf/rtld.c
projects/clang500-import/sbin/ipfw/tables.c
projects/clang500-import/share/man/man4/Makefile
projects/clang500-import/share/man/man4/cxgbe.4
projects/clang500-import/share/man/man4/mpr.4
projects/clang500-import/share/man/man7/arch.7
projects/clang500-import/share/man/man9/Makefile
projects/clang500-import/share/man/man9/sglist.9
projects/clang500-import/sys/amd64/amd64/sys_machdep.c
projects/clang500-import/sys/amd64/amd64/vm_machdep.c
projects/clang500-import/sys/amd64/include/vmparam.h
projects/clang500-import/sys/arm/arm/sys_machdep.c
projects/clang500-import/sys/arm/arm/vm_machdep.c
projects/clang500-import/sys/arm/include/atomic-v4.h
projects/clang500-import/sys/arm/include/vmparam.h
projects/clang500-import/sys/arm/mv/armada38x/armada38x_mp.c
projects/clang500-import/sys/arm/mv/mpic.c
projects/clang500-import/sys/arm/mv/mv_common.c
projects/clang500-import/sys/arm/mv/mvwin.h
projects/clang500-import/sys/boot/fdt/dts/arm/armada-38x.dtsi
projects/clang500-import/sys/compat/linuxkpi/common/src/linux_compat.c
projects/clang500-import/sys/conf/NOTES
projects/clang500-import/sys/conf/files
projects/clang500-import/sys/crypto/des/des_enc.c
projects/clang500-import/sys/crypto/des/des_setkey.c
projects/clang500-import/sys/ddb/db_access.c
projects/clang500-import/sys/ddb/db_output.c
projects/clang500-import/sys/ddb/db_sym.c
projects/clang500-import/sys/dev/cesa/cesa.c
projects/clang500-import/sys/dev/cesa/cesa.h
projects/clang500-import/sys/dev/cs/if_cs.c
projects/clang500-import/sys/dev/cxgbe/adapter.h
projects/clang500-import/sys/dev/cxgbe/t4_main.c
projects/clang500-import/sys/dev/drm2/ttm/ttm_bo_vm.c
projects/clang500-import/sys/dev/drm2/ttm/ttm_page_alloc.c
projects/clang500-import/sys/dev/etherswitch/e6000sw/e6000sw.c
projects/clang500-import/sys/dev/etherswitch/e6000sw/e6000swreg.h
projects/clang500-import/sys/dev/ixgb/if_ixgb.c
projects/clang500-import/sys/dev/lge/if_lge.c
projects/clang500-import/sys/dev/mlx4/mlx4_core/mlx4_eq.c
projects/clang500-import/sys/dev/mlx4/mlx4_core/mlx4_main.c
projects/clang500-import/sys/dev/mpr/mpi/mpi2.h
projects/clang500-import/sys/dev/mpr/mpi/mpi2_cnfg.h
projects/clang500-import/sys/dev/mpr/mpi/mpi2_hbd.h
projects/clang500-import/sys/dev/mpr/mpi/mpi2_history.txt
projects/clang500-import/sys/dev/mpr/mpi/mpi2_init.h
projects/clang500-import/sys/dev/mpr/mpi/mpi2_ioc.h
projects/clang500-import/sys/dev/mpr/mpi/mpi2_tool.h
projects/clang500-import/sys/dev/mpr/mpr.c
projects/clang500-import/sys/dev/mpr/mpr_config.c
projects/clang500-import/sys/dev/mpr/mpr_mapping.c
projects/clang500-import/sys/dev/mpr/mpr_mapping.h
projects/clang500-import/sys/dev/mpr/mpr_pci.c
projects/clang500-import/sys/dev/mpr/mpr_sas.c
projects/clang500-import/sys/dev/mpr/mpr_sas.h
projects/clang500-import/sys/dev/mpr/mpr_sas_lsi.c
projects/clang500-import/sys/dev/mpr/mpr_table.c
projects/clang500-import/sys/dev/mpr/mpr_table.h
projects/clang500-import/sys/dev/mpr/mpr_user.c
projects/clang500-import/sys/dev/mpr/mprvar.h
projects/clang500-import/sys/dev/mse/mse_isa.c
projects/clang500-import/sys/dev/my/if_my.c
projects/clang500-import/sys/dev/pcn/if_pcn.c
projects/clang500-import/sys/dev/ppbus/immio.c
projects/clang500-import/sys/dev/ppbus/vpoio.c
projects/clang500-import/sys/dev/ppc/ppc.c
projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_def.h
projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_ioctl.c
projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_os.c
projects/clang500-import/sys/dev/qlnx/qlnxe/qlnx_os.h
projects/clang500-import/sys/dev/qlxgb/qla_os.c
projects/clang500-import/sys/dev/qlxgbe/ql_os.c
projects/clang500-import/sys/dev/qlxge/qls_os.c
projects/clang500-import/sys/dev/rl/if_rl.c
projects/clang500-import/sys/dev/sound/pci/fm801.c
projects/clang500-import/sys/dev/speaker/spkr.c
projects/clang500-import/sys/dev/tl/if_tl.c
projects/clang500-import/sys/dev/tws/tws.h
projects/clang500-import/sys/dev/usb/usb_busdma.c
projects/clang500-import/sys/dev/wb/if_wb.c
projects/clang500-import/sys/dev/xen/blkfront/blkfront.c
projects/clang500-import/sys/dev/xen/netfront/netfront.c
projects/clang500-import/sys/dev/xl/if_xl.c
projects/clang500-import/sys/fs/fifofs/fifo_vnops.c
projects/clang500-import/sys/fs/msdosfs/bootsect.h
projects/clang500-import/sys/fs/msdosfs/bpb.h
projects/clang500-import/sys/fs/msdosfs/denode.h
projects/clang500-import/sys/fs/msdosfs/direntry.h
projects/clang500-import/sys/fs/msdosfs/msdosfs_conv.c
projects/clang500-import/sys/fs/msdosfs/msdosfs_fat.c
projects/clang500-import/sys/fs/msdosfs/msdosfs_lookup.c
projects/clang500-import/sys/fs/msdosfs/msdosfs_vfsops.c
projects/clang500-import/sys/fs/msdosfs/msdosfsmount.h
projects/clang500-import/sys/fs/nandfs/nandfs_vnops.c
projects/clang500-import/sys/geom/geom_vfs.c
projects/clang500-import/sys/i386/i386/in_cksum.c
projects/clang500-import/sys/i386/i386/k6_mem.c
projects/clang500-import/sys/i386/i386/sys_machdep.c
projects/clang500-import/sys/i386/i386/vm_machdep.c
projects/clang500-import/sys/i386/ibcs2/ibcs2_misc.c
projects/clang500-import/sys/i386/ibcs2/ibcs2_other.c
projects/clang500-import/sys/i386/ibcs2/ibcs2_signal.c
projects/clang500-import/sys/i386/ibcs2/ibcs2_socksys.c
projects/clang500-import/sys/i386/isa/ccbque.h
projects/clang500-import/sys/i386/isa/elink.c
projects/clang500-import/sys/kern/inflate.c
projects/clang500-import/sys/kern/kern_clock.c
projects/clang500-import/sys/kern/kern_exec.c
projects/clang500-import/sys/kern/kern_fail.c
projects/clang500-import/sys/kern/kern_prot.c
projects/clang500-import/sys/kern/kern_resource.c
projects/clang500-import/sys/kern/kern_sig.c
projects/clang500-import/sys/kern/kern_timeout.c
projects/clang500-import/sys/kern/kern_xxx.c
projects/clang500-import/sys/kern/sched_4bsd.c
projects/clang500-import/sys/kern/subr_sglist.c
projects/clang500-import/sys/kern/sysv_msg.c
projects/clang500-import/sys/kern/vfs_export.c
projects/clang500-import/sys/kern/vfs_mount.c
projects/clang500-import/sys/kern/vfs_syscalls.c
projects/clang500-import/sys/kern/vfs_vnops.c
projects/clang500-import/sys/libkern/qsort.c
projects/clang500-import/sys/libkern/zlib.c
projects/clang500-import/sys/mips/cavium/cryptocteon/cavium_crypto.c
projects/clang500-import/sys/mips/mips/vm_machdep.c
projects/clang500-import/sys/modules/cxgbe/Makefile
projects/clang500-import/sys/modules/dtrace/dtaudit/Makefile
projects/clang500-import/sys/modules/ipsec/Makefile
projects/clang500-import/sys/modules/qlnx/qlnxe/Makefile
projects/clang500-import/sys/net/altq/altq_rio.c
projects/clang500-import/sys/net/altq/altq_rmclass.h
projects/clang500-import/sys/net/bpf_filter.c
projects/clang500-import/sys/net/ethernet.h
projects/clang500-import/sys/net/if_llatbl.c
projects/clang500-import/sys/net/if_media.c
projects/clang500-import/sys/net/slcompress.c
projects/clang500-import/sys/net80211/ieee80211_radiotap.h
projects/clang500-import/sys/netinet/in.c
projects/clang500-import/sys/netinet/in_cksum.c
projects/clang500-import/sys/netinet/ip_divert.c
projects/clang500-import/sys/netinet/ip_icmp.c
projects/clang500-import/sys/netinet6/in6_pcb.c
projects/clang500-import/sys/netinet6/raw_ip6.c
projects/clang500-import/sys/netipsec/ipsec_mbuf.c
projects/clang500-import/sys/netpfil/ipfw/dn_aqm_pie.c
projects/clang500-import/sys/netpfil/ipfw/dn_sched_fq_pie.c
projects/clang500-import/sys/powerpc/conf/NOTES
projects/clang500-import/sys/rpc/clnt.h
projects/clang500-import/sys/sys/sglist.h
projects/clang500-import/tests/sys/fs/tmpfs/Makefile
projects/clang500-import/usr.bin/getconf/Makefile
projects/clang500-import/usr.bin/indent/lexi.c
projects/clang500-import/usr.bin/indent/tests/Makefile
projects/clang500-import/usr.bin/resizewin/resizewin.1
projects/clang500-import/usr.bin/top/top.local.1
projects/clang500-import/usr.sbin/devctl/devctl.8
projects/clang500-import/usr.sbin/makefs/ffs.c
projects/clang500-import/usr.sbin/makefs/ffs.h
projects/clang500-import/usr.sbin/makefs/ffs/ffs_alloc.c
projects/clang500-import/usr.sbin/makefs/ffs/ffs_balloc.c
projects/clang500-import/usr.sbin/makefs/ffs/ffs_bswap.c
projects/clang500-import/usr.sbin/makefs/ffs/mkfs.c
projects/clang500-import/usr.sbin/makefs/makefs.8
projects/clang500-import/usr.sbin/makefs/mtree.c
Directory Properties:
projects/clang500-import/ (props changed)
projects/clang500-import/cddl/ (props changed)
projects/clang500-import/cddl/contrib/opensolaris/ (props changed)
projects/clang500-import/contrib/netbsd-tests/ (props changed)
Modified: projects/clang500-import/bin/sh/eval.c
==============================================================================
--- projects/clang500-import/bin/sh/eval.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/bin/sh/eval.c Fri May 19 21:20:01 2017 (r318561)
@@ -1080,9 +1080,7 @@ evalcommand(union node *cmd, int flags,
#endif
mode = (cmdentry.u.index == EXECCMD)? 0 : REDIR_PUSH;
if (flags == EV_BACKCMD) {
- memout.nleft = 0;
memout.nextc = memout.buf;
- memout.bufsize = 64;
mode |= REDIR_BACKQ;
}
savecmdname = commandname;
@@ -1134,8 +1132,12 @@ cmddone:
exitshell(exitstatus);
if (flags == EV_BACKCMD) {
backcmd->buf = memout.buf;
- backcmd->nleft = memout.nextc - memout.buf;
+ backcmd->nleft = memout.buf != NULL ?
+ memout.nextc - memout.buf : 0;
memout.buf = NULL;
+ memout.nextc = NULL;
+ memout.bufend = NULL;
+ memout.bufsize = 64;
}
if (cmdentry.u.index != EXECCMD)
popredir();
Modified: projects/clang500-import/bin/sh/output.c
==============================================================================
--- projects/clang500-import/bin/sh/output.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/bin/sh/output.c Fri May 19 21:20:01 2017 (r318561)
@@ -71,9 +71,9 @@ __FBSDID("$FreeBSD$");
static int doformat_wr(void *, const char *, int);
-struct output output = {NULL, 0, NULL, OUTBUFSIZ, 1, 0};
-struct output errout = {NULL, 0, NULL, 256, 2, 0};
-struct output memout = {NULL, 0, NULL, 0, MEM_OUT, 0};
+struct output output = {NULL, NULL, NULL, OUTBUFSIZ, 1, 0};
+struct output errout = {NULL, NULL, NULL, 256, 2, 0};
+struct output memout = {NULL, NULL, NULL, 64, MEM_OUT, 0};
struct output *out1 = &output;
struct output *out2 = &errout;
@@ -208,26 +208,26 @@ outbin(const void *data, size_t len, str
void
emptyoutbuf(struct output *dest)
{
- int offset;
+ int offset, newsize;
if (dest->buf == NULL) {
INTOFF;
dest->buf = ckmalloc(dest->bufsize);
dest->nextc = dest->buf;
- dest->nleft = dest->bufsize;
+ dest->bufend = dest->buf + dest->bufsize;
INTON;
} else if (dest->fd == MEM_OUT) {
- offset = dest->bufsize;
+ offset = dest->nextc - dest->buf;
+ newsize = dest->bufsize << 1;
INTOFF;
- dest->bufsize <<= 1;
- dest->buf = ckrealloc(dest->buf, dest->bufsize);
- dest->nleft = dest->bufsize - offset;
+ dest->buf = ckrealloc(dest->buf, newsize);
+ dest->bufsize = newsize;
+ dest->bufend = dest->buf + newsize;
dest->nextc = dest->buf + offset;
INTON;
} else {
flushout(dest);
}
- dest->nleft--;
}
@@ -248,20 +248,13 @@ flushout(struct output *dest)
if (xwrite(dest->fd, dest->buf, dest->nextc - dest->buf) < 0)
dest->flags |= OUTPUT_ERR;
dest->nextc = dest->buf;
- dest->nleft = dest->bufsize;
}
void
freestdout(void)
{
- INTOFF;
- if (output.buf) {
- ckfree(output.buf);
- output.buf = NULL;
- output.nleft = 0;
- }
- INTON;
+ output.nextc = output.buf;
}
Modified: projects/clang500-import/bin/sh/output.h
==============================================================================
--- projects/clang500-import/bin/sh/output.h Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/bin/sh/output.h Fri May 19 21:20:01 2017 (r318561)
@@ -40,7 +40,7 @@
struct output {
char *nextc;
- int nleft;
+ char *bufend;
char *buf;
int bufsize;
short fd;
@@ -75,7 +75,7 @@ void fmtstr(char *, int, const char *, .
void doformat(struct output *, const char *, va_list) __printflike(2, 0);
int xwrite(int, const char *, int);
-#define outc(c, file) (--(file)->nleft < 0? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c)))
+#define outc(c, file) ((file)->nextc == (file)->bufend ? (emptyoutbuf(file), *(file)->nextc++ = (c)) : (*(file)->nextc++ = (c)))
#define out1c(c) outc(c, out1);
#define out2c(c) outcslow(c, out2);
Modified: projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c
==============================================================================
--- projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/cddl/contrib/opensolaris/lib/libzpool/common/kernel.c Fri May 19 21:20:01 2017 (r318561)
@@ -368,7 +368,7 @@ cv_timedwait_hires(kcondvar_t *cv, kmute
int flag)
{
int error;
- timestruc_t ts;
+ timespec_t ts;
hrtime_t delta;
ASSERT(flag == 0 || flag == CALLOUT_FLAG_ABSOLUTE);
@@ -381,8 +381,13 @@ top:
if (delta <= 0)
return (-1);
- ts.tv_sec = delta / NANOSEC;
- ts.tv_nsec = delta % NANOSEC;
+ clock_gettime(CLOCK_REALTIME, &ts);
+ ts.tv_sec += delta / NANOSEC;
+ ts.tv_nsec += delta % NANOSEC;
+ if (ts.tv_nsec >= NANOSEC) {
+ ts.tv_sec++;
+ ts.tv_nsec -= NANOSEC;
+ }
ASSERT(mutex_owner(mp) == curthread);
mp->m_owner = NULL;
Modified: projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh
==============================================================================
--- projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/cddl/usr.sbin/dtrace/tests/tools/exclude.sh Fri May 19 21:20:01 2017 (r318561)
@@ -139,11 +139,6 @@ exclude EXFAIL common/pid/tst.newprobes.
exclude EXFAIL common/pid/tst.provregex2.ksh
exclude EXFAIL common/pid/tst.provregex4.ksh
-# libproc doesn't properly handle probe sites that correspond to multiple
-# symbols.
-exclude EXFAIL common/pid/tst.weak1.d
-exclude EXFAIL common/pid/tst.weak2.d
-
# This test checks for a leading tab on a line before #define. That is illegal
# on Solaris, but the clang pre-processor on FreeBSD is happy with code like
# that.
Modified: projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh
==============================================================================
--- projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/contrib/netbsd-tests/fs/tmpfs/t_vnd.sh Fri May 19 21:20:01 2017 (r318561)
@@ -28,6 +28,10 @@
# Verifies that vnd works with files stored in tmpfs.
#
+# Begin FreeBSD
+MD_DEVICE_FILE=md.device
+# End FreeBSD
+
atf_test_case basic cleanup
basic_head() {
atf_set "descr" "Verifies that vnd works with files stored in tmpfs"
@@ -41,7 +45,10 @@ basic_body() {
# Begin FreeBSD
if true; then
atf_check -s eq:0 -o empty -e empty mkdir mnt
- atf_check -s eq:0 -o empty -e empty mdmfs -F disk.img md3 mnt
+ atf_check -s eq:0 -o empty -e empty mdmfs -F disk.img md mnt
+ md_dev=$(df mnt | awk 'NR != 1 { print $1 }' | xargs basename)
+ atf_check test -c /dev/$md_dev # Sanity check
+ echo -n $md_dev > $TMPDIR/$MD_DEVICE_FILE
else
# End FreeBSD
atf_check -s eq:0 -o empty -e empty vndconfig /dev/vnd3 disk.img
@@ -67,31 +74,23 @@ basic_body() {
done
atf_check -s eq:0 -o empty -e empty umount mnt
- # Begin FreeBSD
- if true; then
- atf_check -s eq:0 -o empty -e empty mdconfig -d -u 3
- else
- # End FreeBSD
atf_check -s eq:0 -o empty -e empty vndconfig -u /dev/vnd3
- # Begin FreeBSD
- fi
- # End FreeBSD
test_unmount
touch done
}
basic_cleanup() {
+ # Begin FreeBSD
+ if md_dev=$(cat $TMPDIR/$MD_DEVICE_FILE); then
+ echo "Will try disconnecting $md_dev"
+ else
+ echo "$MD_DEVICE_FILE doesn't exist in $TMPDIR; returning early"
+ return 0
+ fi
+ # End FreeBSD
if [ ! -f done ]; then
umount mnt 2>/dev/null 1>&2
- # Begin FreeBSD
- if true; then
- [ ! -c /dev/md3 ] || mdconfig -d -u 3
- else
- # End FreeBSD
vndconfig -u /dev/vnd3 2>/dev/null 1>&2
- # Begin FreeBSD
- fi
- # End FreeBSD
fi
}
Modified: projects/clang500-import/etc/Makefile
==============================================================================
--- projects/clang500-import/etc/Makefile Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/etc/Makefile Fri May 19 21:20:01 2017 (r318561)
@@ -7,9 +7,6 @@ FILESGROUPS= FILES
# No need as it is empty and just causes rebuilds since this file does so much.
UPDATE_DEPENDFILE= no
-SUBDIR= \
- newsyslog.conf.d \
- syslog.d
.if ${MK_SENDMAIL} != "no"
SUBDIR+=sendmail
@@ -253,9 +250,11 @@ distribution:
.if ${MK_CASPER} != "no"
${_+_}cd ${.CURDIR}/casper; ${MAKE} install
.endif
+ ${_+_}cd ${.CURDIR}/cron.d; ${MAKE} install
${_+_}cd ${.CURDIR}/defaults; ${MAKE} install
${_+_}cd ${.CURDIR}/devd; ${MAKE} install
${_+_}cd ${.CURDIR}/gss; ${MAKE} install
+ ${_+_}cd ${.CURDIR}/newsyslog.conf.d; ${MAKE} install
.if ${MK_NTP} != "no"
${_+_}cd ${.CURDIR}/ntp; ${MAKE} install
.endif
@@ -265,6 +264,7 @@ distribution:
.endif
${_+_}cd ${.CURDIR}/rc.d; ${MAKE} install
${_+_}cd ${SRCTOP}/share/termcap; ${MAKE} etc-termcap
+ ${_+_}cd ${.CURDIR}/syslog.d; ${MAKE} install
${_+_}cd ${SRCTOP}/usr.sbin/rmt; ${MAKE} etc-rmt
${_+_}cd ${.CURDIR}/pam.d; ${MAKE} install
cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 0444 \
Modified: projects/clang500-import/etc/crontab
==============================================================================
--- projects/clang500-import/etc/crontab Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/etc/crontab Fri May 19 21:20:01 2017 (r318561)
@@ -7,8 +7,6 @@ PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin
#
#minute hour mday month wday who command
#
-*/5 * * * * root /usr/libexec/atrun
-#
# Save some entropy so that /dev/random can re-seed on boot.
*/11 * * * * operator /usr/libexec/save-entropy
#
Modified: projects/clang500-import/etc/mtree/BSD.tests.dist
==============================================================================
--- projects/clang500-import/etc/mtree/BSD.tests.dist Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/etc/mtree/BSD.tests.dist Fri May 19 21:20:01 2017 (r318561)
@@ -622,6 +622,8 @@
..
file2c
..
+ getconf
+ ..
grep
..
gzip
Modified: projects/clang500-import/lib/libc/stdlib/qsort.c
==============================================================================
--- projects/clang500-import/lib/libc/stdlib/qsort.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libc/stdlib/qsort.c Fri May 19 21:20:01 2017 (r318561)
@@ -41,7 +41,7 @@ typedef int cmp_t(void *, const void *
typedef int cmp_t(const void *, const void *);
#endif
static inline char *med3(char *, char *, char *, cmp_t *, void *);
-static inline void swapfunc(char *, char *, int, int, int);
+static inline void swapfunc(char *, char *, size_t, int, int);
#define MIN(a, b) ((a) < (b) ? a : b)
@@ -49,7 +49,7 @@ static inline void swapfunc(char *, cha
* Qsort routine from Bentley & McIlroy's "Engineering a Sort Function".
*/
#define swapcode(TYPE, parmi, parmj, n) { \
- long i = (n) / sizeof (TYPE); \
+ size_t i = (n) / sizeof (TYPE); \
TYPE *pi = (TYPE *) (parmi); \
TYPE *pj = (TYPE *) (parmj); \
do { \
@@ -64,7 +64,7 @@ static inline void swapfunc(char *, cha
es % sizeof(TYPE) ? 2 : es == sizeof(TYPE) ? 0 : 1;
static inline void
-swapfunc( char *a, char *b, int n, int swaptype_long, int swaptype_int)
+swapfunc(char *a, char *b, size_t n, int swaptype_long, int swaptype_int)
{
if (swaptype_long <= 1)
swapcode(long, a, b, n)
@@ -117,7 +117,7 @@ qsort(void *a, size_t n, size_t es, cmp_
#endif
{
char *pa, *pb, *pc, *pd, *pl, *pm, *pn;
- size_t d, r;
+ size_t d1, d2;
int cmp_result;
int swaptype_long, swaptype_int, swap_cnt;
@@ -137,7 +137,8 @@ loop: SWAPINIT(long, a, es);
pl = a;
pn = (char *)a + (n - 1) * es;
if (n > 40) {
- d = (n / 8) * es;
+ size_t d = (n / 8) * es;
+
pl = med3(pl, pl + d, pl + 2 * d, cmp, thunk);
pm = med3(pm - d, pm, pm + d, cmp, thunk);
pn = med3(pn - 2 * d, pn - d, pn, cmp, thunk);
@@ -182,21 +183,43 @@ loop: SWAPINIT(long, a, es);
}
pn = (char *)a + n * es;
- r = MIN(pa - (char *)a, pb - pa);
- vecswap(a, pb - r, r);
- r = MIN(pd - pc, pn - pd - es);
- vecswap(pb, pn - r, r);
- if ((r = pb - pa) > es)
+ d1 = MIN(pa - (char *)a, pb - pa);
+ vecswap(a, pb - d1, d1);
+ d1 = MIN(pd - pc, pn - pd - es);
+ vecswap(pb, pn - d1, d1);
+
+ d1 = pb - pa;
+ d2 = pd - pc;
+ if (d1 <= d2) {
+ /* Recurse on left partition, then iterate on right partition */
+ if (d1 > es) {
+#ifdef I_AM_QSORT_R
+ qsort_r(a, d1 / es, es, thunk, cmp);
+#else
+ qsort(a, d1 / es, es, cmp);
+#endif
+ }
+ if (d2 > es) {
+ /* Iterate rather than recurse to save stack space */
+ /* qsort(pn - d2, d2 / es, es, cmp); */
+ a = pn - d2;
+ n = d2 / es;
+ goto loop;
+ }
+ } else {
+ /* Recurse on right partition, then iterate on left partition */
+ if (d2 > es) {
#ifdef I_AM_QSORT_R
- qsort_r(a, r / es, es, thunk, cmp);
+ qsort_r(pn - d2, d2 / es, es, thunk, cmp);
#else
- qsort(a, r / es, es, cmp);
+ qsort(pn - d2, d2 / es, es, cmp);
#endif
- if ((r = pd - pc) > es) {
- /* Iterate rather than recurse to save stack space */
- a = pn - r;
- n = r / es;
- goto loop;
+ }
+ if (d1 > es) {
+ /* Iterate rather than recurse to save stack space */
+ /* qsort(a, d1 / es, es, cmp); */
+ n = d1 / es;
+ goto loop;
+ }
}
-/* qsort(pn - r, r / es, es, cmp);*/
}
Modified: projects/clang500-import/lib/libc/tests/gen/Makefile
==============================================================================
--- projects/clang500-import/lib/libc/tests/gen/Makefile Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libc/tests/gen/Makefile Fri May 19 21:20:01 2017 (r318561)
@@ -13,6 +13,7 @@ ATF_TESTS_C+= popen_test
ATF_TESTS_C+= posix_spawn_test
ATF_TESTS_C+= wordexp_test
ATF_TESTS_C+= dlopen_empty_test
+ATF_TESTS_C+= realpath2_test
# TODO: t_closefrom, t_cpuset, t_fmtcheck, t_randomid,
# TODO: t_siginfo (fixes require further inspection)
Copied: projects/clang500-import/lib/libc/tests/gen/realpath2_test.c (from r318559, head/lib/libc/tests/gen/realpath2_test.c)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/clang500-import/lib/libc/tests/gen/realpath2_test.c Fri May 19 21:20:01 2017 (r318561, copy of r318559, head/lib/libc/tests/gen/realpath2_test.c)
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2017 Jan Kokemüller
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <atf-c.h>
+
+ATF_TC(realpath_buffer_overflow);
+ATF_TC_HEAD(realpath_buffer_overflow, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test for out of bounds read from 'left' array "
+ "(compile realpath.c with '-fsanitize=address')");
+}
+
+ATF_TC_BODY(realpath_buffer_overflow, tc)
+{
+ char path[MAXPATHLEN] = { 0 };
+ char resb[MAXPATHLEN] = { 0 };
+ size_t i;
+
+ path[0] = 'a';
+ path[1] = '/';
+ for (i = 2; i < sizeof(path) - 1; ++i) {
+ path[i] = 'a';
+ }
+
+ ATF_REQUIRE(realpath(path, resb) == NULL);
+}
+
+ATF_TC(realpath_empty_symlink);
+ATF_TC_HEAD(realpath_empty_symlink, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Test for correct behavior when encountering empty symlinks");
+}
+
+ATF_TC_BODY(realpath_empty_symlink, tc)
+{
+ char path[MAXPATHLEN] = { 0 };
+ char slnk[MAXPATHLEN] = { 0 };
+ char resb[MAXPATHLEN] = { 0 };
+ int fd;
+
+ (void)strlcat(slnk, "empty_symlink", sizeof(slnk));
+
+ ATF_REQUIRE(symlink("", slnk) == 0);
+
+ fd = open("aaa", O_RDONLY | O_CREAT, 0600);
+
+ ATF_REQUIRE(fd >= 0);
+ ATF_REQUIRE(close(fd) == 0);
+
+ (void)strlcat(path, "empty_symlink", sizeof(path));
+ (void)strlcat(path, "/aaa", sizeof(path));
+
+ ATF_REQUIRE_ERRNO(ENOENT, realpath(path, resb) == NULL);
+
+ ATF_REQUIRE(unlink("aaa") == 0);
+ ATF_REQUIRE(unlink(slnk) == 0);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, realpath_buffer_overflow);
+ ATF_TP_ADD_TC(tp, realpath_empty_symlink);
+
+ return atf_no_error();
+}
Modified: projects/clang500-import/lib/libthr/thread/thr_attr.c
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_attr.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_attr.c Fri May 19 21:20:01 2017 (r318561)
@@ -607,7 +607,7 @@ _pthread_attr_setaffinity_np(pthread_att
/* Kernel checks invalid bits, we check it here too. */
size_t i;
for (i = kern_size; i < cpusetsize; ++i) {
- if (((char *)cpusetp)[i])
+ if (((const char *)cpusetp)[i])
return (EINVAL);
}
}
Modified: projects/clang500-import/lib/libthr/thread/thr_exit.c
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_exit.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_exit.c Fri May 19 21:20:01 2017 (r318561)
@@ -119,7 +119,8 @@ _Unwind_GetCFA(struct _Unwind_Context *c
#endif /* PIC */
static void
-thread_unwind_cleanup(_Unwind_Reason_Code code, struct _Unwind_Exception *e)
+thread_unwind_cleanup(_Unwind_Reason_Code code __unused,
+ struct _Unwind_Exception *e __unused)
{
/*
* Specification said that _Unwind_Resume should not be used here,
@@ -130,10 +131,10 @@ thread_unwind_cleanup(_Unwind_Reason_Cod
}
static _Unwind_Reason_Code
-thread_unwind_stop(int version, _Unwind_Action actions,
- int64_t exc_class,
- struct _Unwind_Exception *exc_obj,
- struct _Unwind_Context *context, void *stop_parameter)
+thread_unwind_stop(int version __unused, _Unwind_Action actions,
+ int64_t exc_class __unused,
+ struct _Unwind_Exception *exc_obj __unused,
+ struct _Unwind_Context *context, void *stop_parameter __unused)
{
struct pthread *curthread = _get_curthread();
struct pthread_cleanup *cur;
Modified: projects/clang500-import/lib/libthr/thread/thr_sig.c
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_sig.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_sig.c Fri May 19 21:20:01 2017 (r318561)
@@ -441,7 +441,7 @@ _thr_signal_init(int dlopened)
}
void
-_thr_sigact_unload(struct dl_phdr_info *phdr_info)
+_thr_sigact_unload(struct dl_phdr_info *phdr_info __unused)
{
#if 0
struct pthread *curthread = _get_curthread();
Modified: projects/clang500-import/lib/libthr/thread/thr_spec.c
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_spec.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_spec.c Fri May 19 21:20:01 2017 (r318561)
@@ -42,7 +42,7 @@ __FBSDID("$FreeBSD$");
#include "thr_private.h"
-struct pthread_key _thread_keytable[PTHREAD_KEYS_MAX];
+static struct pthread_key _thread_keytable[PTHREAD_KEYS_MAX];
__weak_reference(_pthread_key_create, pthread_key_create);
__weak_reference(_pthread_key_delete, pthread_key_delete);
Modified: projects/clang500-import/lib/libthr/thread/thr_stack.c
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_stack.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_stack.c Fri May 19 21:20:01 2017 (r318561)
@@ -290,6 +290,19 @@ _thr_stack_alloc(struct pthread_attr *at
return (-1);
}
+/*
+ * Disable this warning from clang:
+ *
+ * cast from 'char *' to
+ * 'struct stack *' increases required alignment from 1 to 8
+ * [-Werror,-Wcast-align]
+ * spare_stack = (struct stack *)
+ */
+#ifdef __clang__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wcast-align"
+#endif
+
/* This function must be called with _thread_list_lock held. */
void
_thr_stack_free(struct pthread_attr *attr)
@@ -316,3 +329,7 @@ _thr_stack_free(struct pthread_attr *att
attr->stackaddr_attr = NULL;
}
}
+
+#ifdef __clang__
+#pragma GCC diagnostic pop
+#endif
Modified: projects/clang500-import/lib/libthr/thread/thr_symbols.c
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_symbols.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_symbols.c Fri May 19 21:20:01 2017 (r318561)
@@ -37,6 +37,10 @@ __FBSDID("$FreeBSD$");
#include "thr_private.h"
+#ifdef __clang__
+#pragma GCC diagnostic ignored "-Wmissing-variable-declarations"
+#endif
+
/* A collection of symbols needed by debugger */
/* int _libthr_debug */
Modified: projects/clang500-import/lib/libthr/thread/thr_umtx.c
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_umtx.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_umtx.c Fri May 19 21:20:01 2017 (r318561)
@@ -168,7 +168,7 @@ __thr_umutex_timedlock(struct umutex *mt
}
int
-__thr_umutex_unlock(struct umutex *mtx, uint32_t id)
+__thr_umutex_unlock(struct umutex *mtx)
{
return (_umtx_op_err(mtx, UMTX_OP_MUTEX_UNLOCK, 0, 0, 0));
Modified: projects/clang500-import/lib/libthr/thread/thr_umtx.h
==============================================================================
--- projects/clang500-import/lib/libthr/thread/thr_umtx.h Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/lib/libthr/thread/thr_umtx.h Fri May 19 21:20:01 2017 (r318561)
@@ -44,7 +44,7 @@ int __thr_umutex_lock(struct umutex *mtx
int __thr_umutex_lock_spin(struct umutex *mtx, uint32_t id) __hidden;
int __thr_umutex_timedlock(struct umutex *mtx, uint32_t id,
const struct timespec *timeout) __hidden;
-int __thr_umutex_unlock(struct umutex *mtx, uint32_t id) __hidden;
+int __thr_umutex_unlock(struct umutex *mtx) __hidden;
int __thr_umutex_trylock(struct umutex *mtx) __hidden;
int __thr_umutex_set_ceiling(struct umutex *mtx, uint32_t ceiling,
uint32_t *oldceiling) __hidden;
@@ -155,7 +155,7 @@ _thr_umutex_unlock2(struct umutex *mtx,
if (atomic_cmpset_rel_32(&mtx->m_owner, id, noncst ?
UMUTEX_RB_NOTRECOV : UMUTEX_UNOWNED))
return (0);
- return (__thr_umutex_unlock(mtx, id));
+ return (__thr_umutex_unlock(mtx));
}
do {
Modified: projects/clang500-import/libexec/rtld-elf/rtld.1
==============================================================================
--- projects/clang500-import/libexec/rtld-elf/rtld.1 Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/libexec/rtld-elf/rtld.1 Fri May 19 21:20:01 2017 (r318561)
@@ -192,7 +192,7 @@ the directories specified by
will be searched first
followed by the set of built-in standard directories.
This variable is unset for set-user-ID and set-group-ID programs.
-.Ev LD_LIBRARY_PATH_FDS
+.It Ev LD_LIBRARY_PATH_FDS
A colon separated list of file descriptor numbers for library directories.
This is intended for use within
.Xr capsicum 4
Modified: projects/clang500-import/libexec/rtld-elf/rtld.c
==============================================================================
--- projects/clang500-import/libexec/rtld-elf/rtld.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/libexec/rtld-elf/rtld.c Fri May 19 21:20:01 2017 (r318561)
@@ -1,10 +1,14 @@
/*-
* Copyright 1996, 1997, 1998, 1999, 2000 John D. Polstra.
* Copyright 2003 Alexander Kabaev <kan at FreeBSD.ORG>.
- * Copyright 2009-2012 Konstantin Belousov <kib at FreeBSD.ORG>.
+ * Copyright 2009-2013 Konstantin Belousov <kib at FreeBSD.ORG>.
* Copyright 2012 John Marino <draco at marino.st>.
+ * Copyright 2014-2017 The FreeBSD Foundation
* All rights reserved.
*
+ * Portions of this software were developed by Konstantin Belousov
+ * under sponsorship from the FreeBSD Foundation.
+ *
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -24,8 +28,6 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
*/
/*
@@ -34,6 +36,9 @@
* John Polstra <jdp at polstra.com>.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <sys/param.h>
#include <sys/mount.h>
#include <sys/mman.h>
@@ -115,8 +120,10 @@ static void objlist_push_head(Objlist *,
static void objlist_push_tail(Objlist *, Obj_Entry *);
static void objlist_put_after(Objlist *, Obj_Entry *, Obj_Entry *);
static void objlist_remove(Objlist *, Obj_Entry *);
+static int parse_args(char* argv[], int argc, bool *use_pathp, int *fdp);
static int parse_integer(const char *);
static void *path_enumerate(const char *, path_enum_proc, void *);
+static void print_usage(const char *argv0);
static void release_object(Obj_Entry *);
static int relocate_object_dag(Obj_Entry *root, bool bind_now,
Obj_Entry *rtldobj, int flags, RtldLockState *lockstate);
@@ -345,12 +352,14 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_
const Elf_Phdr *phdr;
Objlist initlist;
RtldLockState lockstate;
+ struct stat st;
Elf_Addr *argcp;
char **argv, *argv0, **env, **envp, *kexecpath, *library_path_rpath;
caddr_t imgentry;
char buf[MAXPATHLEN];
- int argc, fd, i, mib[2], phnum;
+ int argc, fd, i, mib[2], phnum, rtld_argc;
size_t len;
+ bool dir_enable, explicit_fd, search_in_path;
/*
* On entry, the dynamic linker itself has not been relocated yet.
@@ -419,38 +428,75 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_
assert(aux_info[AT_PHDR] != NULL);
phdr = (const Elf_Phdr *)aux_info[AT_PHDR]->a_un.a_ptr;
if (phdr == obj_rtld.phdr) {
+ if (!trust) {
+ rtld_printf("Tainted process refusing to run binary %s\n",
+ argv0);
+ rtld_die();
+ }
dbg("opening main program in direct exec mode");
if (argc >= 2) {
- argv0 = argv[1];
- fd = open(argv0, O_RDONLY | O_CLOEXEC | O_VERIFY);
+ rtld_argc = parse_args(argv, argc, &search_in_path, &fd);
+ argv0 = argv[rtld_argc];
+ explicit_fd = (fd != -1);
+ if (!explicit_fd)
+ fd = open(argv0, O_RDONLY | O_CLOEXEC | O_VERIFY);
if (fd == -1) {
rtld_printf("Opening %s: %s\n", argv0,
rtld_strerror(errno));
rtld_die();
}
+ if (fstat(fd, &st) == -1) {
+ _rtld_error("failed to fstat FD %d (%s): %s", fd,
+ explicit_fd ? "user-provided descriptor" : argv0,
+ rtld_strerror(errno));
+ rtld_die();
+ }
+
+ /*
+ * Rough emulation of the permission checks done by
+ * execve(2), only Unix DACs are checked, ACLs are
+ * ignored. Preserve the semantic of disabling owner
+ * to execute if owner x bit is cleared, even if
+ * others x bit is enabled.
+ * mmap(2) does not allow to mmap with PROT_EXEC if
+ * binary' file comes from noexec mount. We cannot
+ * set VV_TEXT on the binary.
+ */
+ dir_enable = false;
+ if (st.st_uid == geteuid()) {
+ if ((st.st_mode & S_IXUSR) != 0)
+ dir_enable = true;
+ } else if (st.st_gid == getegid()) {
+ if ((st.st_mode & S_IXGRP) != 0)
+ dir_enable = true;
+ } else if ((st.st_mode & S_IXOTH) != 0) {
+ dir_enable = true;
+ }
+ if (!dir_enable) {
+ rtld_printf("No execute permission for binary %s\n",
+ argv0);
+ rtld_die();
+ }
/*
* For direct exec mode, argv[0] is the interpreter
- * name, we must remove it and shift arguments left by
- * 1 before invoking binary main. Since stack layout
+ * name, we must remove it and shift arguments left
+ * before invoking binary main. Since stack layout
* places environment pointers and aux vectors right
* after the terminating NULL, we must shift
* environment and aux as well.
- * XXX Shift will be > 1 when options are implemented.
*/
+ main_argc = argc - rtld_argc;
+ for (i = 0; i <= main_argc; i++)
+ argv[i] = argv[i + rtld_argc];
+ *argcp -= rtld_argc;
+ environ = env = envp = argv + main_argc + 1;
do {
- *argv = *(argv + 1);
- argv++;
- } while (*argv != NULL);
- *argcp -= 1;
- main_argc = argc - 1;
- environ = env = envp = argv;
- do {
- *envp = *(envp + 1);
+ *envp = *(envp + rtld_argc);
envp++;
} while (*envp != NULL);
aux = auxp = (Elf_Auxinfo *)envp;
- auxpf = (Elf_Auxinfo *)(envp + 1);
+ auxpf = (Elf_Auxinfo *)(envp + rtld_argc);
for (;; auxp++, auxpf++) {
*auxp = *auxpf;
if (auxp->a_type == AT_NULL)
@@ -5236,6 +5282,81 @@ symlook_init_from_req(SymLook *dst, cons
/*
+ * Parse a set of command-line arguments.
+ */
+static int
+parse_args(char* argv[], int argc, bool *use_pathp, int *fdp)
+{
+ const char *arg;
+ int fd, i, j, arglen;
+ char opt;
+
+ dbg("Parsing command-line arguments");
+ *use_pathp = false;
+ *fdp = -1;
+
+ for (i = 1; i < argc; i++ ) {
+ arg = argv[i];
+ dbg("argv[%d]: '%s'", i, arg);
+
+ /*
+ * rtld arguments end with an explicit "--" or with the first
+ * non-prefixed argument.
+ */
+ if (strcmp(arg, "--") == 0) {
+ i++;
+ break;
+ }
+ if (arg[0] != '-')
+ break;
+
+ /*
+ * All other arguments are single-character options that can
+ * be combined, so we need to search through `arg` for them.
+ */
+ arglen = strlen(arg);
+ for (j = 1; j < arglen; j++) {
+ opt = arg[j];
+ if (opt == 'h') {
+ print_usage(argv[0]);
+ rtld_die();
+ } else if (opt == 'f') {
+ /*
+ * -f XX can be used to specify a descriptor for the
+ * binary named at the command line (i.e., the later
+ * argument will specify the process name but the
+ * descriptor is what will actually be executed)
+ */
+ if (j != arglen - 1) {
+ /* -f must be the last option in, e.g., -abcf */
+ _rtld_error("invalid options: %s", arg);
+ rtld_die();
+ }
+ i++;
+ fd = parse_integer(argv[i]);
+ if (fd == -1) {
+ _rtld_error("invalid file descriptor: '%s'",
+ argv[i]);
+ rtld_die();
+ }
+ *fdp = fd;
+ break;
+ /* TODO:
+ } else if (opt == 'p') {
+ *use_pathp = true;
+ */
+ } else {
+ rtld_printf("invalid argument: '%s'\n", arg);
+ print_usage(argv[0]);
+ rtld_die();
+ }
+ }
+ }
+
+ return (i);
+}
+
+/*
* Parse a file descriptor number without pulling in more of libc (e.g. atoi).
*/
static int
@@ -5262,6 +5383,21 @@ parse_integer(const char *str)
return (n);
}
+static void
+print_usage(const char *argv0)
+{
+
+ rtld_printf("Usage: %s [-h] [-f <FD>] [--] <binary> [<args>]\n"
+ "\n"
+ "Options:\n"
+ " -h Display this help message\n"
+ /* TODO: " -p Search in PATH for named binary\n" */
+ " -f <FD> Execute <FD> instead of searching for <binary>\n"
+ " -- End of RTLD options\n"
+ " <binary> Name of process to execute\n"
+ " <args> Arguments to the executed process\n", argv0);
+}
+
/*
* Overrides for libc_pic-provided functions.
*/
Modified: projects/clang500-import/sbin/ipfw/tables.c
==============================================================================
--- projects/clang500-import/sbin/ipfw/tables.c Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/sbin/ipfw/tables.c Fri May 19 21:20:01 2017 (r318561)
@@ -1260,16 +1260,14 @@ tentry_fill_key_type(char *arg, ipfw_obj
if ((p = strchr(arg, ',')) != NULL)
*p++ = '\0';
- if ((port = htons(strtol(arg, NULL, 10))) == 0) {
+ port = htons(strtol(arg, &pp, 10));
+ if (*pp != '\0') {
if ((sent = getservbyname(arg, NULL)) == NULL)
errx(EX_DATAERR, "Unknown service: %s",
arg);
- else
- key = sent->s_port;
+ port = sent->s_port;
}
-
tfe->sport = port;
-
arg = p;
}
@@ -1304,16 +1302,14 @@ tentry_fill_key_type(char *arg, ipfw_obj
if ((p = strchr(arg, ',')) != NULL)
*p++ = '\0';
- if ((port = htons(strtol(arg, NULL, 10))) == 0) {
+ port = htons(strtol(arg, &pp, 10));
+ if (*pp != '\0') {
if ((sent = getservbyname(arg, NULL)) == NULL)
errx(EX_DATAERR, "Unknown service: %s",
arg);
- else
- key = sent->s_port;
+ port = sent->s_port;
}
-
tfe->dport = port;
-
arg = p;
}
Modified: projects/clang500-import/share/man/man4/Makefile
==============================================================================
--- projects/clang500-import/share/man/man4/Makefile Fri May 19 21:18:42 2017 (r318560)
+++ projects/clang500-import/share/man/man4/Makefile Fri May 19 21:20:01 2017 (r318561)
@@ -100,6 +100,7 @@ MAN= aac.4 \
cc_newreno.4 \
cc_vegas.4 \
${_ccd.4} \
+ ccr.4 \
cd.4 \
cdce.4 \
cfi.4 \
Copied: projects/clang500-import/share/man/man4/ccr.4 (from r318559, head/share/man/man4/ccr.4)
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ projects/clang500-import/share/man/man4/ccr.4 Fri May 19 21:20:01 2017 (r318561, copy of r318559, head/share/man/man4/ccr.4)
@@ -0,0 +1,110 @@
+.\" Copyright (c) 2017, Chelsio Inc
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd May 16, 2017
+.Dt CCR 4
+.Os
+.Sh NAME
+.Nm ccr
+.Nd "Chelsio T6 crypto accelerator driver"
+.Sh SYNOPSIS
+To compile this driver into the kernel,
+place the following lines in your
+kernel configuration file:
+.Bd -ragged -offset indeunt
+.Cd "device ccr"
+.Ed
+.Pp
+To load the driver as a
+module at boot time, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+ccr_load="YES"
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-src-projects
mailing list