svn commit: r350367 - head/sys/ufs/ufs
Author: rmacklem Date: Sat Jul 27 01:52:34 2019 New Revision: 350367 URL: https://svnweb.freebsd.org/changeset/base/350367 Log: Lock the vnode before calling ufs_bmap_seekdata(). r346932 replaced a call to vn_bmap_seekhole() with a call to ufs_bmap_seekdata(). Although vn_bmap_seekhole() locks the vnode, ufs_bmap_seekdata() assumes it is already locked. This patch adds locking of the vnode before the ufs_bmap_seekdata() call. If the vn_lock() call fails, it returns EBADF since that is the normal error returned when a file system is forced dismounted and is already listed as an error return in the lseek(2) man page. Discussed with: markj Reviewed by: kib Modified: head/sys/ufs/ufs/ufs_vnops.c Modified: head/sys/ufs/ufs/ufs_vnops.c == --- head/sys/ufs/ufs/ufs_vnops.cFri Jul 26 21:08:01 2019 (r350366) +++ head/sys/ufs/ufs/ufs_vnops.cSat Jul 27 01:52:34 2019 (r350367) @@ -2702,11 +2702,18 @@ static int ufs_ioctl(struct vop_ioctl_args *ap) { struct vnode *vp; + int error; vp = ap->a_vp; switch (ap->a_command) { case FIOSEEKDATA: - return (ufs_bmap_seekdata(vp, (off_t *)ap->a_data)); + error = vn_lock(vp, LK_SHARED); + if (error == 0) { + error = ufs_bmap_seekdata(vp, (off_t *)ap->a_data); + VOP_UNLOCK(vp, 0); + } else + error = EBADF; + return (error); case FIOSEEKHOLE: return (vn_bmap_seekhole(vp, ap->a_command, (off_t *)ap->a_data, ap->a_cred)); ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r350315 - in head/sys: kern sys
Konstantin Belousov wrote: >On Thu, Jul 25, 2019 at 05:46:17AM +, Rick Macklem wrote: >> Author: rmacklem >> Date: Thu Jul 25 05:46:16 2019 >> New Revision: 350315 >> URL: https://svnweb.freebsd.org/changeset/base/350315 >> >> Log: >> Add kernel support for a Linux compatible copy_file_range(2) syscall. > >> Modified: head/sys/kern/syscalls.master >> >=>= >> --- head/sys/kern/syscalls.master Thu Jul 25 03:55:05 2019 >> (r350314) >> +++ head/sys/kern/syscalls.master Thu Jul 25 05:46:16 2019 >> (r350315) >> @@ -3175,6 +3175,16 @@ >> int flag >> ); >> } >> +569 AUE_NULLSTD { >> + ssize_t copy_file_range( >> + int infd, >> + _Inout_opt_ off_t *inoffp, >> + int outfd, >> + _Inout_opt_ off_t *outoffp, >> + size_t len, >> + unsigned int flags >> + ); >> + } > >I sat to write the compat32 shims, and only then noted that len has size_t >type. Why is it size_t and not off_t ? Well, that's what Linux did. Also, since it returns ssize_t, it can't do more than SSIZE_MAX (generally 1/2 of SIZE_T_MAX). Returning ssize_t is also what Linux does and is consistent with read(2)/write(2). rick ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r350315 - in head/sys: kern sys
On Thu, Jul 25, 2019 at 05:46:17AM +, Rick Macklem wrote: > Author: rmacklem > Date: Thu Jul 25 05:46:16 2019 > New Revision: 350315 > URL: https://svnweb.freebsd.org/changeset/base/350315 > > Log: > Add kernel support for a Linux compatible copy_file_range(2) syscall. > Modified: head/sys/kern/syscalls.master > == > --- head/sys/kern/syscalls.master Thu Jul 25 03:55:05 2019 > (r350314) > +++ head/sys/kern/syscalls.master Thu Jul 25 05:46:16 2019 > (r350315) > @@ -3175,6 +3175,16 @@ > int flag > ); > } > +569 AUE_NULLSTD { > + ssize_t copy_file_range( > + int infd, > + _Inout_opt_ off_t *inoffp, > + int outfd, > + _Inout_opt_ off_t *outoffp, > + size_t len, > + unsigned int flags > + ); > + } I sat to write the compat32 shims, and only then noted that len has size_t type. Why is it size_t and not off_t ? ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r349802 - head/sys/fs/ext2fs
Hi; On 2019-07-24 08:21, Ed Maste wrote: On Sun, 7 Jul 2019 at 04:58, Fedor Uporov wrote: Author: fsu Date: Sun Jul 7 08:58:02 2019 New Revision: 349802 URL: https://svnweb.freebsd.org/changeset/base/349802 Log: Add additional check for 'blocks per group' and 'fragments per group' superblock fields. Will you MFC this to stable/12 and stable/11? After light testing, I committed it to stable/12. stable/11 has diverged a lot (the patch doesn't apply cleanly) and since the patch is not critical, it don't think it is worth merging. Cheers, Pedro. ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r350364 - in head/sys/dev/virtio: mmio pci
Author: kp Date: Fri Jul 26 19:16:02 2019 New Revision: 350364 URL: https://svnweb.freebsd.org/changeset/base/350364 Log: virtio: Fix running on machines with memory above 0x We want to allocate a contiguous memory block anywhere in memory, but expressed this as having to be between 0 and 0x. This limits us on 64-bit machines, and outright breaks on machines where memory is mapped above that address range. Allow the full address range to be used for this allocation. Sponsored by: Axiado Modified: head/sys/dev/virtio/mmio/virtio_mmio.c head/sys/dev/virtio/pci/virtio_pci.c Modified: head/sys/dev/virtio/mmio/virtio_mmio.c == --- head/sys/dev/virtio/mmio/virtio_mmio.c Fri Jul 26 19:14:12 2019 (r350363) +++ head/sys/dev/virtio/mmio/virtio_mmio.c Fri Jul 26 19:16:02 2019 (r350364) @@ -440,7 +440,7 @@ vtmmio_alloc_virtqueues(device_t dev, int flags, int n size = vtmmio_read_config_4(sc, VIRTIO_MMIO_QUEUE_NUM_MAX); error = virtqueue_alloc(dev, idx, size, - VIRTIO_MMIO_VRING_ALIGN, 0xUL, info, ); + VIRTIO_MMIO_VRING_ALIGN, ~(vm_paddr_t)0, info, ); if (error) { device_printf(dev, "cannot allocate virtqueue %d: %d\n", Modified: head/sys/dev/virtio/pci/virtio_pci.c == --- head/sys/dev/virtio/pci/virtio_pci.cFri Jul 26 19:14:12 2019 (r350363) +++ head/sys/dev/virtio/pci/virtio_pci.cFri Jul 26 19:16:02 2019 (r350364) @@ -505,7 +505,7 @@ vtpci_alloc_virtqueues(device_t dev, int flags, int nv size = vtpci_read_config_2(sc, VIRTIO_PCI_QUEUE_NUM); error = virtqueue_alloc(dev, idx, size, VIRTIO_PCI_VRING_ALIGN, - 0xUL, info, ); + ~(vm_paddr_t)0, info, ); if (error) { device_printf(dev, "cannot allocate virtqueue %d: %d\n", idx, error); ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r350363 - in head/sys/cam: ctl scsi
Author: mav Date: Fri Jul 26 19:14:12 2019 New Revision: 350363 URL: https://svnweb.freebsd.org/changeset/base/350363 Log: Add support for Long LBA mode parameter block descriptor. It is formally required for SBC Base 2016 feature set. MFC after:2 weeks Modified: head/sys/cam/ctl/ctl.c head/sys/cam/scsi/scsi_all.h Modified: head/sys/cam/ctl/ctl.c == --- head/sys/cam/ctl/ctl.c Fri Jul 26 18:49:20 2019(r350362) +++ head/sys/cam/ctl/ctl.c Fri Jul 26 19:14:12 2019(r350363) @@ -6365,13 +6365,12 @@ int ctl_mode_sense(struct ctl_scsiio *ctsio) { struct ctl_lun *lun = CTL_LUN(ctsio); - int pc, page_code, dbd, subpage; - int alloc_len, page_len, header_len, total_len; - struct scsi_mode_block_descr *block_desc; + int pc, page_code, llba, subpage; + int alloc_len, page_len, header_len, bd_len, total_len; + void *block_desc; struct ctl_page_index *page_index; - dbd = 0; - block_desc = NULL; + llba = 0; CTL_DEBUG_PRINT(("ctl_mode_sense\n")); @@ -6383,9 +6382,10 @@ ctl_mode_sense(struct ctl_scsiio *ctsio) header_len = sizeof(struct scsi_mode_hdr_6); if (cdb->byte2 & SMS_DBD) - dbd = 1; + bd_len = 0; else - header_len += sizeof(struct scsi_mode_block_descr); + bd_len = sizeof(struct scsi_mode_block_descr); + header_len += bd_len; pc = (cdb->page & SMS_PAGE_CTRL_MASK) >> 6; page_code = cdb->page & SMS_PAGE_CODE; @@ -6399,11 +6399,18 @@ ctl_mode_sense(struct ctl_scsiio *ctsio) cdb = (struct scsi_mode_sense_10 *)ctsio->cdb; header_len = sizeof(struct scsi_mode_hdr_10); + if (cdb->byte2 & SMS_DBD) { + bd_len = 0; + } else if (lun->be_lun->lun_type == T_DIRECT) { + if (cdb->byte2 & SMS10_LLBAA) { + llba = 1; + bd_len = sizeof(struct scsi_mode_block_descr_dlong); + } else + bd_len = sizeof(struct scsi_mode_block_descr_dshort); + } else + bd_len = sizeof(struct scsi_mode_block_descr); + header_len += bd_len; - if (cdb->byte2 & SMS_DBD) - dbd = 1; - else - header_len += sizeof(struct scsi_mode_block_descr); pc = (cdb->page & SMS_PAGE_CTRL_MASK) >> 6; page_code = cdb->page & SMS_PAGE_CODE; subpage = cdb->subpage; @@ -6536,12 +6543,8 @@ ctl_mode_sense(struct ctl_scsiio *ctsio) (lun->MODE_CTRL.eca_and_aen & SCP_SWP) != 0) header->dev_specific |= 0x80; /* WP */ } - if (dbd) - header->block_descr_len = 0; - else - header->block_descr_len = - sizeof(struct scsi_mode_block_descr); - block_desc = (struct scsi_mode_block_descr *)[1]; + header->block_descr_len = bd_len; + block_desc = [1]; break; } case MODE_SENSE_10: { @@ -6558,12 +6561,10 @@ ctl_mode_sense(struct ctl_scsiio *ctsio) (lun->MODE_CTRL.eca_and_aen & SCP_SWP) != 0) header->dev_specific |= 0x80; /* WP */ } - if (dbd) - scsi_ulto2b(0, header->block_descr_len); - else - scsi_ulto2b(sizeof(struct scsi_mode_block_descr), - header->block_descr_len); - block_desc = (struct scsi_mode_block_descr *)[1]; + if (llba) + header->flags |= SMH_LONGLBA; + scsi_ulto2b(bd_len, header->block_descr_len); + block_desc = [1]; break; } default: @@ -6574,12 +6575,27 @@ ctl_mode_sense(struct ctl_scsiio *ctsio) * If we've got a disk, use its blocksize in the block * descriptor. Otherwise, just set it to 0. */ - if (dbd == 0) { - if (lun->be_lun->lun_type == T_DIRECT) - scsi_ulto3b(lun->be_lun->blocksize, - block_desc->block_len); - else - scsi_ulto3b(0, block_desc->block_len); + if (bd_len > 0) { + if (lun->be_lun->lun_type == T_DIRECT) { + if (llba) { + struct scsi_mode_block_descr_dlong *bd = block_desc; + if (lun->be_lun->maxlba != 0) +
svn commit: r350362 - head/contrib/llvm/lib/CodeGen
Author: dim Date: Fri Jul 26 18:49:20 2019 New Revision: 350362 URL: https://svnweb.freebsd.org/changeset/base/350362 Log: Pull in r366369 from upstream llvm trunk (by Francis Visoiu Mistrih): [CodeGen][NFC] Simplify checks for stack protector index checking Use `hasStackProtectorIndex()` instead of `getStackProtectorIndex() >= 0`. Pull in r366371 from upstream llvm trunk (by Francis Visoiu Mistrih): [PEI] Don't re-allocate a pre-allocated stack protector slot The LocalStackSlotPass pre-allocates a stack protector and makes sure that it comes before the local variables on the stack. We need to make sure that later during PEI we don't re-allocate a new stack protector slot. If that happens, the new stack protector slot will end up being **after** the local variables that it should be protecting. Therefore, we would have two slots assigned for two different stack protectors, one at the top of the stack, and one at the bottom. Since PEI will overwrite the assigned slot for the stack protector, the load that is used to compare the value of the stack protector will use the slot assigned by PEI, which is wrong. For this, we need to check if the object is pre-allocated, and re-use that pre-allocated slot. Differential Revision: https://reviews.llvm.org/D64757 Pull in r367068 from upstream llvm trunk (by Francis Visoiu Mistrih): [CodeGen] Don't resolve the stack protector frame accesses until PEI Currently, stack protector loads and stores are resolved during LocalStackSlotAllocation (if the pass needs to run). When this is the case, the base register assigned to the frame access is going to be one of the vregs created during LocalStackSlotAllocation. This means that we are keeping a pointer to the stack protector slot, and we're using this pointer to load and store to it. In case register pressure goes up, we may end up spilling this pointer to the stack, which can be a security concern. Instead, leave it to PEI to resolve the frame accesses. In order to do that, we make all stack protector accesses go through frame index operands, then PEI will resolve this using an offset from sp/fp/bp. Differential Revision: https://reviews.llvm.org/D64759 Together, these fix a issue where the stack protection feature in LLVM's ARM backend can be rendered ineffective when the stack protector slot is re-allocated so that it appears after the local variables that it is meant to protect, leaving the function potentially vulnerable to a stack-based buffer overflow. Reported by: andrew Security: https://kb.cert.org/vuls/id/129209/ MFC after:3 days Modified: head/contrib/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp head/contrib/llvm/lib/CodeGen/PrologEpilogInserter.cpp Modified: head/contrib/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp == --- head/contrib/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp Fri Jul 26 17:58:46 2019(r350361) +++ head/contrib/llvm/lib/CodeGen/LocalStackSlotAllocation.cpp Fri Jul 26 18:49:20 2019(r350362) @@ -200,19 +200,27 @@ void LocalStackSlotPass::calculateFrameObjectOffsets(M // Make sure that the stack protector comes before the local variables on the // stack. SmallSet ProtectedObjs; - if (MFI.getStackProtectorIndex() >= 0) { + if (MFI.hasStackProtectorIndex()) { +int StackProtectorFI = MFI.getStackProtectorIndex(); + +// We need to make sure we didn't pre-allocate the stack protector when +// doing this. +// If we already have a stack protector, this will re-assign it to a slot +// that is **not** covering the protected objects. +assert(!MFI.isObjectPreAllocated(StackProtectorFI) && + "Stack protector pre-allocated in LocalStackSlotAllocation"); + StackObjSet LargeArrayObjs; StackObjSet SmallArrayObjs; StackObjSet AddrOfObjs; -AdjustStackOffset(MFI, MFI.getStackProtectorIndex(), Offset, - StackGrowsDown, MaxAlign); +AdjustStackOffset(MFI, StackProtectorFI, Offset, StackGrowsDown, MaxAlign); // Assign large stack objects first. for (unsigned i = 0, e = MFI.getObjectIndexEnd(); i != e; ++i) { if (MFI.isDeadObjectIndex(i)) continue; - if (MFI.getStackProtectorIndex() == (int)i) + if (StackProtectorFI == (int)i) continue; switch (MFI.getObjectSSPLayout(i)) { @@ -343,6 +351,14 @@ bool LocalStackSlotPass::insertFrameReferenceRegisters int FrameIdx = FR.getFrameIndex(); assert(MFI.isObjectPreAllocated(FrameIdx) && "Only pre-allocated locals expected!"); + +// We need to keep the references to the stack protector slot through frame +// index operands so that it gets resolved by PEI rather than this pass. +// This avoids
Re: svn commit: r350135 - head/share/mk
On 26/07/19 05:23, Emmanuel Vadot wrote: > On Fri, 26 Jul 2019 14:58:01 +0200 > Guido Falsi wrote: > Hello, > > I don't know the actual workings of this file and have not checked it in > depth, but this change is causing "make package" to not package > /etc/rc.d/sshd (and others, all the ones being defined in > ${group}PACKAGE variables), which are then missing when upgrading > machines. > > Reverting this change makes packaging things work again. I think this > change is actually wrong and the previous version was correct. > >>> >>> /etc/rc.d/sshd is in the FreeBSD-sshd package, the other ones are also >>> in their own package now, I'll check them all to see if that make sense. >> >> It makes perfect sense for that file to be in the FreeBSD-sshd package >> and that was my first guess when looking for the missing file, but in my >> case it was not present in that package. >> >> By reverting your change it appears to end up in the FreeBSD-runtime >> package. > > Fresh build from today : > > elbarto@wopr> tar tzf FreeBSD-ssh-13.0.s20190726081149.txz /etc/rc.d/sshd > /etc/rc.d/sshd > elbarto@wopr> tar xzf FreeBSD-ssh-13.0.s20190726081149.txz +MANIFEST > elbarto@wopr> jq < +MANIFEST | grep sshd > "/etc/rc.d/sshd": > "1$09d051563f89dbae0f54af42add15f9c16d5bf5c63a32d8eadc5127f665e4de9", > "/etc/ssh/sshd_config": > "1$7501d70e5186360c812b55cf0f0caff51169ca6764222f3fa668c09e8b5823a8", > "/usr/sbin/sshd": > "1$85772d32ba83cf6edd190fe48e949a358b08079a1dcc2c6a0de9addfe5075829", > "/usr/share/man/man5/sshd_config.5.gz": > "1$593bcd2338b124faf735825c52da8d9534f3e4b326a573590e8625f364017b57", > "/usr/share/man/man8/sshd.8.gz": > "1$729b894da4fa632be0ca6e06897943caca0e9d699a8a3c0ed33393e0b7ecec44", > "/etc/rc.d/sshd", > "/etc/ssh/sshd_config" A new build gives me the same result as you. Unluckily I don't have the old packages without the files anymore (my mistake). I have no idea what has been going on. Sorry for the noise and thanks for having listened to me! -- Guido Falsi ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r350361 - head
Author: ian Date: Fri Jul 26 17:58:46 2019 New Revision: 350361 URL: https://svnweb.freebsd.org/changeset/base/350361 Log: Re-wrap the text at 80 columns after fixing the indent in the prior commit. Modified: head/UPDATING Modified: head/UPDATING == --- head/UPDATING Fri Jul 26 16:55:06 2019(r350360) +++ head/UPDATING Fri Jul 26 17:58:46 2019(r350361) @@ -27,12 +27,13 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW: "ln -s 'abort:false,junk:false' /etc/malloc.conf".) 20190713: - Default permissions on the /var/account/acct file (and copies of it rotated - by periodic daily scripts) are changed from 0644 to 0640 because the file - contains sensitive information that should not be world-readable. If the - /var/account directory must be created by rc.d/accounting, the mode used is - now 0750. Admins who use the accounting feature are encouraged to change - the mode of an existing /var/account directory to 0750 or 0700. + Default permissions on the /var/account/acct file (and copies of it + rotated by periodic daily scripts) are changed from 0644 to 0640 + because the file contains sensitive information that should not be + world-readable. If the /var/account directory must be created by + rc.d/accounting, the mode used is now 0750. Admins who use the + accounting feature are encouraged to change the mode of an existing + /var/account directory to 0750 or 0700. 20190620: Entropy collection and the /dev/random device are no longer optional ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r350301 - head/lib/libsysdecode
On Wed, 24 Jul 2019 at 22:04, Cy Schubert wrote: > > In message <201907242106.x6ol6kam068...@repo.freebsd.org>, Ed Maste > writes: > > Author: emaste > > Date: Wed Jul 24 21:06:19 2019 > > New Revision: 350301 > > URL: https://svnweb.freebsd.org/changeset/base/350301 > > > > Log: > > libsysdecode: add explicit dependencies on recently changed headers > > > Hi Ed, > > This breaks 32-bit compatibility builds on amd64. Thanks for the note and sorry about that. lwhsu had a workaround in r350322 and it should have a proper fix as of r350327. ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r350360 - in head: contrib/libcxxrt lib/libcxxrt
Author: dim Date: Fri Jul 26 16:55:06 2019 New Revision: 350360 URL: https://svnweb.freebsd.org/changeset/base/350360 Log: Merge libcxxrt master f96846efbfd508f66d91fcbbef5dd808947c7f6d. Interesting fixes: f96846e Fix std::size_t -> size_t to unbreak build against libc++ 6.0.0 6f4cfa2 Fix the uncaught exception count with rethrowing (PR 239265) db54f53 Added C++14-specific operator delete (#47) PR: 239265 MFC after:3 days Modified: head/contrib/libcxxrt/exception.cc (contents, props changed) head/contrib/libcxxrt/memory.cc (contents, props changed) head/lib/libcxxrt/Makefile head/lib/libcxxrt/Version.map Directory Properties: head/contrib/libcxxrt/ (props changed) head/contrib/libcxxrt/abi_namespace.h (props changed) head/contrib/libcxxrt/auxhelper.cc (props changed) head/contrib/libcxxrt/cxxabi.h (props changed) head/contrib/libcxxrt/dwarf_eh.h (props changed) head/contrib/libcxxrt/dynamic_cast.cc (props changed) head/contrib/libcxxrt/guard.cc (props changed) head/contrib/libcxxrt/libelftc_dem_gnu3.c (props changed) head/contrib/libcxxrt/stdexcept.cc (props changed) head/contrib/libcxxrt/stdexcept.h (props changed) head/contrib/libcxxrt/terminate.cc (props changed) head/contrib/libcxxrt/typeinfo.cc (props changed) head/contrib/libcxxrt/typeinfo.h (props changed) Modified: head/contrib/libcxxrt/exception.cc == --- head/contrib/libcxxrt/exception.cc Fri Jul 26 15:18:11 2019 (r350359) +++ head/contrib/libcxxrt/exception.cc Fri Jul 26 16:55:06 2019 (r350360) @@ -879,6 +879,13 @@ extern "C" void __cxa_rethrow() assert(ex->handlerCount > 0 && "Rethrowing uncaught exception!"); + // `globals->uncaughtExceptions` was decremented by `__cxa_begin_catch`. + // It's normally incremented by `throw_exception`, but this path invokes + // `_Unwind_Resume_or_Rethrow` directly to rethrow the exception. + // This path is only reachable if we're rethrowing a C++ exception - + // foreign exceptions don't adjust any of this state. + globals->uncaughtExceptions++; + // ex->handlerCount will be decremented in __cxa_end_catch in enclosing // catch block @@ -1224,11 +1231,13 @@ extern "C" void *__cxa_begin_catch(void *e) // we see is a foreign exception then we won't have called it yet. __cxa_thread_info *ti = thread_info(); __cxa_eh_globals *globals = >globals; - globals->uncaughtExceptions--; _Unwind_Exception *exceptionObject = static_cast<_Unwind_Exception*>(e); if (isCXXException(exceptionObject->exception_class)) { + // Only exceptions thrown with a C++ exception throwing function will + // increment this, so don't decrement it here. + globals->uncaughtExceptions--; __cxa_exception *ex = exceptionFromPointer(exceptionObject); if (ex->handlerCount == 0) @@ -1365,6 +1374,14 @@ extern "C" std::type_info *__cxa_current_exception_typ } /** + * Cleanup, ensures that `__cxa_end_catch` is called to balance an explicit + * `__cxa_begin_catch` call. + */ +static void end_catch(char *) +{ + __cxa_end_catch(); +} +/** * ABI function, called when an exception specification is violated. * * This function does not return. @@ -1372,6 +1389,12 @@ extern "C" std::type_info *__cxa_current_exception_typ extern "C" void __cxa_call_unexpected(void*exception) { _Unwind_Exception *exceptionObject = static_cast<_Unwind_Exception*>(exception); + // Wrap the call to the unexpected handler in calls to `__cxa_begin_catch` + // and `__cxa_end_catch` so that we correctly update exception counts if + // the unexpected handler throws an exception. + __cxa_begin_catch(exceptionObject); + __attribute__((cleanup(end_catch))) + char unused; if (exceptionObject->exception_class == exception_class) { __cxa_exception *ex = exceptionFromPointer(exceptionObject); Modified: head/contrib/libcxxrt/memory.cc == --- head/contrib/libcxxrt/memory.cc Fri Jul 26 15:18:11 2019 (r350359) +++ head/contrib/libcxxrt/memory.cc Fri Jul 26 16:55:06 2019 (r350360) @@ -151,4 +151,21 @@ void operator delete[](void * ptr) NOEXCEPT ::operator delete(ptr); } +// C++14 additional delete operators +#if __cplusplus >= 201402L + +__attribute__((weak)) +void operator delete(void * ptr, size_t) NOEXCEPT +{ + ::operator delete(ptr); +} + + +__attribute__((weak)) +void operator delete[](void * ptr, size_t) NOEXCEPT +{ + ::operator delete(ptr); +} + +#endif Modified: head/lib/libcxxrt/Makefile == ---
svn commit: r350359 - head/sbin/swapon
Author: dougm Date: Fri Jul 26 15:18:11 2019 New Revision: 350359 URL: https://svnweb.freebsd.org/changeset/base/350359 Log: Rewrite the comments that explain swapon_trim() to make them more comprehensible. Suggested by: rpokala Approved by: markj (mentor) Differential Revision: https://reviews.freebsd.org/D21034 Modified: head/sbin/swapon/swapon.c Modified: head/sbin/swapon/swapon.c == --- head/sbin/swapon/swapon.c Fri Jul 26 13:12:33 2019(r350358) +++ head/sbin/swapon/swapon.c Fri Jul 26 15:18:11 2019(r350359) @@ -746,9 +746,11 @@ swapon_trim(const char *name) off_t ioarg[2], sz; int error, fd; + /* Open a descriptor to create a consumer of the device. */ fd = open(name, O_WRONLY); if (fd < 0) errx(1, "Cannot open %s", name); + /* Find the device size. */ if (fstat(fd, ) < 0) errx(1, "Cannot stat %s", name); if (S_ISREG(sb.st_mode)) @@ -758,18 +760,22 @@ swapon_trim(const char *name) err(1, "ioctl(DIOCGMEDIASIZE)"); } else errx(1, "%s has an invalid file type", name); + /* Trim the device. */ ioarg[0] = 0; ioarg[1] = sz; if (ioctl(fd, DIOCGDELETE, ioarg) != 0) warn("ioctl(DIOCGDELETE)"); + /* Start using the device for swapping, creating a second consumer. */ + error = swapon(name); + /* -* swapon is invoked after trimming, so that the trimming doesn't happen -* after the device is in use for swapping, but before the fd is closed, -* for the benefit of geli, which could otherwise detach the device, -* before swapon, on close. +* Do not close the device until the swap pager has attempted to create +* another consumer. For GELI devices created with the 'detach -l' +* option, removing the last consumer causes the device to be detached +* - that is, to disappear. This ordering ensures that the device will +* not be detached until swapoff is called. */ - error = swapon(name); close(fd); return (error); } ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r350358 - head/cddl/contrib/opensolaris/lib/libzfs/common
Author: bapt Date: Fri Jul 26 13:12:33 2019 New Revision: 350358 URL: https://svnweb.freebsd.org/changeset/base/350358 Log: Fix a bug introduced with parallel mounting of zfs Incorporate a fix from zol: https://github.com/zfsonlinux/zfs/commit/ab5036df1ccbe1b18c1ce6160b5829e8039d94ce commit log from upstream: Fix race in parallel mount's thread dispatching algorithm Strategy of parallel mount is as follows. 1) Initial thread dispatching is to select sets of mount points that don't have dependencies on other sets, hence threads can/should run lock-less and shouldn't race with other threads for other sets. Each thread dispatched corresponds to top level directory which may or may not have datasets to be mounted on sub directories. 2) Subsequent recursive thread dispatching for each thread from 1) is to mount datasets for each set of mount points. The mount points within each set have dependencies (i.e. child directories), so child directories are processed only after parent directory completes. The problem is that the initial thread dispatching in zfs_foreach_mountpoint() can be multi-threaded when it needs to be single-threaded, and this puts threads under race condition. This race appeared as mount/unmount issues on ZoL for ZoL having different timing regarding mount(2) execution due to fork(2)/exec(2) of mount(8). `zfs unmount -a` which expects proper mount order can't unmount if the mounts were reordered by the race condition. There are currently two known patterns of input list `handles` in `zfs_foreach_mountpoint(..,handles,..)` which cause the race condition. 1) #8833 case where input is `/a /a /a/b` after sorting. The problem is that libzfs_path_contains() can't correctly handle an input list with two same top level directories. There is a race between two POSIX threads A and B, * ThreadA for "/a" for test1 and "/a/b" * ThreadB for "/a" for test0/a and in case of #8833, ThreadA won the race. Two threads were created because "/a" wasn't considered as `"/a" contains "/a"`. 2) #8450 case where input is `/ /var/data /var/data/test` after sorting. The problem is that libzfs_path_contains() can't correctly handle an input list containing "/". There is a race between two POSIX threads A and B, * ThreadA for "/" and "/var/data/test" * ThreadB for "/var/data" and in case of #8450, ThreadA won the race. Two threads were created because "/var/data" wasn't considered as `"/" contains "/var/data"`. In other words, if there is (at least one) "/" in the input list, the initial thread dispatching must be single-threaded since every directory is a child of "/", meaning they all directly or indirectly depend on "/". In both cases, the first non_descendant_idx() call fails to correctly determine "path1-contains-path2", and as a result the initial thread dispatching creates another thread when it needs to be single-threaded. Fix a conditional in libzfs_path_contains() to consider above two. Reviewed-by: Brian Behlendorf Reviewed by: Sebastien Roy Signed-off-by: Tomohiro Kusumi PR: 237517, 237397, 239243 Submitted by: Matthew D. Fuller (by email) MFC after:3 days Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c Modified: head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c == --- head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c Fri Jul 26 10:43:07 2019(r350357) +++ head/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_mount.c Fri Jul 26 13:12:33 2019(r350358) @@ -1281,12 +1281,14 @@ mountpoint_cmp(const void *arga, const void *argb) } /* - * Reutrn true if path2 is a child of path1 + * Return true if path2 is a child of path1 or path2 equals path1 or + * path1 is "/" (path2 is always a child of "/"). */ static boolean_t libzfs_path_contains(const char *path1, const char *path2) { - return (strstr(path2, path1) == path2 && path2[strlen(path1)] == '/'); + return (strcmp(path1, path2) == 0 || strcmp(path1, "/") == 0 || + (strstr(path2, path1) == path2 && path2[strlen(path1)] == '/')); } ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r350135 - head/share/mk
On Fri, 26 Jul 2019 14:58:01 +0200 Guido Falsi wrote: > On 26/07/19 05:10, Emmanuel Vadot wrote: > > On Thu, 25 Jul 2019 00:17:31 +0200 > > Guido Falsi wrote: > > > >> On 25/07/19 00:14, Guido Falsi wrote: > >>> On 19/07/19 17:11, Emmanuel Vadot wrote: > Author: manu > Date: Fri Jul 19 15:11:32 2019 > New Revision: 350135 > URL: https://svnweb.freebsd.org/changeset/base/350135 > > Log: > bsd.confs.mk: Test the correct value for the destination package > > Reviewed by: bapt, gjb > Differential Revision: https://reviews.freebsd.org/D20961 > > >>> > >>> Hello, > >>> > >>> I don't know the actual workings of this file and have not checked it in > >>> depth, but this change is causing "make package" to not package > >>> /etc/rc.d/sshd (and others, all the ones being defined in > >>> ${group}PACKAGE variables), which are then missing when upgrading > >>> machines. > >>> > >>> Reverting this change makes packaging things work again. I think this > >>> change is actually wrong and the previous version was correct. > >>> > > > > /etc/rc.d/sshd is in the FreeBSD-sshd package, the other ones are also > > in their own package now, I'll check them all to see if that make sense. > > It makes perfect sense for that file to be in the FreeBSD-sshd package > and that was my first guess when looking for the missing file, but in my > case it was not present in that package. > > By reverting your change it appears to end up in the FreeBSD-runtime > package. Fresh build from today : elbarto@wopr> tar tzf FreeBSD-ssh-13.0.s20190726081149.txz /etc/rc.d/sshd /etc/rc.d/sshd elbarto@wopr> tar xzf FreeBSD-ssh-13.0.s20190726081149.txz +MANIFEST elbarto@wopr> jq < +MANIFEST | grep sshd "/etc/rc.d/sshd": "1$09d051563f89dbae0f54af42add15f9c16d5bf5c63a32d8eadc5127f665e4de9", "/etc/ssh/sshd_config": "1$7501d70e5186360c812b55cf0f0caff51169ca6764222f3fa668c09e8b5823a8", "/usr/sbin/sshd": "1$85772d32ba83cf6edd190fe48e949a358b08079a1dcc2c6a0de9addfe5075829", "/usr/share/man/man5/sshd_config.5.gz": "1$593bcd2338b124faf735825c52da8d9534f3e4b326a573590e8625f364017b57", "/usr/share/man/man8/sshd.8.gz": "1$729b894da4fa632be0ca6e06897943caca0e9d699a8a3c0ed33393e0b7ecec44", "/etc/rc.d/sshd", "/etc/ssh/sshd_config" > > > >> After sending this message I also noticed, it causes the spurious > >> "FreeBSD-zfs" package to be generated again. > > > > Not so spurious, it now contains the rc.d zfs related files. > > I think that I'll remove it anyway, it doesn't make sense. > > It does, but, again reverting your change, those files end up in the > runtime package. Yes reverting make those files end up in the runtime package, aka the default package used when no packages are specified. The change is good but will needs more tweaking in libexec/rc.d/Makefile so files endup when it make sense. > -- > Guido Falsi -- Emmanuel Vadot ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r350135 - head/share/mk
On 26/07/19 05:10, Emmanuel Vadot wrote: > On Thu, 25 Jul 2019 00:17:31 +0200 > Guido Falsi wrote: > >> On 25/07/19 00:14, Guido Falsi wrote: >>> On 19/07/19 17:11, Emmanuel Vadot wrote: Author: manu Date: Fri Jul 19 15:11:32 2019 New Revision: 350135 URL: https://svnweb.freebsd.org/changeset/base/350135 Log: bsd.confs.mk: Test the correct value for the destination package Reviewed by: bapt, gjb Differential Revision: https://reviews.freebsd.org/D20961 >>> >>> Hello, >>> >>> I don't know the actual workings of this file and have not checked it in >>> depth, but this change is causing "make package" to not package >>> /etc/rc.d/sshd (and others, all the ones being defined in >>> ${group}PACKAGE variables), which are then missing when upgrading machines. >>> >>> Reverting this change makes packaging things work again. I think this >>> change is actually wrong and the previous version was correct. >>> > > /etc/rc.d/sshd is in the FreeBSD-sshd package, the other ones are also > in their own package now, I'll check them all to see if that make sense. It makes perfect sense for that file to be in the FreeBSD-sshd package and that was my first guess when looking for the missing file, but in my case it was not present in that package. By reverting your change it appears to end up in the FreeBSD-runtime package. > >> After sending this message I also noticed, it causes the spurious >> "FreeBSD-zfs" package to be generated again. > > Not so spurious, it now contains the rc.d zfs related files. > I think that I'll remove it anyway, it doesn't make sense. It does, but, again reverting your change, those files end up in the runtime package. -- Guido Falsi ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
Re: svn commit: r350135 - head/share/mk
On Thu, 25 Jul 2019 00:17:31 +0200 Guido Falsi wrote: > On 25/07/19 00:14, Guido Falsi wrote: > > On 19/07/19 17:11, Emmanuel Vadot wrote: > >> Author: manu > >> Date: Fri Jul 19 15:11:32 2019 > >> New Revision: 350135 > >> URL: https://svnweb.freebsd.org/changeset/base/350135 > >> > >> Log: > >> bsd.confs.mk: Test the correct value for the destination package > >> > >> Reviewed by: bapt, gjb > >> Differential Revision: https://reviews.freebsd.org/D20961 > >> > > > > Hello, > > > > I don't know the actual workings of this file and have not checked it in > > depth, but this change is causing "make package" to not package > > /etc/rc.d/sshd (and others, all the ones being defined in > > ${group}PACKAGE variables), which are then missing when upgrading machines. > > > > Reverting this change makes packaging things work again. I think this > > change is actually wrong and the previous version was correct. > > /etc/rc.d/sshd is in the FreeBSD-sshd package, the other ones are also in their own package now, I'll check them all to see if that make sense. > After sending this message I also noticed, it causes the spurious > "FreeBSD-zfs" package to be generated again. Not so spurious, it now contains the rc.d zfs related files. I think that I'll remove it anyway, it doesn't make sense. > -- > Guido Falsi -- Emmanuel Vadot ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"
svn commit: r350351 - head/contrib/mandoc
Author: bapt Date: Fri Jul 26 10:00:33 2019 New Revision: 350351 URL: https://svnweb.freebsd.org/changeset/base/350351 Log: Update mandoc to cvs snapshot 2019-07-23 This snapshot among other things includes a fix for a crash of mandoc with empty tbl reported by rea@ (his regression test has been incorporated upstream) MFC after:3 weeks Deleted: head/contrib/mandoc/libroff.h Modified: head/contrib/mandoc/Makefile.depend head/contrib/mandoc/TODO head/contrib/mandoc/arch.c head/contrib/mandoc/cgi.c head/contrib/mandoc/configure head/contrib/mandoc/dbm.c head/contrib/mandoc/dbm_map.h head/contrib/mandoc/eqn.7 head/contrib/mandoc/eqn_html.c head/contrib/mandoc/html.c head/contrib/mandoc/html.h head/contrib/mandoc/lib.in head/contrib/mandoc/main.c head/contrib/mandoc/man.7 head/contrib/mandoc/man_html.c head/contrib/mandoc/man_term.c head/contrib/mandoc/man_validate.c head/contrib/mandoc/mandoc.1 head/contrib/mandoc/mandoc.c head/contrib/mandoc/mandoc.css head/contrib/mandoc/mandoc.h head/contrib/mandoc/mandoc_char.7 head/contrib/mandoc/mandoc_headers.3 head/contrib/mandoc/mandoc_msg.c head/contrib/mandoc/mandocdb.c head/contrib/mandoc/manpath.c head/contrib/mandoc/mansearch.c head/contrib/mandoc/mansearch.h head/contrib/mandoc/mdoc.7 head/contrib/mandoc/mdoc_argv.c head/contrib/mandoc/mdoc_markdown.c head/contrib/mandoc/mdoc_term.c head/contrib/mandoc/mdoc_validate.c head/contrib/mandoc/out.c head/contrib/mandoc/read.c head/contrib/mandoc/roff.7 head/contrib/mandoc/roff.c head/contrib/mandoc/roff_html.c head/contrib/mandoc/tag.c head/contrib/mandoc/tbl_html.c head/contrib/mandoc/tbl_term.c head/contrib/mandoc/term.c Directory Properties: head/contrib/mandoc/ (props changed) Modified: head/contrib/mandoc/Makefile.depend == --- head/contrib/mandoc/Makefile.depend Fri Jul 26 09:53:21 2019 (r350350) +++ head/contrib/mandoc/Makefile.depend Fri Jul 26 10:00:33 2019 (r350351) @@ -29,7 +29,7 @@ dbm.o: dbm.c config.h mansearch.h dbm_map.h dbm.h dbm_map.o: dbm_map.c config.h mansearch.h dbm_map.h dbm.h demandoc.o: demandoc.c config.h mandoc.h roff.h man.h mdoc.h mandoc_parse.h eqn.o: eqn.c config.h mandoc_aux.h mandoc.h roff.h eqn.h libmandoc.h eqn_parse.h -eqn_html.o: eqn_html.c config.h mandoc.h eqn.h out.h html.h +eqn_html.o: eqn_html.c config.h mandoc.h roff.h eqn.h out.h html.h eqn_term.o: eqn_term.c config.h eqn.h out.h term.h html.o: html.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h roff.h out.h html.h manconf.h main.h lib.o: lib.c config.h roff.h libmdoc.h lib.in @@ -37,16 +37,16 @@ main.o: main.c config.h mandoc_aux.h mandoc.h mandoc_x man.o: man.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h man_html.o: man_html.c config.h mandoc_aux.h mandoc.h roff.h man.h out.h html.h main.h man_macro.o: man_macro.c config.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h -man_term.o: man_term.c config.h mandoc_aux.h roff.h man.h out.h term.h main.h +man_term.o: man_term.c config.h mandoc_aux.h mandoc.h roff.h man.h out.h term.h tag.h main.h man_validate.o: man_validate.c config.h mandoc_aux.h mandoc.h roff.h man.h libmandoc.h roff_int.h libman.h mandoc.o: mandoc.c config.h mandoc_aux.h mandoc.h roff.h libmandoc.h roff_int.h mandoc_aux.o: mandoc_aux.c config.h mandoc.h mandoc_aux.h -mandoc_msg.o: mandoc_msg.c mandoc.h +mandoc_msg.o: mandoc_msg.c config.h mandoc.h mandoc_ohash.o: mandoc_ohash.c mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc_xr.o: mandoc_xr.c mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc_xr.h mandocd.o: mandocd.c config.h mandoc.h roff.h mdoc.h man.h mandoc_parse.h main.h manconf.h mandocdb.o: mandocdb.c config.h compat_fts.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h roff.h mdoc.h man.h mandoc_parse.h manconf.h mansearch.h dba_array.h dba.h -manpath.o: manpath.c config.h mandoc_aux.h manconf.h +manpath.o: manpath.c config.h mandoc_aux.h mandoc.h manconf.h mansearch.o: mansearch.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h manconf.h mansearch.h dbm.h mdoc.o: mdoc.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h mdoc_argv.o: mdoc_argv.c config.h mandoc_aux.h mandoc.h roff.h mdoc.h libmandoc.h roff_int.h libmdoc.h @@ -67,10 +67,10 @@ roff_term.o: roff_term.c mandoc.h roff.h out.h term.h roff_validate.o: roff_validate.c mandoc.h roff.h libmandoc.h roff_int.h soelim.o: soelim.c config.h compat_stringlist.h st.o: st.c config.h mandoc.h roff.h libmdoc.h -tag.o: tag.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h tag.h +tag.o: tag.c config.h mandoc_aux.h mandoc_ohash.h compat_ohash.h mandoc.h tag.h tbl.o: tbl.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h tbl_parse.h tbl_int.h tbl_data.o: tbl_data.c config.h mandoc_aux.h mandoc.h tbl.h libmandoc.h tbl_int.h
Re: svn commit: r349976 - head
On Thu, 25 Jul 2019 09:32:15 -0600 Ian Lepore wrote: > On Thu, 2019-07-25 at 10:27 -0300, Renato Botelho wrote: > > On 13/07/19 13:48, Ian Lepore wrote: > > > Author: ian > > > Date: Sat Jul 13 16:48:27 2019 > > > New Revision: 349976 > > > URL: https://svnweb.freebsd.org/changeset/base/349976 > > > > > > Log: > > > Add an entry mentioning the permission/mode change to daily > > > accounting files. > > > > > > Modified: > > > head/UPDATING > > > > > > Modified: head/UPDATING > > > === > > > === > > > --- head/UPDATING Sat Jul 13 16:32:19 2019(r349975) > > > +++ head/UPDATING Sat Jul 13 16:48:27 2019(r349976) > > > @@ -31,6 +31,14 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS > > > SLOW: > > > disable the most expensive debugging functionality run > > > "ln -s 'abort:false,junk:false' /etc/malloc.conf".) > > > > > > +20190713: > > > +Default permissions on the /var/account/acct file (and copies > > > of it rotated > > > +by periodic daily scripts) are changed from 0644 to 0640 > > > because the file > > > +contains sensitive information that should not be world- > > > readable. If the > > > +/var/account directory must be created by rc.d/accounting, the > > > mode used is > > > +now 0750. Admins who use the accounting feature are > > > encouraged to change > > > +the mode of an existing /var/account directory to 0750 or > > > 0700. > > > > Block is indented with 4 spaces instead of tabs > > > > Doh! Must've still had my editor set for the $work coding standards. > Fixed in r350324. Thanks! > I just looked at UPDATING (/usr/src is at r350348) and this is the only entry which wraps on a 80 character wide terminal. -- Gary Jennejohn ___ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"