BSD Now

BSD Now

Download on the App Store

BSD Now episodes

  • 234: Code and Community

    GSoC 2018 Projects announced, tutorial FreeBSD jails with iocage, new Code of Conduct for FreeBSD, libhijack, and fancy monitoring for OpenSMTPD

    This episode was brought to you by

    Headlines
    Google Summer of Code 2018
    • FreeBSD
    • FreeBSD Google Summer oF Code Ideas
    • You can join #freebsd-soc on the efnet IRC network to chat with FreeBSD developers interested in mentoring student proposals and projects, past FreeBSD/GSoC students, and other students applying to FreeBSD/GSoC this year.

      • NetBSD
      • You can get a stipend (paid for by Google) and spend a few months getting to know and improving the insides of NetBSD or pkgsrc.

        The schedule is:
        12-27 March Applying
        23 April Find out if you were accepted
        14 May - 22 August Do the project!
        We have some suggestions for suitable projects:
        - ARM EFI bootloader
        - Using libFuzzer on base tools
        - Refactoring ALTQ (QoS implementation) and integrating with NPF
        - Testsuite for libcurses
        - Improve pkgin
        Other suggestions and details are at:
        https://wiki.netbsd.org/projects/gsoc/

        These projects are suggestions; you can come up with your own. Suggestions for other suitable projects are welcome.

        Feel free to contact, or chat around on IRC: irc.freenode.org #netbsd #netbsd-code #pkgsrc

        • Haiku
          • Students: How to Apply for a Haiku Idea
          • Project Ideas
          • > If you have questions you can contact the devs on IRC: irc.freenode.org #haiku
            FreeBSD Jails with iocage
            • Introduction
            • FreeBSD jails allow users to run multiple, isolated instances of FreeBSD on a single server. Iocage simplifies the management of FreeBSD Jails. Following this tutorial, the jails will be configured to bind to an IP address on the jail host's internal network, and the host OS will pass traffic from the external network to the jail.

              The jails will be managed with Iocage. Iocage uses ZFS properties to store configuration data for each jail, so a ZFS file system is required.

              • Network setup These steps will:
                • Set up the internal network.
                • Enable the pf packet filter
                • Configure pf pass internet traffic to and from the jail.
                • PF is full featured firewall, and can do more than just pass traffic to an internal network. Refer to the PF documentation for additional configuration options.

                  • Run the following to configure the internal network and enable pf.
                  • sysrc cloned_interfaces+="lo1"
                    sysrc ifconfig_lo1="inet 192.0.2.1/24"
                    sysrc pf_enable="YES"
                    • Put the following in /etc/pf.conf
                    • # Variables
                      # ext_if should be set to the hosts external NIC
                      ext_if = "vtnet0"
                      jail_if = "lo1"
                      jail_net = $jail_if:network
                      # NAT allows the jails to access the external network
                      nat on $ext_if from $jail_net to any -> ($ext_if)
                      # Redirect traffic on port 80 to the web server jail
                      # Add similar rules for additional jails
                      rdr pass on $ext_if inet proto tcp to port 80 -> 192.0.2.10
                      • Reboot to activate the network changes

                      • ZFS

                      • The best way to use ZFS on a VPS is to attach block storage as a new disk.

                        If block storage is not available, you can optionally use a file as the ZFS device.

                        • Enable and start ZFS.
                        • sysrc zfs_enable="YES"
                          service zfs start
                          • ZFS using Block storage
                          • List the available disks.

                            If you are using a VPS, the block store will probably be the second disk.

                            geom disk list

                            • Create a ZFS pool named jailstore.
                            • zpool create jailstore /dev/vtbd1

                              • ZFS using a file
                              • Create the ZFS file.

                                dd if=/dev/zero of=/zfsfile bs=1M count=4096

                                • Create a ZFS pool named jailstore.
                                • zpool create jailstore /zfsfile

                                  • Install iocage the easy way
                                  • pkg install py36-iocage

                                    Skip to "Using iocage"

                                    • Install iocage the hard way
                                    • Swap file
                                    • Smaller servers may not have enough RAM to build iocage. If needed, create a swap file and reboot.

                                      dd if=/dev/zero of=/swapfile bs=1M count=1024
                                      echo 'swapfile="/swapfile"' >> /etc/rc.conf
                                      reboot
                                      • Install some build dependencies
                                      • pkg install subversion python36 git-lite libgit2 py36-pip

                                        • Building iocage requires the FreeBSD source.
                                        • svn checkout https://svn.freebsd.org/base/releng/11.1 /usr/src

                                          • Get the latest FreeBSD ports tree.
                                          • portsnap fetch
                                            portsnap extract
                                            • build iocage.
                                            • cd /usr/ports/sysutils/iocage/
                                              make install
                                              • Using iocage
                                              • iocage activate jailstore
                                                iocage fetch
                                                iocage create -n www ip4_addr="lo1|192.0.2.10/24" -r 11.1-RELEASE
                                                iocage start www
                                                iocage console www

                                                Once you have a shell inside the jail, install and start Apache.

                                                pkg install apache24
                                                sysrc apache24_enable="yes"
                                                service apache24 start

                                                Port 80 on the jail will now be accessible on the hosts IP address.

                                                • Multiple jails.
                                                • Additional jails can be installed using the example above.

                                                  • Install the new jail with the iocage create command , but use a different IP address
                                                  • Expose the new jail to the network by adding additional rules to pf.conf.
                                                  • iXsystems
                                                    • SNIA Persistent Memory Summit 2018 Report
                                                    • New FreeBSD Code of Conduct

                                                      The FreeBSD Project is inclusive. We want the FreeBSD Project to be a venue where people of all backgrounds can work together to make the best operating system, built by a strong community. These values extend beyond just development to all aspects of the Project. All those given recognition as members of the Project in whatever form are seen as ambassadors of the Project.

                                                      Diversity is a huge strength and is critical to the long term success of the Project. To that end we have a few ground rules that we ask people to adhere to. This code applies equally to everyone representing the FreeBSD Project in any way, from new members, to committers, to the core team itself. These rules are intended to ensure a safe, harassment-free environment for all and to ensure that everyone feels welcome both working within, and interacting with, the Project.

                                                      This document is not an exhaustive list of things that you should not do. Rather, consider it a guide to make it easier to enrich all of us and the technical communities in which we participate.

                                                      This code of conduct applies to all spaces used by the FreeBSD Project, including our mailing lists, IRC channels, and social media, both online and off. Anyone who is found to violate this code of conduct may be sanctioned or expelled from FreeBSD Project controlled spaces at the discretion of the FreeBSD Code of Conduct Committee.

                                                      Some FreeBSD Project spaces may have additional rules in place, which will be made clearly available to participants. Participants are responsible for knowing and abiding by these rules.

                                                      Harassment includes but is not limited to:

                                                      • Comments that reinforce systemic oppression related to gender, gender identity and expression, sexual orientation, disability, mental illness, neurodiversity, physical appearance, body size, age, race, or religion.
                                                      • Unwelcome comments regarding a person's lifestyle choices and practices, including those related to food, health, parenting, drugs, and employment.
                                                      • Deliberate misgendering.
                                                      • Deliberate use of "dead" or rejected names.
                                                      • Gratuitous or off-topic sexual images or behaviour in spaces where they're not appropriate.
                                                      • Physical contact and simulated physical contact (e.g., textual descriptions like "hug" or "backrub") without consent or after a request to stop.
                                                      • Threats of violence.
                                                      • Incitement of violence towards any individual, including encouraging a person to commit suicide or to engage in self-harm.
                                                      • Deliberate intimidation.
                                                      • Stalking or following.
                                                      • Harassing photography or recording, including logging online activity for harassment purposes.
                                                      • Sustained disruption of discussion.
                                                      • Unwelcome sexual attention.
                                                      • Pattern of inappropriate social contact, such as requesting/assuming inappropriate levels of intimacy with others.
                                                      • Continued one-on-one communication after requests to cease.
                                                      • Deliberate "outing" of any private aspect of a person's identity without their consent except as necessary to protect vulnerable people from intentional abuse.
                                                      • Publication of non-harassing private communication without consent.
                                                      • Publication of non-harassing private communication with consent but in a way that intentionally misrepresents the communication (e.g., removes context that changes the meaning).
                                                      • Knowingly making harmful false claims about a person.
                                                      • ***
                                                        Interview - Benno Rice - [email protected] / @jeamland
                                                        News Roundup
                                                        libhijack in PoC||GTFO 0x17!
                                                        • Hijacking Your Free Beasties
                                                        • In the land of red devils known as Beasties exists a system devoid of meaningful exploit mitigations. As we explore this vast land of opportunity, we will meet our ELFish friends, [p]tracing their very moves in order to hijack them. Since unprivileged process debugging is

                                                          enabled by default on FreeBSD, we can abuse PTrace to create anonymous memory mappings, inject code into them, and overwrite PLT/GOT entries. We will revive a tool called libhijack to make our nefarious activities of hijacking ELFs via PTrace relatively easy.

                                                          Nothing presented here is technically new. However, this type of work has not been documented in this much detail, tying it all into one cohesive work. In Phrack 56, Silvio Cesare taught us ELF research enthusiasts how to hook the PLT/GOT. The Phrack 59 article on Runtime Process Infection briefly introduces the concept of injecting shared objects by injecting shellcode via PTrace that calls dlopen(). No other piece of research, however, has discovered the joys of forcing the application to create anonymous memory mappings in which to inject

                                                          Code.

                                                          This is only part one of a series of planned articles that will follow libhijack's development. The end goal is to be able to anonymously inject shared objects. The libhijack project is maintained by the SoldierX community.

                                                          • Previous Research
                                                          • All prior work injects code into the stack, the heap, or existing executable code. All three methods create issues on today's systems. On amd64 and arm64, the two architectures libhijack cares about, the stack is non-executable by default. jemalloc, the heap implementation

                                                            on FreeBSD, creates non-executable mappings. Obviously overwriting existing executable code destroys a part of the executable image.

                                                            • The Role of ELF
                                                            • > FreeBSD provides a nifty API for inspecting the entire virtual memory space of an application. The results returned from the API tells us the protection flags (readable, writable, executable) of each mapping. If FreeBSD provides such a rich API, why would we need to parse the
                                                              ELF headers?

                                                              PLT/GOT hijacking requires parsing ELF headers. One would not be able to find the PLT/GOT without iterating through the Process Headers to find the Dynamic Headers, eventually ending up with the DT_PLTGOT entry.

                                                              With FreeBSD's libprocstat API, we don't have a need for parsing ELF headers until we get to the PLT/GOT stage, but doing so early makes it easier for the attacker using libhijack

                                                              • The Future of libhijack
                                                              • Writing devious code in assembly is cumbersome. Assembly doesn't scale well to multiple architectures. Instead, we would like to write our devious code in C, compiling to a shared object that gets injected anonymously. This requires writing a remote RTLD within libhijack and

                                                                is in progress. Writing a remote RTLD will take a while as doing so is not an easy task.

                                                                Additionally, creation of a general-purpose helper library that gets injected would be helpful. It could aid in PLT/GOT redirection attacks, possibly storing the addresses of functions we've previously hijacked. This work is dependent on the remote RTLD.

                                                                libhijack currently lacks documentation. Once the ABI and API stabilize, formal documentation will be written.

                                                                • Conclusion
                                                                • Using libhijack, we can easily create anonymous memory mappings, inject into them arbitrary code, and hijack the PLT/GOT on FreeBSD. On HardenedBSD, a hardened derivative of FreeBSD, libhijack is fully mitigated through PaX NOEXEC.

                                                                  We've demonstrated that wrapper-style Capsicum is ineffective on FreeBSD. Through the use of libhijack, we emulate a control flow hijack in which the application is forced to call sandbox_open and fdlopen on the resulting file descriptor.

                                                                  Further work to support anonymous injection of full shared objects, along with their dependencies, will be supported in the future. Imagine injecting libpcap into Apache to sniff traffic whenever "GET /pcap" is sent.

                                                                  In order to prevent abuse of PTrace, FreeBSD should set the security.bsd.unprivileged_proc_debug to 0 by default. In order to prevent process manipulation, FreeBSD should implement PaX NOEXEC.

                                                                  • libhijack can be found at https://github.com/SoldierX/libhijack
                                                                  • Introduction to POSIX shell

                                                                    What the heck is the POSIX shell anyway? Well, the POSIX (the Portable Operating System Interface) shell is the standard Unix shell - standard meaning it was formally defined and shipped in a published standard. This makes shell scripts written for it portable, something no other shell can lay claim to. The POSIX shell is basically a formalized version of the venerable Bourne shell, and on your system it lives at /bin/sh, unless you’re one of the unlucky masses for whom this is a symlink to bash.

                                                                    • Why use POSIX shell?
                                                                    • The “Bourne Again shell”, aka bash, is not standardized. Its grammar, features, and behavior aren’t formally written up anywhere, and only one implementation of bash exists. Without a standard, bash is defined by its implementation. POSIX shell, on the other hand, has many competing implementations on many different operating systems - all of which are compatible with each other because they conform to the standard.

                                                                      Any shell that utilizes features specific to Bash are not portable, which means you cannot take them with you to any other system. Many Linux-based systems do not use Bash or GNU coreutils. Outside of Linux, pretty much everyone but Hurd does not ship GNU tools, including bash1. On any of these systems, scripts using “bashisms” will not work.

                                                                      This is bad if your users wish to utilize your software anywhere other than GNU/Linux. If your build tooling utilizes bashisms, your software will not build on anything but GNU/Linux. If you ship runtime scripts that use bashisms, your software will not run on anything but GNU/Linux. The case for sticking to POSIX shell in shipping software is compelling, but I argue that you should stick to POSIX shell for your personal scripts, too. You might not care now, but when you feel like flirting with other Unicies you’ll thank me when all of your scripts work.

                                                                      One place where POSIX shell does not shine is for interactive use - a place where I think bash sucks, too. Any shell you want to use for your day-to-day command line work is okay in my book. I use fish. Use whatever you like interactively, but stick to POSIX sh for your scripts.

                                                                      • How do I use POSIX shell?
                                                                      • At the top of your scripts, put #!/bin/sh. You don’t have to worry about using env here like you might have been trained to do with bash: /bin/sh is the standardized location for the POSIX shell, and any standards-conforming system will either put it there or make your script work anyway.

                                                                        The next step is to avoid bashisms. There are many, but here are a few that might trip you up:

                                                                        • [[ condition ]] does not work; use [ condition ]
                                                                        • Arrays do not work; use IFS
                                                                        • Local variables do not work; use a subshell
                                                                        • The easiest way to learn about POSIX shell is to read the standard - it’s not too dry and shorter than you think.

                                                                          • Using standard coreutils
                                                                          • The last step to writing portable scripts is to use portable tools. Your system may have GNU coreutils installed, which provides tools like grep and cut. Unfortunately, GNU has extended these tools with its own non-portable flags and tools. It’s important that you avoid these.

                                                                            One dead giveaway of a non-portable flag is long flags, e.g. grep --file=FILE as opposed to grep -f. The POSIX standard only defines the getopt function - not the proprietary GNU getopt_long function that’s used to interpret long options. As a result, no long flags are standardized. You might worry that this will make your scripts difficult to understand, but I think that on the whole it will not. Shell scripts are already pretty alien and require some knowledge to understand. Is knowledge of what the magic word grep means much different from knowledge of what grep -E means?

                                                                            I also like that short flags allow you to make more concise command lines. Which is better: ps --all --format=user --without-tty, or ps -aux? If you are inclined to think the former, do you also prefer function(a, b, c) { return a + b + c; } over (a, b, c) => a + b + c? Conciseness matters, and POSIX shell supports comments if necessary!

                                                                            • Some tips for using short flags:
                                                                            • They can be collapsed: cmd -a -b -c is equivalent to cmd -abc
                                                                            • If they take additional arguments, either a space or no separation is acceptable: cmd -f"hello world" or cmd -f "hello world"
                                                                            • A good reference for learning about standardized commands is, once again, the standard. From this page, search for the command you want, or navigate through “Shell & Utilities” -> “Utilities” for a list. If you have man-pages installed, you will also find POSIX man pages installed on your system with the p postfix, such as man 1p grep. Note: at the time of writing, the POSIX man pages do not use dashes if your locale is UTF-8, which makes searching for flags with / difficult. Use env LC_ALL=POSIX man 1p grep if you need to search for flags, and I’ll speak to the maintainer of man-pages about this.

                                                                              FreeBSD Broadcom Wi-Fi Improvements
                                                                              • Introduction
                                                                              • Since 2015, I've been working on improving FreeBSD support for Broadcom Wi-Fi devices and SoCs, including authoring the bhnd(4) driver family, which provides a unified bus and driver programming interface for these devices.

                                                                                First committed in early 2016, bhnd(4) allowed us to quickly bring up FreeBSD/MIPS on Broadcom SoCs, but it has taken much longer to implement the full set of features required to support modern Broadcom SoftMAC Wi-Fi hardware.

                                                                                Thanks to the generosity of the FreeBSD Foundation, I've recently finished implementing the necessary improvements to the bhnd(4) driver family. With these changes in place, I was finally able to port the existing bwn(4) Broadcom SoftMAC Wi-Fi driver to the bhnd(4) bus, and implement initial support for the BCM43224 and BCM43225 chipsets, with additional hardware support to be forthcoming.

                                                                                Now that my efforts on FreeBSD/Broadcom Wi-Fi support have progressed far enough to be generally useful, I wanted to take some time to provide a brief overview of Broadcom's Wi-Fi hardware, and explain how my work provides a foundation for further FreeBSD Broadcom Wi-Fi/SoC improvements.

                                                                                • A Brief Background on Broadcom Wi-Fi Hardware
                                                                                • Broadcom's Wi-Fi devices are members of the Broadcom Home Networking Division (BHND) device family; other BHND devices include MIPS/ARM SoCs (including Wi-Fi SoCs commonly found in consumer access points), as well as a large variety of related networking hardware.

                                                                                  • BHND devices utilize a common set of Broadcom IP cores (or "functional blocks") connected via one of two on-chip bus architectures:
                                                                                  • Hardware designed prior to 2009 used Broadcom’s “SSB” backplane architecture, based on Sonics Silicon’s interconnect IP.
                                                                                  • Subsequent hardware adopted Broadcom’s “BCMA” backplane, based on ARM’s AMBA IP. The IP cores used in earlier SSB-based devices were adapted for compatibility with the new backplane.
                                                                                  • When BHND hardware is used in a PCI Wi-Fi card, or a SDIO Wi-Fi module, the device's dual-mode peripheral controller is configured to operate as an endpoint device on the host's peripheral bus, bridging access to the SoC hardware:

                                                                                    • Host access to SoC address space is provided via a set of register windows (e.g., a set of configurable windows into SoC address space mapped via PCI BARs)
                                                                                    • DMA is supported by the bridge core’s sparse mapping of host address space into the backplane address space. These address regions may be used as a target for the on-chip DMA engines.
                                                                                    • Any backplane interrupt vectors routed to the bridge core may be mapped by the bridge to host interrupts (e.g., PCI INTx/MSI/MSI-X).
                                                                                    • The host is generally expected to provide drivers for the IP cores found on the SoC backplane; since these cores are found in both BHND SoCs and BHND Wi-Fi devices, it is advantageous to share driver and platform code between the two targets.

                                                                                      • Modernizing FreeBSD's Broadcom SoftMAC Wi-Fi Support

                                                                                        • FreeBSD support for Broadcom SoftMAC Wi-Fi adapters is provided by two partially overlapping PCI/CardBus drivers:
                                                                                        • Legacy Wi-Fi adapters are supported by bwi(4). This driver remains in-tree to support devices incompatible with v4 or later firmware (e.g. BCM4301, BCM4302, BCM4306 rev 1-2), all of which were released prior to December 2002.
                                                                                        • Modern Wi-Fi adapters are supported by bwn(4), with access to on-chip cores mediated by bhnd(4).
                                                                                        • Prior to my work porting bwn(4) to bhnd(4), access to on-chip cores was mediated by siba_bwn, a PCI/WiFi-specific derivative of the legacy siba(4) SSB bus driver. There were two major limitations to siba_bwn that have long blocked adding support for newer SoftMAC Wi-Fi chipsets: the newer BCMA interconnect found in post-2009 hardware was not supported by siba(4), and siba_bwn assumed a PCI/PCIe bridge, preventing its use on FreeBSD/MIPS Broadcom SoCs with interconnect-attached D11 cores.

                                                                                          • The new bhnd(4) driver family, written as a replacement for siba(4) and siba_bwn, provides:
                                                                                          • A unified bus driver interface for both SSB and BCMA on-chip interconnects
                                                                                          • A generic BHND bridge driver framework for host-connected BHND devices (e.g. Wi-Fi adapters, etc)
                                                                                          • A PCI/PCIe bridge core driver, for PCI-attached BHND devices.
                                                                                          • An abstract BHND NVRAM API, with support for the varied NVRAM formats found in BHND Wi-Fi adapters and SoCs.
                                                                                          • Drivers for common BHND platform peripherals (UARTs, SPROM/flash, PMUs, etc)
                                                                                          • By porting bwn(4) to bhnd(4), we are now able to support existing BCMA devices with MAC/PHY/Radio combinations readily supported by bwn(4), as was the case with the BCM43224 and BCM43225 chipsets. This also opens the door to porting additional PHY support from Broadcom’s ISC-licensed Linux drivers, and will allow us to bring up bwn(4) on Broadcom WiSoCs supported by FreeBSD/MIPS.

                                                                                            Monitor OpenSMTPD using Logstash and Grafana

                                                                                            Logs are usefull. Graphs are sexy. Here’s a way to get a view on what happens to your OpenSMTPD traffic, using Web v2.0 tools ; namely Logstash & Grafana.

                                                                                            For those who would not be aware of those tools, logstash is some kind of log-parser that can eat syslog formatted logs and write them into elasticsearch ; in “document” format. Grafana is a Web frontend that can dig into various databases and render graphics from requests.
                                                                                            I won’t go into the whole “how to install” process here. Installation is quite straight forward and online documentation is quite clear.

                                                                                            • What you need
                                                                                            • OpenSMTPD deals with emails and logs its activity via Syslog.

                                                                                              Syslog is configured to send the logs to Logstash.
                                                                                              Logstash has a set of rules configured to transform the text-oriented information into searchable document-oriented data. The transformed data is stored into Elasticsearch.
                                                                                              Elasticsearch provides Web API to search and find stuff.
                                                                                              Grafana connects to ELS to get data and draw the graphs.

                                                                                              Beastie Bits
                                                                                              • CharmBUG Presentation - Writing FreeBSD Malware
                                                                                              • March London *BSD meeting 13/03/18
                                                                                              • FreBSD Ports Workshop
                                                                                              • The history of NetBSD/atari and support for ATARI compatible Milan / OSC2018Osaka
                                                                                              • SSH Mastery, 2nd Edition
                                                                                              • ***
                                                                                                Feedback/Questions
                                                                                                • Stephen - Viewer Interview Question
                                                                                                • pb - trust expanding your 280TB pool
                                                                                                • Tim - ZFS questions for the ZFS Man
                                                                                                • Daniel - ZFS full backup question
                                                                                                • ***
                                                                                                  1 hr 44 min
                                                                                                • 233: High on ZFS

                                                                                                  We explain the physics behind ZFS, DTrace switching to the GPL, Emacs debugging, syncookies coming to PF & FreeBSD’s history on EC2.

                                                                                                  This episode was brought to you by

                                                                                                  Headlines
                                                                                                  128 bit storage: Are you high?
                                                                                                  • For people who have heard about ZFS boiling oceans and wonder where that is coming from, we dug out this old piece from 2004 on the blog of ZFS co-creator Jeff Bonwick, originally from the Sun website.
                                                                                                  • 64 bits would have been plenty ... but then you can't talk out of your ass about boiling oceans then, can you?

                                                                                                    Well, it's a fair question. Why did we make ZFS a 128-bit storage system? What on earth made us think it's necessary? And how do we know it's sufficient? Let's start with the easy one: how do we know it's necessary?
                                                                                                    Some customers already have datasets on the order of a petabyte, or 250 bytes. Thus the 64-bit capacity limit of 264 bytes is only 14 doublings away. Moore's Law for storage predicts that capacity will continue to double every 9-12 months, which means we'll start to hit the 64-bit limit in about a decade. Storage systems tend to live for several decades, so it would be foolish to create a new one without anticipating the needs that will surely arise within its projected lifetime.
                                                                                                    If 64 bits isn't enough, the next logical step is 128 bits. That's enough to survive Moore's Law until I'm dead, and after that, it's not my problem. But it does raise the question: what are the theoretical limits to storage capacity?
                                                                                                    Although we'd all like Moore's Law to continue forever, quantum mechanics imposes some fundamental limits on the computation rate and information capacity of any physical device. In particular, it has been shown that 1 kilogram of matter confined to 1 liter of space can perform at most 1051 operations per second on at most 1031 bits of information [see Seth Lloyd, "Ultimate physical limits to computation." Nature 406, 1047-1054 (2000)]. A fully-populated 128-bit storage pool would contain 2128 blocks = 2137 bytes = 2140 bits; therefore the minimum mass required to hold the bits would be (2140 bits) / (1031 bits/kg) = 136 billion kg.
                                                                                                    That's a lot of gear.
                                                                                                    To operate at the 1031 bits/kg limit, however, the entire mass of the computer must be in the form of pure energy. By E=mc2, the rest energy of 136 billion kg is 1.2x1028 J. The mass of the oceans is about 1.4x1021 kg. It takes about 4,000 J to raise the temperature of 1 kg of water by 1 degree Celcius, and thus about 400,000 J to heat 1 kg of water from freezing to boiling.
                                                                                                    The latent heat of vaporization adds another 2 million J/kg.
                                                                                                    Thus the energy required to boil the oceans is about 2.4x106 J/kg * 1.4x1021 kg =
                                                                                                    3.4x1027 J. Thus, fully populating a 128-bit storage pool would, literally, require more energy than boiling the oceans.

                                                                                                    • Best part of all: you don’t have to understand any of this to use ZFS. Rest assured that you won’t hit any limits with that filesystem for a long time. You still have to buy bigger disks over time, though...
                                                                                                    • ***
                                                                                                      dtrace for Linux, Oracle relicenses dtrace

                                                                                                      At Fosdem we had a talk on dtrace for linux in the Debugging Tools devroom.

                                                                                                      Not explicitly mentioned in that talk, but certainly the most exciting thing, is that Oracle is doing a proper linux kernel port:

                                                                                                      commit e1744f50ee9bc1978d41db7cc93bcf30687853e6
                                                                                                      Author: Tomas Jedlicka
                                                                                                      Date: Tue Aug 1 09:15:44 2017 -0400
                                                                                                      dtrace: Integrate DTrace Modules into kernel proper
                                                                                                      This changeset integrates DTrace module sources into the main kernel
                                                                                                      source tree under the GPLv2 license. Sources have been moved to
                                                                                                      appropriate locations in the kernel tree.

                                                                                                      That is right, dtrace dropped the CDDL and switched to the GPL!

                                                                                                      The user space code dtrace-utils and libdtrace-ctf (a combination of GPLv2 and UPL) can be found on the DTrace Project Source Control page. The NEWS file mentions the license switch (and that it is build upon elfutils, which I personally was pleased to find out).

                                                                                                      The kernel sources (GPLv2+ for the core kernel and UPL for the uapi) are slightly harder to find because they are inside the uek kernel source tree, but following the above commit you can easily get at the whole linux kernel dtrace directory.

                                                                                                      The UPL is the Universal Permissive License, which according to the FSF is a lax, non-copyleft license that is compatible with the GNU GPL.

                                                                                                      Thank you Oracle for making everyone’s life easier by waving your magic relicensing wand!

                                                                                                      Now there is lots of hard work to do to actually properly integrate this. And I am sure there are a lot of technical hurdles when trying to get this upstreamed into the mainline kernel. But that is just hard work. Which we can now start collaborating on in earnest.

                                                                                                      Like systemtap and the Dynamic Probes (dprobes) before it, dtrace is a whole system observability tool combining tracing, profiling and probing/debugging techniques. Something the upstream linux kernel hackers don’t always appreciate when presented as one large system. They prefer having separate small tweaks for tracing, profiling and probing which are mostly separate from each other. It took years for the various hooks, kprobes, uprobes, markers, etc. from systemtap (and other systems) to get upstream. But these days they are. And there is now even a byte code interpreter (eBPF) in the mainline kernel as originally envisioned by dprobes, which systemtap can now target through stapbpf. So with all those techniques now available in the linux kernel it will be exciting to see if dtrace for linux can unite them all.

                                                                                                      Debugging Emacs or: How I Learned to Stop Worrying and Love DTrace

                                                                                                      For some time Elfeed was experiencing a strange, spurious failure. Every so often users were seeing an error (spoiler warning) when updating feeds: “error in process sentinel: Search failed.” If you use Elfeed, you might have even seen this yourself. From the surface it appeared that curl, tasked with the responsibility for downloading feed data, was producing incomplete output despite reporting a successful run. Since the run was successful, Elfeed assumed certain data was in curl’s output buffer, but, since it wasn’t, it failed hard.

                                                                                                      Unfortunately this issue was not reproducible. Manually running curl outside of Emacs never revealed any issues. Asking Elfeed to retry fetching the feeds would work fine. The issue would only randomly rear its head when Elfeed was fetching many feeds in parallel, under stress. By the time the error was discovered, the curl process had exited and vital debugging information was lost. Considering that this was likely to be a bug in Emacs itself, there really wasn’t a reliable way to capture the necessary debugging information from within Emacs Lisp. And, indeed, this later proved to be the case.

                                                                                                      A quick-and-dirty work around is to use condition-case to catch and swallow the error. When the bizarre issue shows up, rather than fail badly in front of the user, Elfeed could attempt to swallow the error — assuming it can be reliably detected — and treat the fetch as simply a failure. That didn’t sit comfortably with me. Elfeed had done its due diligence checking for errors already. Someone was lying to Elfeed, and I intended to catch them with their pants on fire. Someday.

                                                                                                      I’d just need to witness the bug on one of my own machines. Elfeed is part of my daily routine, so surely I’d have to experience this issue myself someday. My plan was, should that day come, to run a modified Elfeed, instrumented to capture extra data. I would have also routinely run Emacs under GDB so that I could inspect the failure more deeply.

                                                                                                      For now I just had to wait to hunt that zebra.

                                                                                                      • Bryan Cantrill, DTrace, and FreeBSD
                                                                                                      • Over the holidays I re-discovered Bryan Cantrill, a systems software engineer who worked for Sun between 1996 and 2010, and is most well known for DTrace. My first exposure to him was in a BSD Now interview in 2015. I had re-watched that interview and decided there was a lot more I had to learn from him. He’s become a personal hero to me. So I scoured the internet for more of his writing and talks.

                                                                                                        Some interesting operating system technology came out of Sun during its final 15 or so years — most notably DTrace and ZFS — and Bryan speaks about it passionately. Almost as a matter of luck, most of it survived the Oracle acquisition thanks to Sun releasing it as open source in just the nick of time. Otherwise it would have been lost forever. The scattered ex-Sun employees, still passionate about their prior work at Sun, along with some of their old customers have since picked up the pieces and kept going as a community under the name illumos. It’s like an open source flotilla.

                                                                                                        Naturally I wanted to get my hands on this stuff to try it out for myself. Is it really as good as they say? Normally I stick to Linux, but it (generally) doesn’t have these Sun technologies available. The main reason is license incompatibility. Sun released its code under the CDDL, which is incompatible with the GPL. Ubuntu does infamously include ZFS, but other distributions are unwilling to take that risk. Porting DTrace is a serious undertaking since it’s got its fingers throughout the kernel, which also makes the licensing issues even more complicated.

                                                                                                        Linux has a reputation for Not Invented Here (NIH) syndrome, and these licensing issues certainly contribute to that. Rather than adopt ZFS and DTrace, they’ve been reinvented from scratch: btrfs instead of ZFS, and a slew of partial options instead of DTrace. Normally I’m most interested in system call tracing, and my go to is strace, though it certainly has its limitations — including this situation of debugging curl under Emacs. Another famous example of NIH is Linux’s epoll(2), which is a broken version of BSD kqueue(2).

                                                                                                        So, if I want to try these for myself, I’ll need to install a different operating system. I’ve dabbled with OmniOS, an OS built on illumos, in virtual machines, using it as an alien environment to test some of my software (e.g. enchive). OmniOS has a philosophy called Keep Your Software To Yourself (KYSTY), which is really just code for “we don’t do packaging.” Honestly, you can’t blame them since they’re a tiny community. The best solution to this is probably pkgsrc, which is essentially a universal packaging system. Otherwise you’re on your own.

                                                                                                        There’s also openindiana, which is a more friendly desktop-oriented illumos distribution. Still, the short of it is that you’re very much on your own when things don’t work. The situation is like running Linux a couple decades ago, when it was still difficult to do.

                                                                                                        If you’re interested in trying DTrace, the easiest option these days is probably FreeBSD. It’s got a big, active community, thorough documentation, and a huge selection of packages. Its license (the BSD license, duh) is compatible with the CDDL, so both ZFS and DTrace have been ported to FreeBSD.

                                                                                                        • What is DTrace?
                                                                                                        • I’ve done all this talking but haven’t yet described what DTrace really is. I won’t pretend to write my own tutorial, but I’ll provide enough information to follow along. DTrace is a tracing framework for debugging production systems in real time, both for the kernel and for applications. The “production systems” part means it’s stable and safe — using DTrace won’t put your system at risk of crashing or damaging data. The “real time” part means it has little impact on performance. You can use DTrace on live, active systems with little impact. Both of these core design principles are vital for troubleshooting those really tricky bugs that only show up in production.

                                                                                                          There are DTrace probes scattered all throughout the system: on system calls, scheduler events, networking events, process events, signals, virtual memory events, etc. Using a specialized language called D (unrelated to the general purpose programming language D), you can dynamically add behavior at these instrumentation points. Generally the behavior is to capture information, but it can also manipulate the event being traced.

                                                                                                          Each probe is fully identified by a 4-tuple delimited by colons: provider, module, function, and probe name. An empty element denotes a sort of wildcard. For example, syscall::open:entry is a probe at the beginning (i.e. “entry”) of open(2). syscall:::entry matches all system call entry probes.

                                                                                                          Unlike strace on Linux which monitors a specific process, DTrace applies to the entire system when active. To run curl under strace from Emacs, I’d have to modify Emacs’ behavior to do so. With DTrace I can instrument every curl process without making a single change to Emacs, and with negligible impact to Emacs. That’s a big deal.

                                                                                                          So, when it comes to this Elfeed issue, FreeBSD is much better poised for debugging the problem. All I have to do is catch it in the act. However, it’s been months since that bug report and I’m not really making this connection yet. I’m just hoping I eventually find an interesting problem where I can apply DTrace.

                                                                                                          • Bryan Cantrill: Talks I have given
                                                                                                          • ***
                                                                                                            News Roundup
                                                                                                            a2k18 Hackathon preview: Syncookies coming to PF

                                                                                                            As you may have heard, the a2k18 hackathon is in progress. As can be seen from the commit messages, several items of goodness are being worked on.

                                                                                                            One eagerly anticipated item is the arrival of TCP syncookies (read: another important tool in your anti-DDoS toolset) in PF. Henning Brauer (henning@) added the code in a series of commits on February 6th, 2018, with this one containing the explanation:

                                                                                                            syncookies for pf.
                                                                                                            when syncookies are on, pf will blindly answer each and every SYN with a syncookie-SYNACK. Upon reception of the ACK completing the 3WHS, pf will reconstruct the original SYN, shove it through pf_test, where state will be created if the ruleset permits it. Then massage the freshly created state (we won't see the SYNACK), set up the sequence number modulator, and call into the existing synproxy code to start the 3WHS with the backend host.
                                                                                                            Add an - somewhat basic for now - adaptive mode where syncookies get enabled if a certain percentage of the state table is filled up with half-open tcp connections. This makes pf firewalls resilient against large synflood attacks.
                                                                                                            syncookies are off by default until we gained more experience, considered experimental for now.
                                                                                                            see http://bulabula.org/papers/2017/bsdcan/ for more details.
                                                                                                            joint work with sashan@, widely discussed and with lots of input by many

                                                                                                            The first release to have this feature available will probably be the upcoming OpenBSD 6.3 if a sufficient number of people test this in their setups (hint, hint). More info is likely to emerge soon in post-hackathon writeups, so watch this space!

                                                                                                            [Pale Moon]
                                                                                                            • A Perfect example of how not to approach OS developers/packagers
                                                                                                            • Removed from OpenBSD Ports due to Licensing Issues
                                                                                                            • FreeBSD Palemoon branding violation
                                                                                                            • Mightnight BSD's response
                                                                                                            • ***
                                                                                                              FreeBSD EC2 History

                                                                                                              A couple years ago Jeff Barr published a blog post with a timeline of EC2 instances. I thought at the time that I should write up a timeline of the FreeBSD/EC2 platform, but I didn't get around to it; but last week, as I prepared to ask for sponsorship for my work I decided that it was time to sit down and collect together the long history of how the platform has evolved and improved over the years.

                                                                                                              Normally I don't edit blog posts after publishing them (with the exception of occasional typographical corrections), but I do plan on keeping this post up to date with future developments.

                                                                                                              • August 25, 2006: Amazon EC2 launches. It supports a single version of Ubuntu Linux; FreeBSD is not available.
                                                                                                              • December 13, 2010: I manage to get FreeBSD running on EC2 t1.micro instances.
                                                                                                              • March 22, 2011: I manage to get FreeBSD running on EC2 "cluster compute" instances.
                                                                                                              • July 8, 2011: I get FreeBSD 8.2 running on all 64-bit EC2 instance types, by marking it as "Windows" in order to get access to Xen/HVM virtualization. (Unfortunately this meant that users had to pay the higher "Windows" hourly pricing.)
                                                                                                              • January 16, 2012: I get FreeBSD 9.0 running on 32-bit EC2 instances via the same "defenestration" trick. (Again, paying the "Windows" prices.)
                                                                                                              • August 16, 2012: I move the FreeBSD rc.d scripts which handle "EC2" functionality (e.g., logging SSH host keys to the console) into the FreeBSD ports tree.
                                                                                                              • October 7, 2012: I rework the build process for FreeBSD 9.1-RC1 and later to use "world" bits extracted from the release ISOs; only the kernel is custom-built. Also, the default SSH user changes from "root" to "ec2-user".
                                                                                                              • October 31, 2012: Amazon launches the "M3" family of instances, which support Xen/HVM without FreeBSD needing to pay the "Windows" tax.
                                                                                                              • November 21, 2012: I get FreeBSD added to the AWS Marketplace.
                                                                                                              • October 2, 2013: I finish merging kernel patches into the FreeBSD base system, and rework the AMI build (again) so that FreeBSD 10.0-ALPHA4 and later use bits extracted from the release ISOs for the entire system (world + kernel). FreeBSD Update can now be used for updating everything (because now FreeBSD/EC2 uses a GENERIC kernel).
                                                                                                              • October 27, 2013: I add code to EC2 images so that FreeBSD 10.0-BETA2 and later AMIs will run FreeBSD Update when they first boot in order to download and install any critical updates.
                                                                                                              • December 1, 2013: I add code to EC2 images so that FreeBSD 10.0-BETA4 and later AMIs bootstrap the pkg tool and install packages at boot time (by default, the "awscli" package).
                                                                                                              • December 9, 2013: I add configinit to FreeBSD 10.0-RC1 and later to allow systems to be easily configured via EC2 user-data.
                                                                                                              • July 1, 2014: Amazon launches the "T2" family of instances; now the most modern family for every type of EC2 instance (regular, high-memory, high-CPU, high-I/O, burstable) supports HVM and there should no longer be any need for FreeBSD users to pay the "Windows tax".
                                                                                                              • November 24, 2014: I add code to FreeBSD 10.2 and later to automatically resize their root filesystems when they first boot; this means that a larger root disk can be specified at instance launch time and everything will work as expected.
                                                                                                              • April 1, 2015: I integrate the FreeBSD/EC2 build process into the FreeBSD release building process; FreeBSD 10.2-BETA1 and later AMIs are built by the FreeBSD release engineering team.
                                                                                                              • January 12, 2016: I enable Intel 82599-based "first generation EC2 Enhanced Networking" in FreeBSD 11.0 and later.
                                                                                                              • June 9, 2016: I enable the new EC2 VGA console functionality in FreeBSD 11.0 and later. (The old serial console also continues to work.)
                                                                                                              • June 24, 2016: Intel 82599-based Enhanced Networking works reliably in FreeBSD 11.0 and later thanks to discovering and working around a Xen bug.
                                                                                                              • June 29, 2016: I improve throughput on Xen blkfront devices (/dev/xbd*) by enabling indirect segment I/Os in FreeBSD 10.4 and later. (I wrote this functionality in July 2015, but left it disabled by default a first because a bug in EC2 caused it to hurt performance on some instances.)
                                                                                                              • July 7, 2016: I fix a bug in FreeBSD's virtual memory initialization in order to allow it to support boot with 128 CPUs; aka. FreeBSD 11.0 and later support the EC2 x1.32xlarge instance type.
                                                                                                              • January 26, 2017: I change the default configuration in FreeBSD 11.1 and later to support EC2's IPv6 networking setup out of the box (once you flip all of the necessary switches to enable IPv6 in EC2 itself).
                                                                                                              • May 20, 2017: In collaboration with Rick Macklem, I make FreeBSD 11.1 and later compatible with the Amazon "Elastic File System" (aka. NFSv4-as-a-service) via the newly added "oneopenown" mount option (and lots of bug fixes).
                                                                                                              • May 25, 2017: I enable support for the Amazon "Elastic Network Adapter" in FreeBSD 11.1 and later. (The vast majority of the work — porting the driver code — was done by Semihalf with sponsorship from Amazon.)
                                                                                                              • December 5, 2017: I change the default configuration in FreeBSD 11.2 and later to make use of the Amazon Time Sync Service (aka. NTP-as-a-service).

                                                                                                              • The current status

                                                                                                              • The upcoming FreeBSD release (11.2) supports: IPv6, Enhanced Networking (both generations), Amazon Elastic File System, Amazon Time Sync Service, both consoles (Serial VGA), and every EC2 instance type (although I'm not sure if FreeBSD has drivers to make use of the FPGA or GPU hardware on those instances).

                                                                                                              • Colin's Patreon' page if you'd like to support him

                                                                                                              • X network transparency
                                                                                                                • X's network transparency has wound up mostly being a failure
                                                                                                                • I was recently reading Mark Dominus's entry about some X keyboard problems, in which he said in passing (quoting himself):

                                                                                                                  I have been wondering for years if X's vaunted network transparency was as big a failure as it seemed: an interesting idea, worth trying out, but one that eventually turned out to be more trouble than it was worth. [...]

                                                                                                                  My first reaction was to bristle, because I use X's network transparency all of the time at work. I have several programs to make it work very smoothly, and some core portions of my environment would be basically impossible without it. But there's a big qualification on my use of X's network transparency, namely that it's essentially all for text. When I occasionally go outside of this all-text environment of xterms and emacs and so on, it doesn't go as well.

                                                                                                                  X's network transparency was not designed as 'it will run xterm well'; originally it was to be something that should let you run almost everything remotely, providing a full environment. Even apart from the practical issues covered in Daniel Stone's slide presentation, it's clear that it's been years since X could deliver a real first class environment over the network. You cannot operate with X over the network in the same way that you do locally. Trying to do so is painful and involves many things that either don't work at all or perform so badly that you don't want to use them.

                                                                                                                  In my view, there are two things that did in general X network transparency. The first is that networks turned out to not be fast enough even for ordinary things that people wanted to do, at least not the way that X used them. The obvious case is web browsers; once the web moved to lots of images and worse, video, that was pretty much it, especially with 24-bit colour.

                                                                                                                  (It's obviously not impossible to deliver video across the network with good performance, since YouTube and everyone else does it. But their video is highly encoded in specialized formats, not handled by any sort of general 'send successive images to the display' system.)

                                                                                                                  The second is that the communication facilities that X provided were too narrow and limited. This forced people to go outside of them in order to do all sorts of things, starting with audio and moving on to things like DBus and other ways of coordinating environments, handling sophisticated configuration systems, modern fonts, and so on. When people designed these additional communication protocols, the result generally wasn't something that could be used over the network (especially not without a bunch of setup work that you had to do in addition to remote X). Basic X clients that use X properties for everything may be genuinely network transparent, but there are very few of those left these days. (Not even xterm is any more, at least if you use XFT fonts. XFT fonts are rendered in the client, and so different hosts may have different renderings of the same thing, cf.)

                                                                                                                  < What remains of X's network transparency is still useful to some of us, but it's only a shadow of what the original design aimed for. I don't think it was a mistake for X to specifically design it in (to the extent that they did, which is less than you might think), and it did help X out pragmatically in the days of X terminals, but that's mostly it.

                                                                                                                  (I continue to think that remote display protocols are useful in general, but I'm in an usual situation. Most people only ever interact with remote machines with either text mode SSH or a browser talking to a web server on the remote machine.)

                                                                                                                  PS: The X protocol issues with synchronous requests that Daniel Stone talks about don't help the situation, but I think that even with those edges sanded off X's network transparency wouldn't be a success. Arguably X's protocol model committed a lesser version of part of the NeWS mistake.

                                                                                                                  • X's network transparency was basically free at the time
                                                                                                                  • I recently wrote an entry about how X's network transparency has wound up mostly being a failure for various reasons. However, there is an important flipside to the story of X's network transparency, and that is that X's network transparency was almost free at the time and in the context it was created. Unlike the situation today, in the beginning X did not have to give up lots of performance or other things in order to get network transparency.

                                                                                                                    X originated in the mid 1980s and it was explicitly created to be portable across various Unixes, especially BSD-derived ones (because those were what universities were mostly using at that time). In the mid to late 1980s, Unix had very few IPC methods, especially portable ones. In particular, BSD systems did not have shared memory (it was called 'System V IPC' for the obvious reasons). BSD had TCP and Unix sockets, some System V machines had TCP (and you could likely assume that more would get it), and in general your safest bet was to assume some sort of abstract stream protocol and then allow for switchable concrete backends. Unsurprisingly, this is exactly what X did; the core protocol is defined as a bidirectional stream of bytes over an abstracted channel. (And the concrete implementation of $DISPLAY has always let you specify the transport mechanism, as well as allowing your local system to pick the best mechanism it has.)

                                                                                                                    Once you've decided that your protocol has to run over abstracted streams, it's not that much more work to make it network transparent (TCP provides streams, after all). X could have refused to make the byte order of the stream clear or required the server and the client to have access to some shared files (eg for fonts), but I don't think either would have been a particularly big win. I'm sure that it took some extra effort and care to make X work across TCP from a different machine, but I don't think it took very much. (At the same time, my explanation here is probably a bit ahistorical. X's initial development seems relatively strongly tied to sometimes having clients on different machines than the display, which is not unreasonable for the era. But it doesn't hurt to get a feature that you want anyway for a low cost.)

                                                                                                                    I believe it's important here that X was intended to be portable across different Unixes. If you don't care about portability and can get changes made to your Unix, you can do better (for example, you can add some sort of shared memory or process to process virtual memory transfer). I'm not sure how the 1980s versions of SunView worked, but I believe they were very SunOS dependent. Wikipedia says SunView was partly implemented in the kernel, which is certainly one way to both share memory and speed things up.

                                                                                                                    PS: Sharing memory through mmap() and friends was years in the future at this point and required significant changes when it arrived.

                                                                                                                    Beastie Bits
                                                                                                                    • Grace Hopper Celebration 2018 Call for Participation
                                                                                                                    • Google Summer of Code: Call for Project Ideas
                                                                                                                    • The OpenBSD Foundation 2018 Fundraising Campaign
                                                                                                                    • SSH Mastery 2/e out
                                                                                                                    • AsiaBSDcon 2018 Registration is open
                                                                                                                    • Tarsnap support for Bitcoin ending April 1st; and a Chrome bug
                                                                                                                    • Feedback/Questions
                                                                                                                      • Todd - Couple Questions
                                                                                                                      • Seth - Tar Snap
                                                                                                                      • Alex - sudo question
                                                                                                                      • Thomas - FreeBSD on ARM?
                                                                                                                      • Albert - Austria BSD User Group
                                                                                                                      • 1 hr 51 min
                                                                                                                      • 232: FOSDEM 2018

                                                                                                                        We talk about our recent trip to FOSDEM, we discuss the pros and cons of permissive licensing, cover the installation of OpenBSD on a dedibox with full-disk encryption, the new Lumina guide repository, and we explain ZFS vs. OpenZFS.

                                                                                                                        This episode was brought to you by

                                                                                                                        Headlines
                                                                                                                        [FOSDEM Trip report]
                                                                                                                        • Your BSDNow hosts were both at FOSDEM in Brussels, Belgium over the weekend.
                                                                                                                        • On the friday before FOSDEM, we held a FreeBSD devsummit (3rd consecutive year), sponsored by the FreeBSD Foundation and organized by Benedict (with the help from Kristof Provost, who did it in previous years but could not make it this year). We had 21 people attend, a good mixture of FreeBSD committers (mostly ports) and guests. After introductions, we collected topics and discussed various topics, including a new plan for a future FreeBSD release roadmap (more frequent releases, so that features from HEAD can be tried out earlier in RELEASES). The devsummit concluded with a nice dinner in a nearby restaurant.
                                                                                                                        • On Saturday, first day of FOSDEM, we set up the FreeBSD Foundation table with flyers, stickers, FreeBSD Journal print editions, and a small RPI 3 demo system that Deb Goodkin brought. Our table was located next to the Illumos table like last year. This allowed us to continue the good relationship that we have with the Illumos people and Allan helped a little bit getting bhyve to run on Illumos with UEFI. Meanwhile, our table was visited by a lot of people who would ask questions about FreeBSD, take info material, or talk about their use cases. We were busy refilling the table throughout the day and luckily, we had many helpers at the table. Some items we had ran out in the early afternoon, an indicator of how popular they were.
                                                                                                                        • Saturday also featured a BSD devroom, organized by Rodrigo Osorio. You can find the list of talks and the recordings on the BSD Devroom schedule. The room was very crowded and popular. Deb Goodkin gave the opening talk with an overview of what the Foundation is doing to change the world. Other speakers from various BSD projects presented their talks after that with a range of topics. Among them, Allan gave his talk about ZFS: Advanced Integration, while Benedict presented his Reflections on Teaching a Unix Class With FreeBSD.
                                                                                                                        • Sunday was just as busy on the FreeBSD table as Saturday and we finally ran out of stickers and some other goodies. We were happy with the results of the two days. Some very interesting conversations at the table about FreeBSD took place, some of which we’re going to follow up afterwards.
                                                                                                                        • Check out the FOSDEM schedule as many talk recordings are already available, and especially the ones from the BSD devroom if you could not attend the conference. We would like to thank everyone who attended the FreeBSD devsummit, who helped out at the FreeBSD table and organized the BSD devroom. Also, thanks to all the speakers, organizers, and helping hands making FOSDEM another success this year.
                                                                                                                        • ***
                                                                                                                          NetBSD kernel wscons IOCTL vulnerable bug class

                                                                                                                          I discovered this bug class during the InfoSect public code review session we ran looking specifically at the NetBSD kernel. I found a couple of these bugs and then after the session was complete, I went back and realised the same bug was scattered in other drivers. In total, 17 instances of this vulnerability and its variants were discovered.

                                                                                                                          In all fairness, I came across this bug class during my kernel audits in 2002 and most instances were patched. It just seems there are more bugs now in NetBSD while OpenBSD and FreeBSD have practically eliminated them.

                                                                                                                          • See slide 41 in http://www.blackhat.com/presentations/bh-usa-03/bh-us-03-cesare.pdf for exactly the same bug (class) 16 years ago.

                                                                                                                          • The format of the this blog post is as follows:

                                                                                                                          • Introduction

                                                                                                                          • Example of the Bug Class

                                                                                                                          • How to Fix

                                                                                                                          • How to Detect Automatically with Coccinelle

                                                                                                                          • More Bugs

                                                                                                                          • Conclusion

                                                                                                                          • These source files had bugs

                                                                                                                          • ./dev/tc/tfb.c
                                                                                                                            ./dev/ic/bt485.c
                                                                                                                            ./dev/pci/radeonfb.c
                                                                                                                            ./dev/ic/sti.c
                                                                                                                            ./dev/sbus/tcx.c
                                                                                                                            ./dev/tc/mfb.c
                                                                                                                            ./dev/tc/sfb.c
                                                                                                                            ./dev/tc/stic.c
                                                                                                                            ./dev/tc/cfb.c
                                                                                                                            ./dev/tc/xcfb.c
                                                                                                                            ./dev/tc/sfbplus.c
                                                                                                                            ./arch/arm/allwinner/awin_debe.c
                                                                                                                            ./arch/arm/iomd/vidcvideo.c
                                                                                                                            ./arch/pmax/ibus/pm.c
                                                                                                                            ./dev/ic/igfsb.c
                                                                                                                            ./dev/ic/bt463.c
                                                                                                                            ./arch/luna68k/dev/lunafb.c

                                                                                                                            Reporting of the bugs was easy. In less than a week from reporting the specific instances of each bug, patches were committed into the mainline kernel. Thanks to Luke Mewburn from NetBSD for coming to the code review session at InfoSect and coordinating with the NetBSD security team.

                                                                                                                            • The patches to fix these issues are in NetBSD: https://mail-index.netbsd.org/source-changes/2018/01/24/msg091428.html
                                                                                                                            • "Permissive licensing is wrong!” – Is it?

                                                                                                                              A few weeks ago I’ve been attacked by some GNU zealots on a German tech site after speaking in favor of permissive licenses. Unfortunately a discussion was not possible there because that would require the will to actually communicate instead of simply accusing the other side of vile motives. Since I actually do care about this topic and a reader asked for a post about it in comments a while ago, here we go.

                                                                                                                              This first part tries to sum up the most important things around the topic. I deliberately aim for an objective overview that tries not to be one-sided. The second part will then contain my points in defence of permissive licensing.

                                                                                                                              • Why license software at all?

                                                                                                                              • Licenses exist for reasons of protection. If you’re the author/inventor of some software, a story or whatever product, you get to decide what to do with it. You can keep it for yourself or you can give it away. If you decide for the latter, you have to decide who may use it and in which way(s). In case you intend to give it to a (potentially) large group of people, you may not want to be asked for permission to xyz by everybody. That’s when you decide to write a license which states what you are allowing and explicitly disallowing.

                                                                                                                                Most of the well-known commercial licenses focus on what you’re not allowed to do (usually things like copying, disassembling, etc.). Open source licenses on the other hand are meant to grant the user rights (e.g. the right to distribute) while reserving some rights or only giving permission under certain conditions – and they usually make you claim responsibility for using the software. For these reasons licenses can actually be a good thing!
                                                                                                                                If you got an unlicensed piece of code, you’re not legally allowed to do anything with it without getting the author’s permission first. And even if you got that permission, your project would be risky, since the author can withdraw it later. A proper license protects both parties. The author doesn’t get his mail account full of email asking for permission, he’s save from legal trouble if his code breaks anything for you and at the same time you have legal certainty when you decide to put the code to long-term use.

                                                                                                                              • Permissive vs. Copyleft (in a nutshell)

                                                                                                                              • In short terms, permissive licensing usually goes like this: “Here you are, have fun. Oh, and don’t sue me if it does something else than what you expect!” Yes, it’s that easy and there’s little to dispute over.

                                                                                                                                Copyleft on the other side sounds like this (if you ask somebody in favor of Copyleft): “Sure, you can use it, it’s free. Just keep it free, ok?”. Also quite simple. And not too bad, eh? Other people however read the same thing like this: “Yes, you’re free to use it. Just read these ten pages of legalese and be dead certain that you comply. If you got something wrong, we will absolutely make you regret it.”

                                                                                                                                • The GNU Public license (GPL)
                                                                                                                                • The most popular copyleft license in use is the GPL (in various versions). It got more and more complex with each version – and to be fair, it had to, because it was necessary to react to new threats and loop holes that were found later. The GNU project states that they are committed to protect what they call the four freedoms of free software:

                                                                                                                                  the freedom to use the software for any purpose
                                                                                                                                  the freedom to change the software to suit your needs
                                                                                                                                  the freedom to share the software with your friends and neighbors
                                                                                                                                  the freedom to share the changes you make

                                                                                                                                  These are freedoms that every supporter of open source software should be able to agree with. So what’s the deal with all the hostility and fighting between the two camps? Let’s take a look at a permissive license, too.

                                                                                                                                  • The BSD license
                                                                                                                                  • Unlike the GPL, the BSD family of licenses begun with a rather simple license that span four rules (“original BSD license”). It was later revised and reduced to three (“modified BSD license”). And the modern BSD license that e.g. FreeBSD uses is even just two (“simplified BSD license”).

                                                                                                                                    Did you read the GPLv3 that I linked to above? If you are using GPL’d code you really should. In case you don’t feel like reading all of it, at least take a look and grasp how long that text is. Now compare it to the complete modern BSD license.

                                                                                                                                    • What’s the problem?
                                                                                                                                    • There are essentially two problems that cause all the trouble. The first one is the question of what should be subject to the freedom that we’re talking about. And closely related, the second one is where that freedom needs to end.

                                                                                                                                      Ironically both camps claim that freedom is the one important thing and it must not be restricted. The GPL is meant to protect the freedom of the software and enforces the availability of the source code, hence limiting the freedom of actual persons. BSD on the other hand is meant to protect the freedom of human beings who should be able to use the software as they see fit – even if that means closing down former open source code!

                                                                                                                                      The GNU camp taunts permissive licenses as being “lax” for not providing the protection that they want. The other camp points out that the GPL is a complex monster and that it is virulent in nature: Since it’s very strict in a lot of areas, it’s incompatible with many other licenses. This makes it complicated to mix GPL and non-GPL code and in the cases where it’s legally possible, the GPL’s terms will take precedence and necessarily be in effect for the whole combined work.

                                                                                                                                      • Who’s right?
                                                                                                                                      • That totally depends on what you want to achieve. There are pros and cons to both – and in fact we’re only looking at the big picture here. There’s also e.g. the Apache license which is often deemed as kind of middle ground. Then you may want to consider the difference between weak (e.g. LGPL) as well as strong copyleft (GPL). Licensing is a potentially huge topic. But let’s keep it simple here because the exact details are actually not necessary to understand the essence of our topic.

                                                                                                                                        In the next post I’ll present my stance on why permissive licensing is a good thing and copyleft is more problematic than many people may think.

                                                                                                                                        • “Permissive licensing is wrong?” – No it’s not!
                                                                                                                                        • The previous post gave a short introduction into the topic of software licenses, focusing on the GPL vs. BSD discussion. This one is basically my response to some typical arguments I’ve seen from people who seem to loathe permissive licensing. I’ll write this in dialog style, hoping that this makes it a little lighter to read.

                                                                                                                                          Roundup
                                                                                                                                          Install OpenBSD on dedibox with full-disk encryption
                                                                                                                                          • TL;DR:
                                                                                                                                          • I run several "dedibox" servers at online.net, all powered by OpenBSD. OpenBSD is not officially supported so you have to work-around. Running full-disk encrypted OpenBSD there is a piece of cake. As a bonus, my first steps within a brand new booted machine ;-)

                                                                                                                                            • Step #0: choosing your server
                                                                                                                                            • OpenBSD is not officially supported, I can’t guarantee that this will work for you on any kind of server online.net provides, however I’ve been running https://poolp.org on OpenBSD there since 2008, only switching machines as they were getting a bit old and new offers came up.

                                                                                                                                              Currently, I’m running two SC 2016 (SATA) and one XC 2016 (SSD) boxes, all three running OpenBSD reliably ever since I installed them.

                                                                                                                                              Recently I’ve been willing to reinstall the XC one after I did some experiments that turned it into a FrankenBSD, so this was the right occasion to document how I do it for future references.

                                                                                                                                              I wrote an article similar to this a few years ago relying on qemu to install to the disk, since then online.net provided access to a virtual serial console accessed within the browser, making it much more convenient to install without the qemu indirection which hid the NIC devices and disks duid and required tricks.

                                                                                                                                              The method I currently use is a mix and adaptation from the techniques described in https://www.2f30.org/guides/openbsd-dedibox.html to boot the installer, and the technique described in https://geekyschmidt.com/2011/01/19/configuring-openbsd-softraid-fo-encryption.html to setup the crypto slice.

                                                                                                                                              • Step #1: boot to rescue mode
                                                                                                                                              • Step #2: boot to the installer
                                                                                                                                              • Step #3: prepare softraid
                                                                                                                                              • Step #4: reboot to encrypted OpenBSD system
                                                                                                                                              • Bonus: further tightening your system
                                                                                                                                              • enable doas
                                                                                                                                              • disable the root account
                                                                                                                                              • update system with syspatch
                                                                                                                                              • add my ssh public key to my ~/.ssh/authorized_keys
                                                                                                                                              • disable password authentication within ssh
                                                                                                                                              • reboot so you boot on a brand new up-to-date system with latest stable kernel
                                                                                                                                              • VOILA !
                                                                                                                                              • January 2018 Development Projects Update
                                                                                                                                                • Spectre and Meltdown in FreeBSD
                                                                                                                                                • Issues affecting most CPUs used in servers, desktops, laptops, and mobile devices are in the news. These hardware vulnerabilities, known by the code-names “Meltdown” and “Spectre”, allow malicious programs to read data to which they should not have access. This potentially includes credentials, cryptographic material, or other secrets. They were originally identified by a researcher from Google’s Project Zero, and were also independently discovered by researchers and academics from Cyberus Technology, Graz University of Technology, the University of Pennsylvania, the University of Maryland, Rambus, the University of Adelaide and Data61.

                                                                                                                                                  These vulnerabilities affect many CPU architectures supported by FreeBSD, but the 64-bit x86 family of processors from Intel and AMD are the most widely used, and are a high priority for software changes to mitigate the effects of Meltdown and Spectre. In particular, the Meltdown issue affects Intel CPUs and may be used to extract secret data from the running kernel, and therefore, is the most important issue to address.

                                                                                                                                                  The FreeBSD Foundation collaborates with Intel, and under this relationship participated in a briefing to understand the details of these issues and plan the mitigations to be applied to the x86 architectures supported by FreeBSD. We also made arrangements to have FreeBSD’s security officer join me in the briefing. It is through the generous support of the Foundation’s donors that we are able to dedicate resources to focus on these issues on demand as they arise.

                                                                                                                                                  Foundation staff member Konstantin (Kostik) Belousov is an expert on FreeBSD’s Virtual Memory (VM) system as well as low-level x86 details, and is developing the x86 kernel mitigations for FreeBSD.

                                                                                                                                                  The mitigation for Meltdown is known as Page Table Isolation (PTI). Kostik created a PTI implementation which was initially committed in mid-January and is available in the FreeBSD-CURRENT development repository. This is the same approach used by the Linux kernel to mitigate Meltdown.

                                                                                                                                                  One of the drawbacks of the PTI mitigation is that it incurs a performance regression. Kostik recently reworked FreeBSD’s use of Process-Context Identifiers (PCID) in order to regain some of the performance loss incurred by PTI. This change is also now available in FreeBSD-CURRENT.

                                                                                                                                                  The issue known as Spectre comes in two variants, and variant 2 is the more troubling and pressing one. It may be mitigated in one of two ways: by using a technique called “retpoline” in the compiler, or by making use of a CPU feature introduced in a processor microcode update. Both options are under active development. Kostik’s change to implement the CPU-based mitigation is currently in review. Unfortunately, it introduces a significant performance penalty and alternatives are preferred, if available.

                                                                                                                                                  For most cases, the compiler-based retpoline mitigation is likely to be the chosen mitigation. Having switched to the Clang compiler for the base system and most of the ports collection some years ago, FreeBSD is well-positioned to deploy Clang-based mitigations. FreeBSD developer Dimitry Andric is spearheading the update of Clang/LLVM in FreeBSD to version 6.0 in anticipation of its official release; FreeBSD-CURRENT now includes an interim snapshot. I have been assisting with the import, particularly with respect to LLVM’s lld linker, and will support the integration of retpoline. This support is expected to be merged into FreeBSD in the coming weeks.

                                                                                                                                                  The Foundation’s co-op students have also participated in the response to these vulnerabilities. Mitchell Horne developed the patch to control the PTI mitigation default setting, while Arshan Khanifar benchmarked the performance impact of the in-progress mitigation patches. In addition, Arshan and Mitchell each developed changes to FreeBSD’s tool chain to support the full set of mitigations that will be applied.

                                                                                                                                                  These mitigations will continue be tested, benchmarked, and refined in FreeBSD-CURRENT before being merged into stable branches and then being made available as updates to FreeBSD releases. Details on the timing of these merges and releases will be shared as they become available.

                                                                                                                                                  I would like to acknowledge all of those in the FreeBSD community who have participated in FreeBSD’s response to Meltdown and Spectre, for testing, reviewing, and coordinating x86 mitigations, for developing mitigations for other processor architectures and for the Bhyve hypervisor, and for working on the toolchain-based mitigations.

                                                                                                                                                  Guides: Getting Started & Lumina Theme Submissions

                                                                                                                                                  I am pleased to announce the beginning of a new sub-series of blog posts for the Lumina project: Guides!

                                                                                                                                                  The TrueOS/Lumina projects want to support our users as they use Lumina or experiment with TrueOS. To that end, we’ve recently set up a central repository for our users to share instructions or other “how-to” guides with each other! Project developers and contributors will also submit guides to the repository on occasion, but the overall goal is to provide a simple hub for instructions written by any Lumina or TrueOS user. This will make it easier for users to not only find a “how-to” for some procedure, but also a very easy way to “give back” to the community by writing simple instructions or more detailed guides.

                                                                                                                                                  • Guides Repository
                                                                                                                                                  • Our first guide to get the whole thing started was created by the TrueOS Linebacker (with technical assistance from our own q5sys). In this guide, Terry Tate will walk you through the steps necessary to submit new wallpaper images to the Lumina Themes collection. This procedure is fully documented with screenshots every step of the way, walking you through a simple procedure that only requires a web browser and a Github account!

                                                                                                                                                    • Guide: Lumina Themes Submissions
                                                                                                                                                    • The end result of this guide was that Terry Tate was able to submit this cool new “Lunar-4K” wallpaper to the “lumina-nature” collection.

                                                                                                                                                      • TrueOS Community Guides
                                                                                                                                                      • ZFS vs. OpenZFS (by Michael Dexter)

                                                                                                                                                        You’ve probably heard us say a mix of “ZFS” and “OpenZFS” and an explanation is long-overdue. Our Senior Analyst clears up what ZFS and OpenZFS refer to and how they differ.

                                                                                                                                                        I admit that we geeks tend to get caught up in the nuts and bolts of enterprise storage and overlook the more obvious questions that users might have. You’ve probably noticed that this blog and the FreeNAS blog refer to “ZFS” and “OpenZFS” seemingly at random when talking about the amazing file system at the heart of FreeNAS and every storage product that iXsystems sells. I will do my best to clarify what exactly these two terms refer to.
                                                                                                                                                        From its inception, “ZFS” has referred to the “Zettabyte File System” developed at Sun Microsystems and published under the CDDL Open Source license in 2005 as part of the OpenSolaris operating system. ZFS was revolutionary for completely decoupling the file system from specialized storage hardware and even a specific computer platform. The portable nature and advanced features of ZFS led FreeBSD, Linux, and even Apple developers to start porting ZFS to their operating systems and by 2008, FreeBSD shipped with ZFS in the 7.0 release. For the first time, ZFS empowered users of any budget with enterprise-class scalability and data integrity and management features like checksumming, compression and snapshotting, and those features remain unrivaled at any price to this day. On any ZFS platform, administrators use the zpool and zfs utilities to configure and manage their storage devices and file systems respectively. Both commands employ a user-friendly syntax such as‘zfs create mypool/mydataset’ and I welcome you to watch the appropriately-titled webinar “Why we love ZFS & you should too” or try a completely-graphical ZFS experience with FreeNAS.
                                                                                                                                                        Yes, ZFS is really as good as people say it is.
                                                                                                                                                        After enjoying nearly a decade of refinement by a growing group of developers around the world, ZFS became the property of database vendor Oracle, which ceased public development of both ZFS and OpenSolaris in 2010. Disappointed but undeterred, a group of OpenSolaris users and developers forked the last public release of OpenSolaris as the Illumos project. To this day, Illumos represents the official upstream home of the Open Source OpenSolaris technologies, including ZFS. The Illumos project enjoys healthy vendor and user participation but the portable nature and compelling features of ZFS soon produced far more ZFS users than Illumos users around the world. While most if not all users of Illumos and its derivatives are ZFS users, the majority of ZFS users are not Illumos users, thanks significantly in part to FreeNAS which uses the FreeBSD operating system. This imbalance plus several successful ZFS Day events led ZFS co-founder Matt Ahrens and a group of ZFS developers to announce the OpenZFS project, which would remain a part of the Illumos code base but would be free to coordinate development efforts and events around their favorite file system. ZFS Day has grown into the two-day OpenZFS Developer Summit and is stronger than ever, a testament to the passion and dedication of the OpenZFS community.
                                                                                                                                                        Oracle has steadily continued to develop its own proprietary branch of ZFS and Matt Ahrens points out that over 50% of the original OpenSolaris ZFS code has been replaced in OpenZFS with community contributions. This means that there are, sadly, two politically and technologically-incompatible branches of “ZFS” but fortunately, OpenZFS is orders of magnitude more popular thanks to its open nature. The two projects should be referred to as “Oracle ZFS” and “OpenZFS” to distinguish them as development efforts, but the user still types the ‘zfs’ command, which on FreeBSD relies on the ‘zfs.ko’ kernel module. My impression is that the terms of the CDDL license under which the OpenZFS branch of ZFS is published protects its users from any patent and trademark risks. Hopefully, this all helps you distinguish the OpenZFS project from the ZFS technology.

                                                                                                                                                        Beastie Bits
                                                                                                                                                        • Explaining Shell
                                                                                                                                                        • OPNsense® 18.1 Released
                                                                                                                                                        • “SSH Mastery 2/e” copyedits back
                                                                                                                                                        • Sponsoring a Scam
                                                                                                                                                        • Thursday, February 8, 2018 - Come to Netflix to talk about FreeBSD
                                                                                                                                                        • BSD User Group meeting in Stockholm: March 22, 17:30 - 21:00
                                                                                                                                                        • FreeBSD Flavoured talks from Linux.conf.au: You can’t unit test C, right? and A Brief History of I/O
                                                                                                                                                        • EuroBSDcon 2018 website is up
                                                                                                                                                        • Full day bhyvecon Tokyo, Japan, March 9, 2018
                                                                                                                                                        • ***
                                                                                                                                                          Feedback/Questions
                                                                                                                                                          • Thomas - freebsd installer improvements
                                                                                                                                                          • Mohammad - FreeBSD 11 installation from a read only rescue disk
                                                                                                                                                          • Stan - Follow up on guide you covered
                                                                                                                                                          • Jalal - couple questions
                                                                                                                                                          • 1 hr 36 min
                                                                                                                                                          • 231: Unix Architecture Evolution

                                                                                                                                                            We cover an interview about Unix Architecture Evolution, another vBSDcon trip report, how to teach an old Unix about backspace, new NUMA support coming to FreeBSD, and stack pointer checking in OpenBSD.

                                                                                                                                                            This episode was brought to you by

                                                                                                                                                            Headlines
                                                                                                                                                            Unix Architecture Evolution from the 1970 PDP-7 to the 2017 FreeBSD
                                                                                                                                                            • Q: Could you briefly introduce yourself?
                                                                                                                                                            • I’m a professor of software engineering, a programmer at heart, and a technology author. Currently I’m also the editor in chief of the IEEE Software magazine. I recently published the book Effective Debugging, where I detail 66 ways to debug software and systems.

                                                                                                                                                              • Q: What will your talk be about, exactly?
                                                                                                                                                              • I will describe how the architecture of the Unix operating system evolved over the past half century, starting from an unnamed system written in PDP-7 assembly language and ending with a modern FreeBSD system. My talk is based, first, on a GitHub repository where I tried to record the system’s history from 1970 until today and, second, on the evolution of documented facilities (user commands, system calls, library functions) across revisions. I will thus present the early system’s defining architectural features (layering, system calls, devices as files, an interpreter, and process management) and the important ones that followed in subsequent releases: the tree directory structure, user contributed code, I/O redirection, the shell as a user program, groups, pipes, scripting, and little languages.

                                                                                                                                                                • Q: Why this topic?
                                                                                                                                                                • Unix stands out as a major engineering breakthrough due to its exemplary design, its numerous technical contributions, its impact, its development model, and its widespread use. Furthermore, the design of the Unix programming environment has been characterized as one offering unusual simplicity, power, and elegance. Consequently, there are many lessons that we can learn by studying the evolution of the Unix architecture, which we can apply to the design of new systems. I often see modern systems that suffer from a bloat of architectural features and a lack of clear form on which functionality can be built. I believe that many of the modern Unix architecture defining features are excellent examples of what we should strive toward as system architects.

                                                                                                                                                                  • Q: What do you hope to accomplish by giving this talk? What do you expect?
                                                                                                                                                                  • I’d like FOSDEM attendees to leave the talk with their mind full with architectural features of timeless quality. I want them to realize that architectural elegance isn’t derived by piling design patterns and does not need to be expensive in terms of resources. Rather, beautiful architecture can be achieved on an extremely modest scale. Furthermore, I want attendees to appreciate the importance of adopting flexible conventions rather than rigid enforcement mechanisms. Finally, I want to demonstrate through examples that the open source culture was part of Unix from its earliest days.

                                                                                                                                                                    • Q: What are the most significant milestones in the development of Unix?
                                                                                                                                                                    • The architectural development of Unix follows a path of continuous evolution, albeit at a slowing pace, so I don’t see here the most important milestones. I would however define as significant milestones two key changes in the way Unix was developed. The first occurred in the late 1970s when significant activity shifted from a closely-knit team of researchers at the AT&T Bell Labs to the Computer Science Research Group in the University of California at Berkeley. This opened the system to academic contributions and growth through competitive research funding. The second took place in the late 1980s and the 1990s when Berkeley open-sourced the the code it had developed (by that time a large percentage of the system) and enthusiasts built on it to create complete open source operating system distributions: 386BSD, and then FreeBSD, NetBSD, OpenBSD, and others.

                                                                                                                                                                      • Q: In which areas has the development of Unix stalled?
                                                                                                                                                                      • The data I will show demonstrate that there were in the past some long periods where the number of C library functions and system calls remained mostly stable. Nowadays there is significant growth in the number of all documented facilities with the exception of file formats. I’m looking forward to a discussion regarding the meaning of these growth patterns in the Q&A session after the talk.

                                                                                                                                                                        • Q: What are the core features that still link the 1970 PDP-7 system to the latest FreeBSD 11.1 release, almost half a century apart?
                                                                                                                                                                        • Over the past half-century the Unix system has grown by four orders of magnitude from a few thousand lines of code to many millions. Nevertheless, looking at a 1970s architecture diagram and a current one reveals that the initial architectural blocks are still with us today. Furthermore, most system calls, user programs, and C library functions of that era have survived until today with essentially similar functionality. I’ve even found in modern FreeBSD some lines of code that have survived unchanged for 40 years.

                                                                                                                                                                          • Q: Can we still add innovative changes to operating systems like FreeBSD without breaking the ‘Unix philosophy’? Will there be a moment where FreeBSD isn’t recognizable anymore as a descendant of the 1970 PDP-7 system?
                                                                                                                                                                          • There’s a saying that “form liberates”. So having available a time-tested form for developing operating system functionality allows you to innovate in areas that matter rather than reinventing the wheel.

                                                                                                                                                                            Such concepts include having commands act as a filter, providing manual pages with a consistent structure, supplying build information in the form of a Makefile, installing files in a well-defined directory hierarchy, implementing filesystems with an standardized object-oriented interface, and packaging reusable functions as a library. Within this framework there’s ample space for both incremental additions (think of jq, the JSON query command) and radical innovations (consider the Solaris-derived ZFS and dtrace functionality). For this reason I think that BSD and Linux systems will always be recognizable as direct or intellectual descendants of the 1970s Research Unix editions.

                                                                                                                                                                            • Q: Have you enjoyed previous FOSDEM editions?
                                                                                                                                                                            • Immensely! As an academic I need to attend many scientific conferences and meetings in order to present research results and interact with colleagues. This means too much time spent traveling and away from home, and a limited number of conferences I’m in the end able to attend. Nevertheless, attending FOSDEM is an easy decision due to the world-changing nature of its theme, the breadth of the topics presented, the participants’ enthusiasm and energy, as well as the exemplary, very efficient conference organization.

                                                                                                                                                                              Another vBSDCon trip report we just found
                                                                                                                                                                              • We just got tipped about another trip report from vBSDCon, this time from one of the first time speakers: W. Dean Freeman
                                                                                                                                                                              • Recently I had the honor of co-presenting on the internals of FreeBSD’s Kernel RNG with John-Mark Gurney at the 3rd biennial vBSDCon, hosted in Reston, VA hosted by Verisign.

                                                                                                                                                                                I’ve been in and out of the FreeBSD community for about 20 years. As I’ve mentioned on here before, my first Unix encounter was FreeBSD 2.2.8 when I was in the 7th or 8th grade. However, for all that time I’ve never managed to get out to any of the cons. I’ve been to one or two BUG meetings and I’ve met some folks from IRC before, but nothing like this.

                                                                                                                                                                                • A BSD conference is a very different experience than anything else out there. You have to try it, it is the only way to truly understand it.
                                                                                                                                                                                • I’d also not had to do a stand-up presentation really since college before this. So, my first BSD con and my first time presenting rolled into one made for an interesting experience.

                                                                                                                                                                                  • See, he didn’t say terrifying. It went very well. You should totally submit a talk for the next conference, even if it is your first.
                                                                                                                                                                                  • That said, it was amazing and invigorating experience. I got to meet a few big names in the FreeBSD community, discuss projects, ideas for FreeBSD, etc. I did seem to spend an unusual amount of time talking about FIPS and Common Criteria with folks, but to me that’s a good sign and indicative that there is interest in working to close gaps between FreeBSD and the current requirements so that we can start getting FreeBSD and more BSD-based products into the government and start whittling away the domination of Linux (especially since Oracle has cut Solaris, SPARC and the ZFS storage appliance business units).

                                                                                                                                                                                    • There is nothing that can match the high bandwidth interchange of ideas in person. The internet has made all kinds of communication possible, and we use it all the time, but every once in a while, getting together in person is hugely valuable.
                                                                                                                                                                                    • Dean then went on to list some of the talks he found most valuable, including DTrace, Capsicum, bhyve, *BSD security tools, and Paul Vixie’s talk about gets()
                                                                                                                                                                                    • I think the talk that really had the biggest impact on me, however, was Kyle Kneisl’s talk on BSD community dynamics. One of the key points he asked was whether the things that drew us to the BSD community in the first place would be able to happen today. Obviously, I’m not a 12 or 13 year old kid anymore, but it really got me thinking. That, combined with getting face time with people I’d previously only known as screen names has recently drawn me back into participating in IRC and rejoining mailing lists (wdf on freenode. be on the lookout!)

                                                                                                                                                                                      • Then Dean covered some thoughts on his own talk:
                                                                                                                                                                                      • JMG and my talk seems to have been well received, with people paying lots of attention. I don’t know what a typical number of questions is for one of these things, but on day one there weren’t that many questions. We got about 5 during our question time and spent most of the rest of the day fielding questions from interested attendees. Getting a “great talk!” from GNN after coming down from the stage was probably one of the major highlights for me.

                                                                                                                                                                                        • I remember my first solo talk, and GNN asking the right question in the middle to get me to explain a part of it I had missed. It was very helpful.
                                                                                                                                                                                        • I think key to the interest in our presentation was that JMG did a good job framing a very complicated topic’s importance in terms everyone could understand. It also helped that we got to drop some serious truth bombs.

                                                                                                                                                                                          • Final Thoughts:
                                                                                                                                                                                          • I met a lot of folks in person for the first time, and met some people I’d never known online before. It was a great community and I’m glad I got a chance to expand my network.

                                                                                                                                                                                            Verisign were excellent hosts and they took good care of both speakers (covering airfare, rooms, etc.) and also conference attendees at large. The dinners that they hosted were quite good as well.
                                                                                                                                                                                            I’m definitely interested in attending vBSDCon again and now that I’ve had a taste of meeting IRL with the community on scale of more than a handful, I have every intention of finally making it to BSDCan next year (I’d said it in 2017, but then moved to Texas for a new job and it wasn’t going to be practical). This year for sure, though!

                                                                                                                                                                                            Teaching an Almost 40-year Old UNIX about Backspace
                                                                                                                                                                                            • Introduction
                                                                                                                                                                                            • I have been messing with the UNIX® operating system, Seventh Edition (commonly known as UNIX V7 or just V7) for a while now. V7 dates from 1979, so it’s about 40 years old at this point. The last post was on V7/x86, but since I’ve run into various issues with it, I moved on to a proper installation of V7 on SIMH. The Internet has some really good resources on installing V7 in SIMH. Thus, I set out on my own journey on installing and using V7 a while ago, but that was remarkably uneventful.

                                                                                                                                                                                              One convenience that I have been dearly missing since the switch from V7/x86 is a functioning backspace key. There seem to be multiple different definitions of backspace:

                                                                                                                                                                                              BS, as in ASCII character 8 (010, 0x08, also represented as H), and

                                                                                                                                                                                              DEL, as in ASCII character 127 (0177, 0x7F, also represented as ?).
                                                                                                                                                                                              V7 does not accept either for input by default. Instead, # is used as the erase character and @ is used as the kill character. These defaults have been there since UNIX V1. In fact, they have been “there” since Multics, where they got chosen seemingly arbitrarily. The erase character erases the character before it. The kill character kills (deletes) the whole line. For example, “ba##gooo#d” would be interpreted as “good” and “bad line@good line” would be interpreted as “good line”.

                                                                                                                                                                                              There is some debate on whether BS or DEL is the correct character for terminals to send when the user presses the backspace key. However, most programs have settled on DEL today. tmux forces DEL, even if the terminal emulator sends BS, so simply changing my terminal to send BS was not an option. The change from the defaults outlined here to today’s modern-day defaults occurred between 4.1BSD and 4.2BSD. enf on Hacker News has written a nice overview of the various conventions

                                                                                                                                                                                              • Getting the Diff
                                                                                                                                                                                              • For future generations as well as myself when I inevitably majorly break this installation of V7, I wanted to make a diff. However, my V7 is installed in SIMH. I am not a very intelligent man, I didn’t keep backup copies of the files I’d changed. Getting data out of this emulated machine is an exercise in frustration.

                                                                                                                                                                                                In the end, I printed everything on screen using cat(1) and copied that out. Then I performed a manual diff against the original source code tree because tabs got converted to spaces in the process. Then I applied the changes to clean copies that did have the tabs. And finally, I actually invoked diff(1).

                                                                                                                                                                                                • Closing Thoughts
                                                                                                                                                                                                • Figuring all this out took me a few days. Penetrating how the system is put together was surprisingly fairly hard at first, but then the difficulty curve eased up. It was an interesting exercise in some kind of “reverse engineering” and I definitely learned something about tty handling. I was, however, not pleased with using ed(1), even if I do know the basics. vi(1) is a blessing that I did not appreciate enough until recently. Had I also been unable to access recursive grep(1) on my host and scroll through the code, I would’ve probably given up. Writing UNIX under those kinds of editing conditions is an amazing feat. I have nothing but the greatest respect for software developers of those days.

                                                                                                                                                                                                  News Roundup
                                                                                                                                                                                                  New NUMA support coming to FreeBSD CURRENT

                                                                                                                                                                                                  Hello folks,

                                                                                                                                                                                                  I am working on merging improved NUMA support with policy implemented by cpuset(2) over the next week. This work has been supported by Dell/EMC's Isilon product division and Netflix. You can see some discussion of these changes here:

                                                                                                                                                                                                  https://reviews.freebsd.org/D13403

                                                                                                                                                                                                  https://reviews.freebsd.org/D13289
                                                                                                                                                                                                  https://reviews.freebsd.org/D13545

                                                                                                                                                                                                  The work has been done in user/jeff/numa if you want to look at svn history or experiment with the branch. It has been tested by Peter Holm on i386 and amd64 and it has been verified to work on arm at various points.

                                                                                                                                                                                                  We are working towards compatibility with libnuma and linux mbind. These commits will bring in improved support for NUMA in the kernel. There are new domain specific allocation functions available to kernel for UMA, malloc, kmem_, and vm_page*. busdmamem consumers will automatically be placed in the correct domain, bringing automatic improvements to some

                                                                                                                                                                                                  device performance.

                                                                                                                                                                                                  cpuset will be able to constrains processes, groups of processes, jails, etc. to subsets of the system memory domains, just as it can with sets of cpus. It can set default policy for any of the above. Threads can use cpusets to set policy that specifies a subset of their visible domains.

                                                                                                                                                                                                  Available policies are first-touch (local in linux terms), round-robin (similar to linux interleave), and preferred. For now, the default is round-robin. You can achieve a fixed domain policy by using round-robin with a bitmask of a single domain. As the scheduler and VM become more

                                                                                                                                                                                                  sophisticated we may switch the default to first-touch as linux does.

                                                                                                                                                                                                  Currently these features are enabled with VM_NUMA_ALLOC and MAXMEMDOM. It will eventually be NUMA/MAXMEMDOM to match SMP/MAXCPU. The current NUMA syscalls and VM_NUMA_ALLOC code was 'experimental' and will be deprecated. numactl will continue to be supported although cpuset should be preferred going forward as it supports the full feature set of the new API.

                                                                                                                                                                                                  Thank you for your patience as I deal with the inevitable fallout of such sweeping changes. If you do have bugs, please file them in bugzilla, or reach out to me directly. I don't always have time to catch up on all of my mailing list mail and regretfully things slip through the cracks when

                                                                                                                                                                                                  they are not addressed directly to me.

                                                                                                                                                                                                  Thanks,

                                                                                                                                                                                                  Jeff

                                                                                                                                                                                                  Stack pointer checking – OpenBSD

                                                                                                                                                                                                  Stefan (stefan@) and I have been working for a few months on this diff, with help from a few others.

                                                                                                                                                                                                  At every trap and system call, it checks if the stack-pointer is on a page that is marked MAP_STACK. execve() is changed to create such mappings for the process stack. Also, libpthread is taught the new MAP_STACK flag to use with mmap().

                                                                                                                                                                                                  There is no corresponding system call which can set MAP_FLAG on an existing page, you can only set the flag by mapping new memory into place. That is a piece of the security model.

                                                                                                                                                                                                  The purpose of this change is to twart stack pivots, which apparently have gained some popularity in JIT ROP attacks. It makes it difficult to place the ROP stack in regular data memory, and then perform a system call from it. Workarounds are cumbersome, increasing the need for far more gadgetry. But also the trap case -- if any memory experiences a demand page fault, the same check will occur and potentially also kill the process.

                                                                                                                                                                                                  We have experimented a little with performing this check during device interrupts, but there are some locking concerns and performance may then become a concern. It'll be best to gain experience from handle of syncronous trap cases first.

                                                                                                                                                                                                  chrome and other applications I use run fine!

                                                                                                                                                                                                  I'm asking for some feedback to discover what ports this breaks, we'd like to know. Those would be ports which try to (unconventionally) create their stacks in malloc()'d memory or inside another Data structure. Most of them are probably easily fixed ...

                                                                                                                                                                                                  Qt 5.9 on FreeBSD

                                                                                                                                                                                                  Tobias and Raphael have spent the past month or so hammering on the Qt 5.9 branch, which has (finally!) landed in the official FreeBSD ports tree. This brings FreeBSD back up-to-date with current Qt releases and, more importantly, up-to-date with the Qt release KDE software is increasingly expecting. With Qt 5.9, the Elisa music player works, for instance (where it has run-time errors with Qt 5.7, even if it compiles). The KDE-FreeBSD CI system has had Qt 5.9 for some time already, but that was hand-compiled and jimmied into the system, rather than being a “proper” ports build.

                                                                                                                                                                                                  The new Qt version uses a new build system, which is one of the things that really slowed us down from a packaging perspective. Some modules have been reshuffled in the process. Some applications depending on Qt internal-private headers have been fixed along the way. The Telegram desktop client continues to be a pain in the butt that way.

                                                                                                                                                                                                  Following on from Qt 5.9 there has been some work in getting ready for Clang 6 support; in general the KDE and Qt stack is clean and modern C++, so it’s more infrastructural tweaks than fixing code. Outside of our silo, I still see lots of wonky C++ code being fixed and plenty of confusion between pointers and integers and strings and chars and .. ugh. Speaking of ugh, I’m still planning to clean up Qt4 on ARM aarch64 for FreeBSD; this boils down to stealing suitable qatomic implementations from Arch Linux.

                                                                                                                                                                                                  For regular users of Qt applications on FreeBSD, there should be few to no changes required outside the regular upgrade cycle. For KDE Plasma users, note that development of the ports has changed branches; as we get closer to actually landing modern KDE bits, things have been renamed and reshuffled and mulled over so often that the old plasma5 branch wasn’t really right anymore. The kde5-import branch is where it’s at nowadays, and the instructions are the same: the x11/kde5 metaport will give you all the KDE Frameworks 5, KDE Plasma Desktop and modern KDE Applications you need.

                                                                                                                                                                                                  Adding IPv6 to an Nginx website on FreeBSD / FreshPorts
                                                                                                                                                                                                  • FreshPorts recently moved to an IPv6-capable server but until today, that capability has not been utilized.

                                                                                                                                                                                                  • There were a number of things I had to configure, but this will not necessarily be an exhaustive list for you to follow. Some steps might be missing, and it might not apply to your situation.

                                                                                                                                                                                                  • All of this took about 3 hours.

                                                                                                                                                                                                    • We are using:

                                                                                                                                                                                                      • FreeBSD 11.1
                                                                                                                                                                                                      • Bind 9.9.11
                                                                                                                                                                                                      • nginx 1.12.2
                                                                                                                                                                                                      • Fallout

                                                                                                                                                                                                      • I expect some monitoring fallout from this change. I suspect some of my monitoring assumes IP4 and now that IPv6 is available, I need to monitor both IP addresses.

                                                                                                                                                                                                        ZFS on TrueOS: Why We Love OpenZFS

                                                                                                                                                                                                        TrueOS was the first desktop operating system to fully implement the OpenZFS (Zettabyte File System or ZFS for short) enterprise file system in a stable production environment. To fully understand why we love ZFS, we will look back to the early days of TrueOS (formerly PC-BSD). The development team had been using the UFS file system in TrueOS because of its solid track record with FreeBSD-based computer systems and its ability to check file consistency with the built-in check utility fsck.

                                                                                                                                                                                                        However, as computing demands increased, problems began to surface. Slow fsck file verification on large file systems, slow replication speeds, and inconsistency in data integrity while using UFS logging / journaling began to hinder users. It quickly became apparent that TrueOS users would need a file system that scales with evolving enterprise storage needs, offers the best data protection, and works just as well on a hobbyist system or desktop computer.

                                                                                                                                                                                                        Kris Moore, the founder of the TrueOS project, first heard about OpenZFS in 2007 from chatter on the FreeBSD mailing lists. In 2008, the TrueOS development team was thrilled to learn that the FreeBSD Project had ported ZFS. At the time, ZFS was still unproven as a graphical desktop solution, but Kris saw a perfect opportunity to offer ZFS as a cutting-edge file system option in the TrueOS installer, allowing the TrueOS project to act as an indicator of how OpenZFS would fair in real-world production use.

                                                                                                                                                                                                        The team was blown away by the reception and quality of OpenZFS on FreeBSD-based systems. By its nature, ZFS is a copy-on-write (CoW) file system that won’t move a block of data until it both writes the data and verifies its integrity. This is very different from most other file systems in use today. ZFS is able to assure that data stays consistent between writes by automatically comparing write checksums, which mitigates bit rot. ZFS also comes with native RaidZ functionality that allows for enterprise data management and redundancy without the need for expensive traditional RAID cards. ZFS snapshots allow for system configuration backups in a split-second. You read that right. TrueOS can backup or restore snapshots in less than a second using the ZFS file system.

                                                                                                                                                                                                        Given these advantages, the TrueOS team decided to use ZFS as its exclusive file system starting in 2013, and we haven’t looked back since. ZFS offers TrueOS users the stable workstation experience they want, while simultaneously scaling to meet the increasing demands of the enterprise storage market. TrueOS users are frequently commenting on how easy it is to use ZFS snapshots with our built-in snapshot utility. This allows users the freedom to experiment with their system knowing they can restore it in seconds if anything goes wrong. If you haven’t had a chance to try ZFS with TrueOS, browse to our download page and make sure to grab a copy of TrueOS. You’ll be blown away by the ease of use, data protection functionality, and incredible flexibility of RaidZ.

                                                                                                                                                                                                        Beastie Bits
                                                                                                                                                                                                        • Source Code Podcast Interview with Michael W Lucas
                                                                                                                                                                                                        • Operating System of the Year 2017: NetBSD Third place
                                                                                                                                                                                                        • OPNsense 18.1-RC1 released
                                                                                                                                                                                                        • Personal OpenBSD Wiki Notes
                                                                                                                                                                                                        • BSD section can use some contribution
                                                                                                                                                                                                        • The Third Research Edition Unix Programmer's Manual (now available in PDF)
                                                                                                                                                                                                        • Feedback/Questions
                                                                                                                                                                                                          • Alex - my first freebsd bug
                                                                                                                                                                                                          • John - Suggested Speakers
                                                                                                                                                                                                          • Todd - Two questions
                                                                                                                                                                                                          • Matthew - CentOS to FreeBSD
                                                                                                                                                                                                          • Brian - Brian - openbsd 6.2 and enlightenment .17
                                                                                                                                                                                                          • ***
                                                                                                                                                                                                            1 hr 25 min
                                                                                                                                                                                                          • 230: Your questions, Part III

                                                                                                                                                                                                            We provide you with updates to Spectre and Meltdown from various BSD projects, a review of TrueOS from Linux, how to set up FreeBSD on ThinkPad x240, and a whole bunch of beastie bits.

                                                                                                                                                                                                            This episode was brought to you by

                                                                                                                                                                                                            Headlines
                                                                                                                                                                                                            KPTI patch lands in FreeBSD -current
                                                                                                                                                                                                            • After a heroic effort by Konstantin Belousov [email protected], the first meltdown patch has landed in FreeBSD
                                                                                                                                                                                                            • This creates separate page tables for the Kernel and userland, and switches between them when executions enters the kernel, and when it returns to userland
                                                                                                                                                                                                            • It is currently off by default, but you are encouraged to test it, so it can be merged back to the release branches. Set vm.pmap.pti=1 in /boot/loader.conf
                                                                                                                                                                                                            • The existing implementation of PCID (process-context identifiers), is not compatible with the new PTI code, and is disabled when PTI is enabled, decreasing performance. A future patch will use PCID in a way that is compatible with PTI.
                                                                                                                                                                                                            • PCID allows the OS to annotate memory mappings to specific processes, so that they can be flushed selectively, and so that they are only used when in the context of that application.
                                                                                                                                                                                                            • Once the developers are relatively confident in the correctness of the code that has landed in -current, it will be ported back to FreeBSD 10 and 11, and released as a security advisory.
                                                                                                                                                                                                            • Apparently porting back to FreeBSD 11 only has some relatively simple merge conflicts, but 10 will be more work.
                                                                                                                                                                                                            • Former FreeBSD Security Officer Dag-Erling Smørgrav has created a meltdown testing and PoC tool that you can use to check your system. It is not finished yet, and doesn’t seem to work with newer processors (haswell and newer).
                                                                                                                                                                                                            • The first partial mitigation for Spectre variant 2 for bhyve on AMD64 has also been committed
                                                                                                                                                                                                            • The latest information is always available on the FreeBSD Wiki
                                                                                                                                                                                                            • ***
                                                                                                                                                                                                              Some thoughts on Spectre and Meltdown
                                                                                                                                                                                                              • Colin Percival breaks down how these vulnerabilities work, with same nice analogies
                                                                                                                                                                                                              • What is a side channel:
                                                                                                                                                                                                              • I want to know when my girlfriend's passport expires, but she won't show me her passport (she complains that it has a horrible photo) and refuses to tell me the expiry date. I tell her that I'm going to take her to Europe on vacation in August and watch what happens: If she runs out to renew her passport, I know that it will expire before August; while if she doesn't get her passport renewed, I know that it will remain valid beyond that date. Her desire to ensure that her passport would be valid inadvertently revealed to me some information: Whether its expiry date was before or after August.

                                                                                                                                                                                                                • Spectre Variant 1:
                                                                                                                                                                                                                • I tell my girlfriend that I'm going to take her on vacation in June, but I don't tell her where yet; however, she knows that it will either be somewhere within Canada (for which she doesn't need a passport, since we live in Vancouver) or somewhere in Europe. She knows that it takes time to get a passport renewed, so she checks her passport and (if it was about to expire) gets it renewed just in case I later reveal that I'm going to take her to Europe. If I tell her later that I'm only taking her to Ottawa — well, she didn't need to renew her passport after all, but in the meantime her behaviour has already revealed to me whether her passport was about to expire. This is what Google refers to "variant 1" of the Spectre vulnerability: Even though she didn't need her passport, she made sure it was still valid just in case she was going to need it.

                                                                                                                                                                                                                  • Spectre Variant 2:
                                                                                                                                                                                                                  • I spend a week talking about how Oxford is a wonderful place to visit and I really enjoyed the years I spent there, and then I tell her that I want to take her on vacation. She very reasonably assumes that — since I've been talking about Oxford so much — I must be planning on taking her to England, and runs off to check her passport and potentially renew it... but in fact I tricked her and I'm only planning on taking her to Ottawa.

                                                                                                                                                                                                                    • Meltdown:
                                                                                                                                                                                                                    • I tell my girlfriend that I want to take her to the Korean peninsula. She knows that her passport is valid for long enough; but she immediately runs off to check that her North Korean visa hasn't expired. Why does she have a North Korean visa, you ask? Good question. She doesn't — but she runs off to check its expiry date anyway! Because she doesn't have a North Korean visa, she (somehow) checks the expiry date on someone else's North Korean visa, and then (if it is about to expire) runs out to renew it — and so by telling her that I want to take her to Korea for a vacation I find out something she couldn't have told me even if she wanted to.

                                                                                                                                                                                                                      Final thoughts on vulnerability disclosure
                                                                                                                                                                                                                      The way these issues were handled was a mess; frankly, I expected better of Google, I expected better of Intel, and I expected better of the Linux community. When I found that Hyper-Threading was easily exploitable, I spent five months notifying the security community and preparing everyone for my announcement of the vulnerability; but when the embargo ended at midnight UTC and FreeBSD published its advisory a few minutes later, the broader world was taken entirely by surprise. Nobody knew what was coming aside from the people who needed to know; and the people who needed to know had months of warning.
                                                                                                                                                                                                                      Contrast that with what happened this time around. Google discovered a problem and reported it to Intel, AMD, and ARM on June 1st. Did they then go around contacting all of the operating systems which would need to work on fixes for this? Not even close. FreeBSD was notified the week before Christmas, over six months after the vulnerabilities were discovered. Now, FreeBSD can occasionally respond very quickly to security vulnerabilities, even when they arise at inconvenient times — on November 30th 2009 a vulnerability was reported at 22:12 UTC, and on December 1st I provided a patch at 01:20 UTC, barely over 3 hours later — but that was an extremely simple bug which needed only a few lines of code to fix; the Spectre and Meltdown issues are orders of magnitude more complex.
                                                                                                                                                                                                                      To make things worse, the Linux community was notified and couldn't keep their mouths shut. Standard practice for multi-vendor advisories like this is that an embargo date is set, and nobody does anything publicly prior to that date. People don't publish advisories; they don't commit patches into their public source code repositories; and they definitely don't engage in arguments on public mailing lists about whether the patches are needed for different CPUs. As a result, despite an embargo date being set for January 9th, by January 4th anyone who cared knew about the issues and there was code being passed around on Twitter for exploiting them.
                                                                                                                                                                                                                      This is not the first time I've seen people get sloppy with embargoes recently, but it's by far the worst case. As an industry we pride ourselves on the concept of responsible disclosure — ensuring that people are notified in time to prepare fixes before an issue is disclosed publicly — but in this case there was far too much disclosure and nowhere near enough responsibility. We can do better, and I sincerely hope that next time we do.

                                                                                                                                                                                                                      CPU microcode update code for amd64
                                                                                                                                                                                                                      • Patrick Wildt (patrick@) recently committed some code that will update the Intel microcode on many Intel CPUs, a diff initially written by Stefan Fritsch (sf@). The microcode of your CPU is basically the firmware that runs on your (Intel) processor, defining its instruction set in terms of so called "microinstructions". The new code depends, of course, on the corresponding firmware package, ported by Patrick which can be installed using a very recent fw_update(1). Of course, this all plays into the recently revealed problems in Intel (and other) CPUs, Meltdown and Spectre.
                                                                                                                                                                                                                      • Now Theo has explained the workings of the code on openbsd-tech, detailing some of the challenges in updating microcode on CPUs where your OS is already starting to run.
                                                                                                                                                                                                                      • Theo hints at future updates to the intel-firmware package in his mail:
                                                                                                                                                                                                                      • Patrick and others committed amd64 Intel cpu microcode update code over the last few days. The approach isn't perfect, but it is good enough for a start. I want to explain the situation.

                                                                                                                                                                                                                        When you fw_update, you'll get the firmware files.
                                                                                                                                                                                                                        Upon a reboot, it will attempt to update the microcode on your cpus.
                                                                                                                                                                                                                        Maybe there isn't a new microcode. Maybe your BIOS has a copy of the microcode and installs it before booting OpenBSD.
                                                                                                                                                                                                                        This firmware installation is done a little late. Doing it better will require some work in the bootblocks to find the firmware files, but time is a bit short to do that right now.
                                                                                                                                                                                                                        The branch-target-cache flushing features added in new microcode are not being used yet. There is more code which has to be written, but again other work is happening first.
                                                                                                                                                                                                                        Also, Intel is saying their new microcodes sucks and people should wait a little.
                                                                                                                                                                                                                        "Hi, my name is Intel and I'm an cheating speculator".

                                                                                                                                                                                                                        • Several developers are working on mitigations for these issues, attacking the problem from several angles. Expect to see more updates to a CVS tree near you soon.
                                                                                                                                                                                                                        • Intel: as a *BSD user, I am fucking pissed!

                                                                                                                                                                                                                          I wasn’t going to write anything on the recently found x64 architecture – related bugs. I’m not a kernel developer nor even a programmer and I can’t say that I have a solid understanding of what Meltdown and Spectre attacks are. Also there already is a ton of articles and posts written by people who have no grasp of the subject.

                                                                                                                                                                                                                          I’m however a malcontent and I find this a good way to express my feelings:

                                                                                                                                                                                                                          Intel: as a *BSD user, I am fucking pissed!

                                                                                                                                                                                                                          • Meltdown, Spectre and BSD – the “pissed” part
                                                                                                                                                                                                                          • Part of my work is UNIX-like systems administration – including BSDs and Linuces. As much as I am happy with Linux changes already made, I am beyond pissed about how the BSDs were handled by Intel – because they were not. FreeBSD Security Team received some heads-up just before Xmas, while OpenBSD, NetBSD and DragonflyBSD teams received no prior warnings.

                                                                                                                                                                                                                            Meltdown and Spectre attacks are hard to perform. It is a hard work to mitigate them in the software, as the bugs lay in the CPUs and are not fixable by microcode updates. Developers are trying to mitigate these bugs in a way that will deliver smallest performance losses. A lot of time consuming work is needed to fix CPU vendors’ mistakes. Linux developers had this time. BSD developers did not.

                                                                                                                                                                                                                            • BSD user base too small?
                                                                                                                                                                                                                            • BSD user base is small in comparison to Linux. Seems that it’s too small for Intel. PlayStation4 consoles are FreeBSD-based (and use AMD CPUs) but I think it’s safe to say that gaming devices are not the most important systems to be fixed. Netflix serves their content off FreeBSD but the bugs are not remotely exploitable (possibly not including JavaScript, but it’s running someone’s code locally) so there’s probably not much harm to be done here either.

                                                                                                                                                                                                                              However gamers and Netflix aren’t the only ones who use *BSD systems. I’d say that there is more than a few FreeBSD, NetBSD, OpenBSD and DragonFlyBSD servers on the internet.

                                                                                                                                                                                                                              In March 2017, Intel promised “more timely support to FreeBSD”. They knew about flaws in their CPUs in June and decided that a timely manner is the end of December – short before the embargo was to be lifted.

                                                                                                                                                                                                                              Intel and Google (probably Intel more): it was your job to pick the correct people to whom the bugs can be disclosed. In my humble opinion you chose poorly by disclosing these issues with ONLY Apple, Microsoft, and the Linux Foundation, of OS vendors. You did much harm to the BSD community.

                                                                                                                                                                                                                              Intel: It’s your bugs. And you offered “more support” to the FreeBSD Foundation less than 3 months prior to being informed (my guess is that you knew much earlier) on the flaws in YOUR products. I don’t want to write more here as the wording would be too strong.

                                                                                                                                                                                                                              Interview - Viewer Questions
                                                                                                                                                                                                                              • These days, do you consider yourself more of an programmer or a sysadmin? Which one do you enjoy more?
                                                                                                                                                                                                                              • Does FreeBSD/BSD enable your business or would another OS suit your needs just as well?
                                                                                                                                                                                                                              • You’ve hinted that you use FreeBSD as part of your business. Can you elaborate on that and give some technical detail on how it’s used in that environment?
                                                                                                                                                                                                                              • If you were allowed three wishes for anything at all to be implemented or changed in ZFS, what would they be, and why?
                                                                                                                                                                                                                                • Per Dataset throughput and IOPS limiting
                                                                                                                                                                                                                                • Per-File Cloning and/or zfsmv (move a file from one dataset to another, without copying)
                                                                                                                                                                                                                                • Cluster support
                                                                                                                                                                                                                                • Allan, you have previously mentioned that you have worked on FreeBSD on MIPS, what made you choose the Onion Omega over something like the Raspberry Pi?
                                                                                                                                                                                                                                • What is BSD Now’s association with Jupiter broadcasting, and how did the relationship come to be? Jupiter seems to be associated with several Linux-themed podcasts, and I’m wondering how and why BSD Now joined Jupiter. The two communities (the Linuxes and BSDs) don’t always seem to mix freely -- or do they?
                                                                                                                                                                                                                                • What kind of keyboard is that? Have you ever tried an ErgoDox? The ErgoDox EZ is made by a Canadian.
                                                                                                                                                                                                                                • You mentioned when doing one of your talks on UCL for FreeBSD that you had only recently learned C. I am also aware of your history also on contributing to the FreeBSD handbook and to documentation in general. Given you started with C relatively recently, what made you want to learn it, how quickly did you pick it up, and is it your favourite language? It is most inspiring to me, as you are clearly so talented, and of all the languages I have learned (including C++), I still prefer C in my heart of hearts. I'd be really interested to hear your answer, many thanks.
                                                                                                                                                                                                                                • ***
                                                                                                                                                                                                                                  News Roundup
                                                                                                                                                                                                                                  LinuxAndUbuntu Review Of TrueOS A Unix Based OS

                                                                                                                                                                                                                                  Trust me, the name TrueOS takes me back to 1990s when Tru64 UNIX operating system made its presence. TrueOS is PC-BSD’s new unified brand built upon FreeBSD-CURRENT code base. Note that TrueOS is not a Linux distro but is BSD Unix. FreeBSD is known for its cutting-edge features, security, scalability, and ability to work both as a server and desktop operating system. TrueOS aims at having user-friendliness with the power of FreeBSD OS. Let us start with going into details of different aspects of the TrueOS.

                                                                                                                                                                                                                                  • TrueOS History

                                                                                                                                                                                                                                  • ?

                                                                                                                                                                                                                                    TrueOS was founded by Kris Moore in 2005 with name PC-BSD. Initial version focused to make FreeBSD easy to use starting with providing GUI based installer (to relatively complicated FreeBSD installer). In the year 2006, PC-BSD was acquired by iXsystems. Before rebranding as TrueOS in Sept 2016, PC-BSD reached a stage starting considering better than vanilla FreeBSD. Older PC-BSD version used to support both x86 and x86-64 architecture.

                                                                                                                                                                                                                                    Kris Moore, the developer founder, says about rebranding: “We’ve already been using TrueOS for the server side of PC-BSD, and it made sense to unify the names. PC-BSD doesn’t reflect server or embedded well. TrueOS Desktop/Server/Embedded can be real products, avoids some of the alphabet soup, and gives us a more catchy name.”

                                                                                                                                                                                                                                  • TrueOS First Impression

                                                                                                                                                                                                                                  • ?

                                                                                                                                                                                                                                    The startup is little longer; may be due to starting up of many services. The heavy KDE well suited to PC-BSD. The C++/Qt5 based Lumina desktop environment is light and fast. The Lumina offers an easy way to configure menu and panels. I did not face any problems for continuous use of two weeks on a virtual machine having the minimal configuration: 1 GB RAM, 20 GB hard disk and Intel 3.06 GHz i3 processor. The Lumina desktop is light and fast. The developers of Lumina know what they are doing and have a good idea of what makes a good IDE. As it happens with any new desktop environment, it needs some time to settle. Let us hope that they keep to the path they are on with it.

                                                                                                                                                                                                                                  • Conclusion

                                                                                                                                                                                                                                  • ?

                                                                                                                                                                                                                                    The TrueOS is impressive when consider it as relatively young. It is a daring step that TrueOS developers took FreeBSD Current rather than FreeBSD Stable code base. Overall it has created its own place from the legacy shadow of PC-BSD. Starting with easy installation TrueOS is a good combination of software and utilities that make the system ready to use. Go and get a TrueOS ISO to unleash the “bleeding edge” tag of FreeBSD

                                                                                                                                                                                                                                    Thinkpad x240 - FreeBSD Setup

                                                                                                                                                                                                                                    What follows is a record of how I set up FreeBSD to be my daily driver OS on the Lenovo Thinkpad X240. Everything seems to work great. Although, the touchpad needs some tweaking. I've tried several configurations, even recompiling Xorg with EVDEV support and all that, to no avail. Eventually I will figure it out. Do not sleep the laptop from the command line. Do it from within Xorg, or it will not wake up. I don't know why. You can do it from a terminal within Xorg, just not from the naked command line without Xorg started. It also will not sleep by closing the lid. I included a sudo config that allows you to run /usr/sbin/zzz without a password, so what I do is I have a key combo assigned within i3wm to run "sudo /usr/sbin/zzz". It works fine this way.

                                                                                                                                                                                                                                    I go into detail when it comes to setting up Xorg with i3wm. You can skip this if you want, but if you've never used a tiling window manager, it will handle screen real estate very efficiently on a laptop with a 12.5-inch screen and a touchpad.

                                                                                                                                                                                                                                    First, download the amd64 image for 11.1-RELEASE and flash it to a USB pen drive. For the Unices, use this:

                                                                                                                                                                                                                                    # dd if=FreeBSD-11.1-RELEASE-amd64-memstick.img of=/dev/da0 bs=1M conv=sync

                                                                                                                                                                                                                                    Obviously, you'll change /dev/da0 to whatever the USB pen drive is assigned. Plug it in, check dmesg.

                                                                                                                                                                                                                                    Leave it plugged in, restart the laptop. When prompted, tap Enter to halt the boot process, then F12 to select a bootable device. Choose the USB drive.

                                                                                                                                                                                                                                    I won't go through the actual install process, but it is pretty damn easy so just look at a guide or two and you'll be fine. If you can install Debian, you can install FreeBSD. I will, however, recommend ZFS if you have over 4GB of RAM (my particular variant of the X240 has 8GB of RAM, so yours should have at least 4GB), along with an encrypted disk, and an encrypted SWAP partition. When prompted to add an additional user, and you get to the question where it asks for additional groups, please make sure you add the user to "wheel". The rest should be self-explanatory during the install.

                                                                                                                                                                                                                                    Now for the good shit. You just booted into a fresh FreeBSD install. Now what? Well, time to fire up vi and open some config files...

                                                                                                                                                                                                                                    CNN Article about CDROM.com and FreeBSD, from 1999

                                                                                                                                                                                                                                    Walnut Creek CDROM sells a lot of CD-ROMs, but it gives away even more data. Specifically, anyone who has Internet access is free to log into wcarchive (ftp.cdrom.com) and start downloading bits.

                                                                                                                                                                                                                                    Even with a good Internet connection, however, you should expect to be at it for a while. At the present time, wcarchive resides on half a terabyte (500 GB) of RAID 5-disk storage. Even if your 56-Kbps modem can deliver seven kilobytes per second, downloading the complete archive would take you 70 million seconds. Even then, some of the files would be more than two years out of date, so a bit of "back and fill" would be needed.
                                                                                                                                                                                                                                    Of course, nobody uses wcarchive that way. Instead, they just drop in when they need the odd file or two. The FTP server is very accommodating; 3,600 simultaneous download sessions is the current limit and an upgrade to 10,000 sessions is in the works.
                                                                                                                                                                                                                                    This translates to about 800 GB per day of downloads. Bob Bruce (Walnut Creek's founder) says he's thinking about issuing a press release when they reach a terabyte a day. But 800 GB isn't all that shabby....

                                                                                                                                                                                                                                    • The hardware
                                                                                                                                                                                                                                    • Because FTP archives don't do a lot of thinking, wcarchive doesn't need a massive cluster of CPUs. In fact, it gets by with a single 200-MHz P6 Pentium Pro and a measly(!) 1 GB of RAM. The I/O support, however, is fairly impressive.

                                                                                                                                                                                                                                      A six-channel Mylex RAID controller (DAC960SXI; Ultra-Wide SCSI-SCSI) is the centerpiece of the I/O subsystem. Two channels link it to the PC ("Personal Computer"!?!), via a dual-channel Adaptec card (AHA-3940AUW; PCI to Ultra-Wide SCSI). An 256-MB internal cache helps it to eliminate recurring disk accesses.
                                                                                                                                                                                                                                      Four nine-drive disk arrays provide the actual storage. The two larger arrays use 18-GB IBM drives; the two smaller arrays use 9-GB Micropolis and Quantum drives. A separate 4-GB Quantum drive is used as the "system disk."
                                                                                                                                                                                                                                      The output side is handled by a single Intel 100Base-T controller (Pro/100B PCI), which feeds into the Internet through a number of shared DS3 (45 Mbps) and OC3 (155 Mbps) circuits.
                                                                                                                                                                                                                                      A detailed description of the system is available as ftp.cdrom.com/archive-info/configuration;

                                                                                                                                                                                                                                      • The software
                                                                                                                                                                                                                                      • The system software is rather prosaic: a copy of FreeBSD, supplemented by home-grown FTP mirroring and server code. Because of the massive hardware support, the software "only" needs to keep the I/O going in an efficient and reliable manner.

                                                                                                                                                                                                                                        FreeBSD, the "prosaic" operating system mentioned above, merits a bit more discussion. Like Linux, FreeBSD is open source. Anyone can examine, modify, and/or redistribute the source code. And, like Linux, an active user community helps the authors to find bugs, improve documentation, and generally support the OS.
                                                                                                                                                                                                                                        Unlike Linux, FreeBSD is derived from the Berkeley Unix code that forms the foundation for most commercial Unix variants. When you use the "fast file system" (cylinder groups, long file names, symbolic links, etc.), TCP/IP networking, termcap, or even vi, you are using Berkeley Unix additions.
                                                                                                                                                                                                                                        The version of BSD underlying FreeBSD, however, is "pure" BSD; don't look for the System V modifications you see in Solaris. Instead, think of it as SunOS, brought up to date with Kerberos, modern sendmail, an updated filesystem, and more. Solid, fast, and free!
                                                                                                                                                                                                                                        One of FreeBSD's finest innovations, the Ports Collection, makes FreeBSD a delight for open source application users. The Ports Collection automates the downloading, building, and installation (including de-installation) of 2,300+ open source packages.

                                                                                                                                                                                                                                        • The company
                                                                                                                                                                                                                                        • Walnut Creek CDROM has been around for several years now, so you are likely to be familiar with its offerings. You may not realize, however, that it provides the major financial support for FreeBSD.

                                                                                                                                                                                                                                          The FreeBSD support has two purposes. First, it provides the company with a solid base to run wcarchive and other massive projects. Second, it ties in with the company's mission of making software (and data) economically accessible.
                                                                                                                                                                                                                                          Bob Bruce, the firm's founder, is an interesting guy: laid back and somewhat conservative in manner, but productive and innovative in practice. Here is a possibly illustrative story.
                                                                                                                                                                                                                                          When Bob started selling CD-ROMs, disc caddies were selling for $15 each. Bob thought that was rather high, so he started investigating the marketplace. A long-distance call to Japan got him Sony's fax number; a series of faxes got him in touch with the salespeople.
                                                                                                                                                                                                                                          It turned out that caddies were available, in bulk, for only a few dollars each. Bulk, in this case, meant pallet-loads of 10,000 caddies. In an act of great faith, Bob purchased a pallet of caddies, then proceeded to sell them for five dollars each.
                                                                                                                                                                                                                                          The results were everything he might have wished. Folks who bought his CD-ROMs added caddies to their orders; folks who bought piles of caddies added in a disc or two. Either way, Walnut Creek CDROM was making a name for itself.
                                                                                                                                                                                                                                          Many pallet-loads later, the company is still selling caddies, making and distributing CD-ROMs, and giving away bits. Walnut Creek CDROM is a real open-source success story; its breadth and depth of offerings is well worth a look.

                                                                                                                                                                                                                                          Beastie Bits
                                                                                                                                                                                                                                          • OpenBSD adds kqueue event support to DRM, to detect device changes like HDMI cables being plugged in, and trigger randr events
                                                                                                                                                                                                                                          • Thesis describing QUAD3, a unix-like, multi-tasking operating system for the 6502 processor
                                                                                                                                                                                                                                          • Windows is getting chmod and chown...
                                                                                                                                                                                                                                          • Timeline: How they kept Meltdown and Spectre secret for so long
                                                                                                                                                                                                                                          • bsd.network is a *BSD-themed Mastodon Instance: Peter Hessler is administering a new Mastodon instance, running in an OpenBSD VM on top of an OpenBSD vmm hypervisor
                                                                                                                                                                                                                                          • Computer-Aided Instruction on UNIX
                                                                                                                                                                                                                                          • AsiaBSDCon 2018 Travel Grant Application Now Open
                                                                                                                                                                                                                                          • AsiaBSDCon 2018 FreeBSD Developers Summit Call for Proposals
                                                                                                                                                                                                                                          • LinuxFest Northwest 2018 Call for Proposals
                                                                                                                                                                                                                                          • Feedback/Questions
                                                                                                                                                                                                                                            • Jason - Dont break my ports
                                                                                                                                                                                                                                            • Wilyarti - show content https://clinetworking.wordpress.com/2017/12/08/data-de-duplication-file-diff-ing-and-s3-style-object-storage-using-digital-ocean-spaces

                                                                                                                                                                                                                                            • Scott - Your show is Perfect!

                                                                                                                                                                                                                                            • Ken - Community Culture

                                                                                                                                                                                                                                            • 1 hr 57 min
                                                                                                                                                                                                                                            • 229: The Meltdown of Spectre

                                                                                                                                                                                                                                              We review Meltdown and Spectre responses from various BSD projects, show you how to run CentOS with bhyve, GhostBSD 11.1 is out, and we look at the case against the fork syscall.

                                                                                                                                                                                                                                              This episode was brought to you by

                                                                                                                                                                                                                                              Headlines
                                                                                                                                                                                                                                              More Meltdown
                                                                                                                                                                                                                                              • Much has been happened this week, but before we get into a status update of the various mitigations on the other BSDs, some important updates:

                                                                                                                                                                                                                                                • Intel has recalled the microcode update they issued on January 8th. It turns out this update can cause Haswell and Broadwell based systems to randomly reboot, with some frequency.
                                                                                                                                                                                                                                                • AMD has confirmed that its processors are vulnerable to both variants of Spectre, and the the fix for variant #2 will require a forthcoming microcode update, in addition to OS level mitigations
                                                                                                                                                                                                                                                • Fujitsu has provided a status report for most of its products, including SPARC hardware
                                                                                                                                                                                                                                                • The Register of course has some commentary

                                                                                                                                                                                                                                                • If new code is needed, Intel will need to get it right: the company already faces numerous class action lawsuits. Data centre operators already scrambling to conduct unplanned maintenance will not be happy about the fix reducing stability.

                                                                                                                                                                                                                                                  AMD has said that operating system patches alone will address the Spectre bounds check bypass bug. Fixing Spectre’s branch target injection flaw will require firmware fixes that AMD has said will start to arrive for Ryzen and EPYC CPUs this week.
                                                                                                                                                                                                                                                  The Register has also asked other server vendors how they’re addressing the bugs. Oracle has patched its Linux, but has told us it has “No comment/statement on this as of now” in response to our query about its x86 systems, x86 cloud, Linux and Solaris on x86. The no comment regarding Linux is odd as fixes for Oracle Linux landed here on January 9th.
                                                                                                                                                                                                                                                  SPARC-using Fujitsu, meanwhile, has published advice (PDF) revealing how it will address the twin bugs in its servers and PCs, and also saying its SPARC systems are “under investigation”.

                                                                                                                                                                                                                                                  • Response from OpenBSD:
                                                                                                                                                                                                                                                  • 'Meltdown, aka "Dear Intel, you suck"'

                                                                                                                                                                                                                                                    • Theo de Raadt's response to Meltdown

                                                                                                                                                                                                                                                    • That time in 2007 when Theo talked about how Intel x86 had major design problems in their chips

                                                                                                                                                                                                                                                    • OpenBSD gets a Microcode updater

                                                                                                                                                                                                                                                    • Response from Dragonfly BSD:

                                                                                                                                                                                                                                                    • The longer response in four commits

                                                                                                                                                                                                                                                      • One
                                                                                                                                                                                                                                                      • Two
                                                                                                                                                                                                                                                      • Three
                                                                                                                                                                                                                                                      • Four
                                                                                                                                                                                                                                                      • Even more Meltdown

                                                                                                                                                                                                                                                      • DragonflyBSD master now has full IBRS and IBPB support

                                                                                                                                                                                                                                                        • IBRS (Indirect Branch Restricted Speculation): The x86 IBRS feature requires corresponding microcode support. It mitigates the variant 2 vulnerability.
                                                                                                                                                                                                                                                        • If IBRS is set, near returns and near indirect jumps/calls will not allow their predicted target address to be controlled by code that executed in a less privileged prediction mode before the IBRS mode was last written with a value of 1 or on another logical processor so long as all RSB entries from the previous less privileged prediction mode are overwritten.
                                                                                                                                                                                                                                                        • Speculation on Skylake and later requires these patches ("dynamic IBRS") be used instead of retpoline. If you are very paranoid or you run on a CPU where IBRS=1 is cheaper, you may also want to run in "IBRS always" mode.
                                                                                                                                                                                                                                                        • IBPB (Indirect Branch Prediction Barrier): Setting of IBPB ensures that earlier code's behavior does not control later indirect branch predictions. It is used when context switching to new untrusted address space. Unlike IBRS, IBPB is a command MSR and does not retain its state.
                                                                                                                                                                                                                                                        • DragonFlyBSD's Meltdown Fix Causing More Slowdowns Than Linux

                                                                                                                                                                                                                                                        • NetBSD HOTPATCH()

                                                                                                                                                                                                                                                        • NetBSD SVS (Separate Virtual Space)

                                                                                                                                                                                                                                                        • Running CentOS with Bhyve

                                                                                                                                                                                                                                                          With the addition of UEFI in FreeBSD (since version 11), users of bhyve can use the UEFI boot loader instead of the grub2-bhyve port for booting operating systems such as Microsoft Windows, Linux and OpenBSD. The following page provides information necessary for setting up bhyve with UEFI boot loader support:

                                                                                                                                                                                                                                                          https://wiki.freebsd.org/bhyve/UEFI
                                                                                                                                                                                                                                                          Features have been added to vmrun.sh to make it easier to setup the UEFI boot loader, but the following is required to install the UEFI firmware pkg:

                                                                                                                                                                                                                                                          # pkg install -y uefi-edk2-bhyve

                                                                                                                                                                                                                                                          With graphical support, you can use a vnc client like tigervnc, which can be installed with the following command:

                                                                                                                                                                                                                                                          # pkg install -y tigervnc

                                                                                                                                                                                                                                                          In the case of most corporate or government environments, the Linux of choice is RHEL, or CentOS. Utilizing bhyve, you can test and install CentOS in a bhyve VM the same way you would deploy a Linux VM in production. The first step is to download the CentOS iso (for this tutorial I used the CentOS minimal ISO): http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1708.iso

                                                                                                                                                                                                                                                          I normally use a ZFS Volume (zvol) when running bhyve VMs. Run the following commands to create a zvol (ensure you have enough disk space to perform these operations):

                                                                                                                                                                                                                                                          # zfs create -V20G -o volmode=dev zroot/centos0

                                                                                                                                                                                                                                                          • (zroot in this case is the zpool I am using)
                                                                                                                                                                                                                                                          • Similar to my previous post about vmrun.sh, you need certain items to be configured on FreeBSD in order to use bhyve. The following commands are necessary to get things running:

                                                                                                                                                                                                                                                            # echo "vfs.zfs.vol.mode=2" >> /boot/loader.conf
                                                                                                                                                                                                                                                            # kldload vmm
                                                                                                                                                                                                                                                            # ifconfig tap0 create
                                                                                                                                                                                                                                                            # sysctl net.link.tap.up_on_open=1
                                                                                                                                                                                                                                                            net.link.tap.up_on_open: 0 -> 1
                                                                                                                                                                                                                                                            # ifconfig bridge0 create
                                                                                                                                                                                                                                                            # ifconfig bridge0 addm em0 addm tap0
                                                                                                                                                                                                                                                            # ifconfig bridge0 up
                                                                                                                                                                                                                                                            • (replace em0 with whatever your physical interface is).
                                                                                                                                                                                                                                                            • There are a number of utilities that can be used to manage bhyve VMs, and I am sure there is a way to use vmrun.sh to run Linux VMs, but since all of the HowTos for running Linux use the bhyve command line, the following script is what I use for running CentOS with bhyve.

                                                                                                                                                                                                                                                              #!/bin/sh
                                                                                                                                                                                                                                                              #
                                                                                                                                                                                                                                                              # General bhyve install/run script for CentOS
                                                                                                                                                                                                                                                              # Based on scripts from pr1ntf and lattera
                                                                                                                                                                                                                                                              HOST="127.0.0.1"
                                                                                                                                                                                                                                                              PORT="5901"
                                                                                                                                                                                                                                                              ISO="/tmp/centos.iso"
                                                                                                                                                                                                                                                              VMNAME="centos"
                                                                                                                                                                                                                                                              ZVOL="centos0"
                                                                                                                                                                                                                                                              SERIAL="nmda0A"
                                                                                                                                                                                                                                                              TAP="tap1"
                                                                                                                                                                                                                                                              CPU="1"
                                                                                                                                                                                                                                                              RAM="1024M"
                                                                                                                                                                                                                                                              HEIGHT="800"
                                                                                                                                                                                                                                                              WIDTH="600"
                                                                                                                                                                                                                                                              if [ "$1" == "install" ];
                                                                                                                                                                                                                                                              then
                                                                                                                                                                                                                                                              #Kill it before starting it
                                                                                                                                                                                                                                                              bhyvectl --destroy --vm=$VMNAME
                                                                                                                                                                                                                                                              bhyve -c $CPU -m $RAM -H -P -A \
                                                                                                                                                                                                                                                              -s 0,hostbridge \
                                                                                                                                                                                                                                                              -s 2,virtio-net,$TAP \
                                                                                                                                                                                                                                                              -s 3,ahci-cd,$ISO \
                                                                                                                                                                                                                                                              -s 4,virtio-blk,/dev/zvol/zroot/$ZVOL \
                                                                                                                                                                                                                                                              -s 29,fbuf,tcp=$HOST:$PORT,w=$WIDTH,h=$HEIGHT \
                                                                                                                                                                                                                                                              -s 30,xhci,tablet \
                                                                                                                                                                                                                                                              -s 31,lpc -l com1,/dev/$SERIAL \
                                                                                                                                                                                                                                                              -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
                                                                                                                                                                                                                                                              $VMNAME
                                                                                                                                                                                                                                                              #kill it after
                                                                                                                                                                                                                                                              bhyvectl --destroy --vm=$VMNAME
                                                                                                                                                                                                                                                              elif [ "$1" == "run" ];
                                                                                                                                                                                                                                                              then
                                                                                                                                                                                                                                                              #Kill it before starting it
                                                                                                                                                                                                                                                              bhyvectl --destroy --vm=centos
                                                                                                                                                                                                                                                              bhyve -c $CPU -m $RAM -w -H \
                                                                                                                                                                                                                                                              -s 0,hostbridge \
                                                                                                                                                                                                                                                              -s 2,virtio-net,$TAP \
                                                                                                                                                                                                                                                              -s 4,virtio-blk,/dev/zvol/zroot/$ZVOL \
                                                                                                                                                                                                                                                              -s 29,fbuf,tcp=$HOST:$PORT,w=$WIDTH,h=$HEIGHT \
                                                                                                                                                                                                                                                              -s 30,xhci,tablet \
                                                                                                                                                                                                                                                              -s 31,lpc -l com1,/dev/$SERIAL \
                                                                                                                                                                                                                                                              -l bootrom,/usr/local/share/uefi-firmware/BHYVE_UEFI.fd \
                                                                                                                                                                                                                                                              $VMNAME &
                                                                                                                                                                                                                                                              else
                                                                                                                                                                                                                                                              echo "Please type install or run";
                                                                                                                                                                                                                                                              fi

                                                                                                                                                                                                                                                              The variables at the top of the script can be adjusted to fit your own needs. With the addition of the graphics output protocol in UEFI (or UEFI-GOP), a VNC console is launched and hosted with the HOST and PORT setting. There is a password option available for the VNC service, but the connection should be treated as insecure. It is advised to only listen on localhost with the VNC console and tunnel into the host of the bhyve VM. Now with the ISO copied to /tmp/centos.iso, and the script saved as centos.sh you can run the following command to start the install:

                                                                                                                                                                                                                                                              # ./centos.sh install

                                                                                                                                                                                                                                                              At this point, using vncviewer (on the local machine, or over an SSH tunnel), you should be able to bring up the console and run the CentOS installer as normal. The absolutely most critical item is to resolve an issue with the booting of UEFI after the installation has completed. Because of the path used in bhyve, you need to run the following to be able to boot CentOS after the installation:

                                                                                                                                                                                                                                                              # cp -f /mnt/sysimage/boot/efi/EFI/centos/grubx64.efi /mnt/sysimage/boot/efi/EFI/BOOT

                                                                                                                                                                                                                                                              With this setting changed, the same script can be used to launch your CentOS VM as needed:

                                                                                                                                                                                                                                                              # ./centos.sh run

                                                                                                                                                                                                                                                              If you are interested in a better solution for managing your Linux VM, take a look at the various bhyve management ports in the FreeBSD ports tree.

                                                                                                                                                                                                                                                              Interview - newnix architect - @newnix
                                                                                                                                                                                                                                                              News Roundup
                                                                                                                                                                                                                                                              GhostBSD 11.1 - FreeBSD for the desktop

                                                                                                                                                                                                                                                              GhostBSD is a desktop oriented operating system which is based on FreeBSD. The project takes the FreeBSD operating system and adds a desktop environment, some popular applications, a graphical package manager and Linux binary compatibility. GhostBSD is available in two flavours, MATE and Xfce, and is currently available for 64-bit x86 computers exclusively. I downloaded the MATE edition which is available as a 2.3GB ISO file.

                                                                                                                                                                                                                                                              • Installing
                                                                                                                                                                                                                                                              • GhostBSD's system installer is a graphical application which begins by asking us for our preferred language, which we can select from a list. We can then select our keyboard's layout and our time zone. When it comes to partitioning we have three main options: let GhostBSD take over the entire disk using UFS as the file system, create a custom UFS layout or take over the entire disk using ZFS as the file system. UFS is a classic file system and quite popular, it is more or less FreeBSD's equivalent to Linux's ext4. ZFS is a more advanced file system with snapshots, multi-disk volumes and optional deduplication of data. I decided to try the ZFS option.

                                                                                                                                                                                                                                                                Once I selected ZFS I didn't have many more options to go through. I was given the chance to set the size of my swap space and choose whether to set up ZFS as a plain volume, with a mirrored disk for backup or in a RAID arrangement with multiple disks. I stayed with the plain, single disk arrangement. We are then asked to create a password for the root account and create a username and password for a regular user account. The installer lets us pick our account's shell with the default being fish, which seemed unusual. Other shells, including bash, csh, tcsh, ksh and zsh are available. The installer goes to work copying files and offers to reboot our computer when it is done.

                                                                                                                                                                                                                                                                • Early impressions
                                                                                                                                                                                                                                                                • The newly installed copy of GhostBSD boots to a graphical login screen where we can sign into the account we created during the install process. Signing into our account loads the MATE 1.18 desktop environment. I found MATE to be responsive and applications were quick to open. Early on I noticed odd window behaviour where windows would continue to slide around after I moved them with the mouse, as if the windows were skidding on ice. Turning off compositing in the MATE settings panel corrected this behaviour. I also found the desktop's default font (Montserrat Alternates) to be hard on my eyes as the font is thin and, for lack of a better term, bubbly. Fonts can be easily adjusted in the settings panel.

                                                                                                                                                                                                                                                                  A few minutes after I signed into my account, a notification appeared in the system tray letting me know software updates were available. Clicking the update icon brings up a small window showing us a list of package updates and, if any are available, updates to the base operating system. FreeBSD, and therefore GhostBSD, both separate the core operating system from the applications (packages) which run on the operating system. This means we can update the core of the system separately from the applications. GhostBSD's core remains relatively static and minimal while applications are updated using a semi-rolling schedule.

                                                                                                                                                                                                                                                                  When we are updating the core operating system, the update manager will give us the option of rebooting the system to finish the process. We can dismiss this prompt to continue working, but the wording of the prompt may be confusing. When asked if we want to reboot to continue the update process, the options presented to us are "Continue" or "Restart". The Continue option closes the update manager and returns us to the MATE desktop.

                                                                                                                                                                                                                                                                  The update manager worked well for me and the only issue I ran into was when I dismissed the update manager and then wanted to install updates later. There are two launchers for the update manager, one in MATE's System menu and one in the settings panel. Clicking either of these launchers didn't accomplish anything. Running the update manager from the command line simply caused the process to lock up until killed. I found if I had dismissed the update manager once, I'd have to wait until I logged in again to use it. Alternatively, I could use a command line tool or use the OctoPkg package manager to install package updates.

                                                                                                                                                                                                                                                                  • Conclusions
                                                                                                                                                                                                                                                                  • Most of my time with GhostBSD, I was impressed and happy with the operating system. GhostBSD builds on a solid, stable FreeBSD core. We benefit from FreeBSD's performance and its large collection of open source software packages. The MATE desktop was very responsive in my trial and the system is relatively light on memory, even when run on ZFS which has a reputation for taking up more memory than other file systems.

                                                                                                                                                                                                                                                                    FreeBSD Looks At Making Wayland Support Available By Default

                                                                                                                                                                                                                                                                    There's an active discussion this week about making Wayland support available by default on FreeBSD.

                                                                                                                                                                                                                                                                    FreeBSD has working Wayland support -- well, assuming you have working Intel / Radeon graphics -- and do have Weston and some other Wayland components available via FreeBSD Ports. FreeBSD has offered working Wayland support that is "quite usable" for more than one year. But, it's not too easy to get going with Wayland on FreeBSD.

                                                                                                                                                                                                                                                                    Right now those FreeBSD desktop users wanting to use/develop with Wayland currently need to rebuild the GTK3 tool-kit, Mesa, and other packages with Wayland support enabled. This call for action now is about allowing the wayland=on to be made the default.

                                                                                                                                                                                                                                                                    This move would then allow these dependencies to be built with Wayland support by default, but for the foreseeable future FreeBSD will continue defaulting to X.Org-based sessions.

                                                                                                                                                                                                                                                                    The FreeBSD developers mostly acknowledge that Wayland is the future and the cost of enabling Wayland support by default is just slightly larger packages, but that weight is still leaner than the size of the X.Org code-base and its dependencies.

                                                                                                                                                                                                                                                                    • FreeBSD vote thread
                                                                                                                                                                                                                                                                    • TrueOS Fliped the switch already
                                                                                                                                                                                                                                                                    • fork is not my favorite syscall

                                                                                                                                                                                                                                                                      This article has been on my to-write list for a while now. In my opinion, fork is one of the most questionable design choices of Unix. I don’t understand the circumstances that led to its creation, and I grieve over the legacy rationale that keeps it alive to this day.

                                                                                                                                                                                                                                                                      Let’s set the scene. It’s 1971 and you’re a fly on the wall in Bell Labs, watching the first edition of Unix being designed for the PDP-11/20. This machine has a 16-bit address space with no more than 248 kilobytes of memory. They’re discussing how they’re going to support programs that spawn new programs, and someone has a brilliant idea. “What if we copied the entire address space of the program into a new process running from the same spot, then let them overwrite themselves with the new program?” This got a rousing laugh out of everyone present, then they moved on to a better design which would become immortalized in the most popular and influential operating system of all time.

                                                                                                                                                                                                                                                                      At least, that’s the story I’d like to have been told. In actual fact, the laughter becomes consensus. There’s an obvious problem with this approach: every time you want to execute a new program, the entire process space is copied and promptly discarded when the new program begins. Usually when I complain about fork, this the point when its supporters play the virtual memory card, pointing out that modern operating systems don’t actually have to copy the whole address space. We’ll get to that, but first — First Edition Unix does copy the whole process space, so this excuse wouldn’t have held up at the time. By Fourth Edition Unix (the next one for which kernel sources survived), they had wisened up a bit, and started only copying segments when they faulted.

                                                                                                                                                                                                                                                                      This model leads to a number of problems. One is that the new process inherits all of the parent’s process descriptors, so you have to close them all before you exec another process. However, unless you’re manually keeping tabs on your open file descriptors, there is no way to know what file handles you must close! The hack that solves this is CLOEXEC, the first of many hacks that deal with fork’s poor design choices. This file descriptors problem balloons a bit - consider for example if you want to set up a pipe. You have to establish a piped pair of file descriptors in the parent, then close every fd but the pipe in the child, then dup2 the pipe file descriptor over the (now recently closed) file descriptor 1. By this point you’ve probably had to do several non-trivial operations and utilize a handful of variables from the parent process space, which hopefully were on the stack so that we don’t end up copying segments into the new process space anyway.

                                                                                                                                                                                                                                                                      These problems, however, pale in comparison to my number one complaint with the fork model. Fork is the direct cause of the stupidest component I’ve ever heard of in an operating system: the out-of-memory (aka OOM) killer. Say you have a process which is using half of the physical memory on your system, and wants to spawn a tiny program. Since fork “copies” the entire process, you might be inclined to think that this would make fork fail. But, on Linux and many other operating systems since, it does not fail! They agree that it’s stupid to copy the entire process just to exec something else, but because fork is Important for Backwards Compatibility, they just fake it and reuse the same memory map (except read-only), then trap the faults and actually copy later. The hope is that the child will get on with it and exec before this happens.

                                                                                                                                                                                                                                                                      However, nothing prevents the child from doing something other than exec - it’s free to use the memory space however it desires! This approach now leads to memory overcommittment - Linux has promised memory it does not have. As a result, when it really does run out of physical memory, Linux will just kill off processes until it has some memory back. Linux makes an awfully big fuss about “never breaking userspace” for a kernel that will lie about memory it doesn’t have, then kill programs that try to use the back-alley memory they were given. That this nearly 50 year old crappy design choice has come to this astonishes me.

                                                                                                                                                                                                                                                                      Alas, I cannot rant forever without discussing the alternatives. There are better process models that have been developed since Unix!

                                                                                                                                                                                                                                                                      The first attempt I know of is BSD’s vfork syscall, which is, in a nutshell, the same as fork but with severe limitations on what you do in the child process (i.e. nothing other than calling exec straight away). There are loads of problems with vfork. It only handles the most basic of use cases: you cannot set up a pipe, cannot set up a pty, and can’t even close open file descriptors you inherited from the parent. Also, you couldn’t really be sure of what variables you were and weren’t editing or allowed to edit, considering the limitations of the C specification. Overall this syscall ended up being pretty useless.

                                                                                                                                                                                                                                                                      Another model is posix_spawn, which is a hell of an interface. It’s far too complicated for me to detail here, and in my opinion far too complicated to ever consider using in practice. Even if it could be understood by mortals, it’s a really bad implementation of the spawn paradigm — it basically operates like fork backwards, and inherits many of the same flaws. You still have to deal with children inheriting your file descriptors, for example, only now you do it in the parent process. It’s also straight-up impossible to make a genuine pipe with posix_spawn. (Note: a reader corrected me - this is indeed possible via posix_spawn_file_actions_adddup2.)

                                                                                                                                                                                                                                                                      Let’s talk about the good models - rfork and spawn (at least, if spawn is done right). rfork originated from plan9 and is a beautiful little coconut of a syscall, much like the rest of plan9. They also implement fork, but it’s a special case of rfork. plan9 does not distinguish between processes and threads - all threads are processes and vice versa. However, new processes in plan9 are not the everything-must-go fuckfest of your typical fork call. Instead, you specify exactly what the child should get from you. You can choose to include (or not include) your memory space, file descriptors, environment, or a number of other things specific to plan9. There’s a cool flag that makes it so you don’t have to reap the process, too, which is nice because reaping children is another really stupid idea. It still has some problems, mainly around creating pipes without tremendous file descriptor fuckery, but it’s basically as good as the fork model gets. Note: Linux offers this via the clone syscall now, but everyone just fork+execs anyway.

                                                                                                                                                                                                                                                                      The other model is the spawn model, which I prefer. This is the approach I took in my own kernel for KnightOS, and I think it’s also used in NT (Microsoft’s kernel). I don’t really know much about NT, but I can tell you how it works in KnightOS. Basically, when you create a new process, it is kept in limbo until the parent consents to begin. You are given a handle with which you can configure the process - you can change its environment, load it up with file descriptors to your liking, and so on. When you’re ready for it to begin, you give the go-ahead and it’s off to the races. The spawn model has none of the flaws of fork.

                                                                                                                                                                                                                                                                      Both fork and exec can be useful at times, but spawning is much better for 90% of their use-cases. If I were to write a new kernel today, I’d probably take a leaf from plan9’s book and find a happy medium between rfork and spawn, so you could use spawn to start new threads in your process space as well. To the brave OS designers of the future, ready to shrug off the weight of legacy: please reconsider fork.

                                                                                                                                                                                                                                                                      Enable ld.lld as bootstrap linker by default on amd64
                                                                                                                                                                                                                                                                      • Enable ld.lld as bootstrap linker by default on amd64
                                                                                                                                                                                                                                                                      • For some time we have been planning to migrate to LLVM's lld linker.

                                                                                                                                                                                                                                                                        Having a man page was the last blocking issue for using ld.lld to link
                                                                                                                                                                                                                                                                        the base system kernel + userland, now addressed by r327770. Link the
                                                                                                                                                                                                                                                                        kernel and userland libraries and binaries with ld.lld by default, for
                                                                                                                                                                                                                                                                        additional test coverage.

                                                                                                                                                                                                                                                                        This has been a long time in the making. On 2013-04-13 I submitted an

                                                                                                                                                                                                                                                                        upstream tracking issue in LLVM PR 23214: [META] Using LLD as FreeBSD's
                                                                                                                                                                                                                                                                        system linker. Since then 85 individual issues were identified, and
                                                                                                                                                                                                                                                                        submitted as dependencies. These have been addressed along with two
                                                                                                                                                                                                                                                                        and a half years of other lld development and improvement.

                                                                                                                                                                                                                                                                        I'd like to express deep gratitude to upstream lld developers Rui

                                                                                                                                                                                                                                                                        Ueyama, Rafael Espindola, George Rimar and Davide Italiano. They put in
                                                                                                                                                                                                                                                                        substantial effort in addressing the issues we found affecting
                                                                                                                                                                                                                                                                        FreeBSD/amd64.

                                                                                                                                                                                                                                                                        To revert to using ld.bfd as the bootstrap linker, in /etc/src.conf set

                                                                                                                                                                                                                                                                        WITHOUT_LLD_BOOTSTRAP=yes

                                                                                                                                                                                                                                                                        If you need to set this, please follow up with a PR or post to the

                                                                                                                                                                                                                                                                        freebsd-toolchain mailing list explaining how default WITH_LLD_BOOTSTRAP
                                                                                                                                                                                                                                                                        failed for your use case.

                                                                                                                                                                                                                                                                        Note that GNU ld.bfd is still installed as /usr/bin/ld, and will still

                                                                                                                                                                                                                                                                        be used for linking ports. ld.lld can be installed as /usr/bin/ld by
                                                                                                                                                                                                                                                                        setting in /etc/src.conf

                                                                                                                                                                                                                                                                        WITH_LLD_IS_LLD=yes

                                                                                                                                                                                                                                                                        A followup commit will set WITH_LLD_IS_LD by default, possibly after

                                                                                                                                                                                                                                                                        Clang/LLVM/lld 6.0 is merged to FreeBSD.

                                                                                                                                                                                                                                                                        Release notes: Yes

                                                                                                                                                                                                                                                                        Sponsored by: The FreeBSD Foundation

                                                                                                                                                                                                                                                                        • Followup: https://www.mail-archive.com/[email protected]/msg155493.html
                                                                                                                                                                                                                                                                        • ***
                                                                                                                                                                                                                                                                          Beastie Bits
                                                                                                                                                                                                                                                                          • BSDCAN2017 Interview with Peter Hessler, Reyk Floeter, and Henning Brauer
                                                                                                                                                                                                                                                                          • video
                                                                                                                                                                                                                                                                          • DSBMD
                                                                                                                                                                                                                                                                          • ccc34 talk - May contain DTraces of FreeBSD
                                                                                                                                                                                                                                                                          • [scripts to run an OpenBSD mirror, rsync and verify])(https://github.com/bluhm/mirror-openbsd)
                                                                                                                                                                                                                                                                          • Old School PC Fonts
                                                                                                                                                                                                                                                                          • Feedback/Questions
                                                                                                                                                                                                                                                                            • David - Approach and Tools for Snapshots and Remote Replication
                                                                                                                                                                                                                                                                            • Brian - Help getting my FreeBSD systems talking across the city
                                                                                                                                                                                                                                                                            • Malcolm - First BSD Meetup in Stockholm happened and it was great
                                                                                                                                                                                                                                                                            • Brad - Update on TrueOS system
                                                                                                                                                                                                                                                                            • ***
                                                                                                                                                                                                                                                                              1 hr 49 min
                                                                                                                                                                                                                                                                            • 228: The Spectre of Meltdown

                                                                                                                                                                                                                                                                              We review the information about Spectre & Meltdown thus far, we look at NetBSD memory sanitizer progress, Postgres on ZFS & show you a bit about NomadBSD.

                                                                                                                                                                                                                                                                              This episode was brought to you by

                                                                                                                                                                                                                                                                              Headlines
                                                                                                                                                                                                                                                                              Meltdown Spectre
                                                                                                                                                                                                                                                                              • Official Site
                                                                                                                                                                                                                                                                              • Kernel-memory-leaking Intel processor design flaw forces Linux, Windows redesign
                                                                                                                                                                                                                                                                              • Intel’s official response
                                                                                                                                                                                                                                                                              • The Register mocks intels response with pithy annotations
                                                                                                                                                                                                                                                                              • Intel’s Analysis PDF
                                                                                                                                                                                                                                                                              • XKCD
                                                                                                                                                                                                                                                                              • Response from FreeBSD
                                                                                                                                                                                                                                                                              • FreeBSD's patch WIP
                                                                                                                                                                                                                                                                              • Why Raspberry Pi isn’t vulnerable to Spectre or Meltdown
                                                                                                                                                                                                                                                                              • Xen mitigation patches
                                                                                                                                                                                                                                                                              • Overview of affected FreeBSD Platforms/Architectures
                                                                                                                                                                                                                                                                              • Groff's response
                                                                                                                                                                                                                                                                              • ##### We’ll cover OpenBSD, NetBSD, and DragonflyBSD’s responses in next weeks episode.
                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                ###The LLVM Memory Sanitizer support work in progress
                                                                                                                                                                                                                                                                                > In the past 31 days, I've managed to get the core functionality of MSan to work. This is an uninitialized memory usage detector. MSan is a special sanitizer because it requires knowledge of every entry to the basesystem library and every entry to the kernel through public interfaces. This is mandatory in order to mark memory regions as initialized. Most of the work has been done directly for MSan. However, part of the work helped generic features in compiler-rt.
                                                                                                                                                                                                                                                                              • Sanitizers
                                                                                                                                                                                                                                                                              • > Changes in the sanitizer are listed below in chronological order. Almost all of the changes mentioned here landed upstream. A few small patches were reverted due to breaking non-NetBSD hosts and are rescheduled for further investigation. I maintain these patches locally and have moved on for now to work on the remaining features.
                                                                                                                                                                                                                                                                              • NetBSD syscall hooks
                                                                                                                                                                                                                                                                              • > I wrote a large patch (815kb!) adding support for NetBSD syscall hooks for use with sanitizers.
                                                                                                                                                                                                                                                                              • NetBSD ioctl(2) hooks
                                                                                                                                                                                                                                                                              • > Similar to the syscall hooks, there is need to handle every ioctl(2) call. I've created the needed patch, this time shorter - for less than 300kb.
                                                                                                                                                                                                                                                                              • New patches still pending for upstream review
                                                                                                                                                                                                                                                                              • > There are two corrections that I've created, and they are still pending upstream for review:
                                                                                                                                                                                                                                                                              • Add MSan interceptor for fstat(2)](https://reviews.llvm.org/D41637)
                                                                                                                                                                                                                                                                              • Correct the setitimer interceptor on NetBSD)](https://reviews.llvm.org/D41502)
                                                                                                                                                                                                                                                                              • > I've got a few more local patches that require cleanup before submitting to review.
                                                                                                                                                                                                                                                                              • NetBSD basesystem corrections
                                                                                                                                                                                                                                                                              • Sanitizers in Go
                                                                                                                                                                                                                                                                              • The MSan state as of today
                                                                                                                                                                                                                                                                              • Solaris support in sanitizers
                                                                                                                                                                                                                                                                              • > I've helped the Solaris team add basic support for Sanitizers (ASan, UBsan). This does not help NetBSD directly, however indirectly it improves the overall support for non-Linux hosts and helps to catch more Linuxisms in the code.
                                                                                                                                                                                                                                                                              • Plan for the next milestone
                                                                                                                                                                                                                                                                              • > I plan to continue the work on MSan and correct sanitizing of the NetBSD basesystem utilities. This mandates me to iterate over the basesystem libraries implementing the missing interceptors and correcting the current support of the existing ones. My milestone is to build all src/bin programs against Memory Sanitizer and when possible execute them cleanly.
                                                                                                                                                                                                                                                                              • This work was sponsored by The NetBSD Foundation.
                                                                                                                                                                                                                                                                              • The NetBSD Foundation is a non-profit organization and welcomes any donations to help us continue funding projects and services to the open-source community. Please consider visiting the following URL, and chip in what you can: http://netbsd.org/donations/#how-to-donate
                                                                                                                                                                                                                                                                              • ***
                                                                                                                                                                                                                                                                                ##News Roundup
                                                                                                                                                                                                                                                                                ###MWL’s 2017 Wrap-Up
                                                                                                                                                                                                                                                                                > The obvious place to start is my 2016 wrap-up post](https://blather.michaelwlucas.com/archives/2822), where I listed goals for 2017. As usual, these goals were wildly delusional.
                                                                                                                                                                                                                                                                                > The short answer is, my iron was back up to normal. My writing speed wasn’t, though. I’d lost too much general health, and needed hard exercise to recover it. Yes, writing requires physical endurance. Maintaining that level of concentration for several hours a day demands a certain level of blood flow to the brain. I could have faked it in a day job, but when self-employed as an artist? Not so much.
                                                                                                                                                                                                                                                                                > Then there’s travel. I did my usual BSDCan trip, plus two educational trips to Lincoln City, Oregon. The current political mayhem convinced me that if I wanted to hit EuroBSDCon any time in the next few years, I should do it in the very near future. So I went to Paris, where I promptly got pickpocketed. (Thankfully, they didn’t get my passport.) I was actively writing the third edition of Absolute FreeBSD, so I visited BSDCam in Cambridge to get the latest information and a sense of where FreeBSD was going. I also did weekends at Kansas LinuxFest (because they asked and paid for my trip) and Penguicon.
                                                                                                                                                                                                                                                                                > (Because people will ask: why EuroBSDCon and not AsiaBSDCon? A six-hour transatlantic flight requires that I take a substantial dose of heavy-grade tranquilizers. I’m incapable of making intelligent decisions while on those drugs, or for several hours afterward. They don’t last long enough for twelve-hour flight to Japan, so I need to be accompanied by someone qualified to tell me when I need to take the next dose partway through the flight. This isn’t a predetermined time that I can set an alarm for; it depends on how the clonazepam affects me at those altitudes. A drug overdose while flying over the North Pole would be bad. When I can arrange that qualified companion, I’ll make the trip.)
                                                                                                                                                                                                                                                                                > I need most of the preceding week to prepare for long trips. I need the following week to recover from time shifts and general exhaustion. Additionally, I have to hoard people juice for a few weeks beforehand so I can deal with folks during these expeditions. Travel disrupts my dojo time as well, which impacts my health.
                                                                                                                                                                                                                                                                                > Taken as a whole: I didn’t get nearly as much done as I hoped.
                                                                                                                                                                                                                                                                              • I wrote more stories, but Kris Rusch bludgeoned me into submitting them to trad markets. (The woman is a brute, I tell you. Cross her at your peril.)
                                                                                                                                                                                                                                                                              • Among my 2017 titles, my fiction outsold the tech books. No, not Prohibition Orcs–all four of the people who buy those love them, but the sales tell me I’ve done something wrong with those tales.
                                                                                                                                                                                                                                                                              • My cozy mystery git commit murder outsold Relayd and Httpd Mastery.
                                                                                                                                                                                                                                                                              • But what outdid them both, as well as most of my older books? What title utterly dominated my sales for the last quarter of the year? It was of course, my open source software political satire disguised as porn Savaged by Systemd: an Erotic Unix Encounter.
                                                                                                                                                                                                                                                                              • > I can’t believe I just wrote that paragraph.
                                                                                                                                                                                                                                                                              • The good news is, once I recovered from EuroBSDCon, my writing got better.
                                                                                                                                                                                                                                                                              • I finished Absolute FreeBSD, 3rd edition and submitted it to the publisher.
                                                                                                                                                                                                                                                                              • I wrote the second edition of SSH Mastery (no link, because you can’t order it yet.)
                                                                                                                                                                                                                                                                              • I’m plowing through git sync murder, the sequel to git commit murder. I don’t get to see the new Star Wars movie until I finish GSM, so hopefully that’ll be this month.
                                                                                                                                                                                                                                                                              • All in all, I wrote 480,200 words in 2017. Most of that was after September. It’s annoyingly close to breaking half a million, but after 2016’s scandalous 195,700, I’ll take it.
                                                                                                                                                                                                                                                                              • ***
                                                                                                                                                                                                                                                                                ###PG Phriday: Postgres on ZFS
                                                                                                                                                                                                                                                                                > ZFS is a filesystem originally created by Sun Microsystems, and has been available for BSD over a decade. While Postgres will run just fine on BSD, most Postgres installations are historically Linux-based systems. ZFS on Linux has had much more of a rocky road to integration due to perceived license incompatibilities.
                                                                                                                                                                                                                                                                                > As a consequence, administrators were reluctant or outright refused to run ZFS on their Linux clusters. It wasn’t until OpenZFS was introduced in 2013 that this slowly began to change. These days, ZFS and Linux are starting to become more integrated, and Canonical of Ubuntu fame even announced direct support for ZFS in their 16.04 LTS release.
                                                                                                                                                                                                                                                                                > So how can a relatively obscure filesystem designed by a now-defunct hardware and software company help Postgres? Let’s find out!
                                                                                                                                                                                                                                                                              • Eddie waited til he finished high school
                                                                                                                                                                                                                                                                              • > Old server hardware is dirt cheap these days, and make for a perfect lab for testing suspicious configurations. This is the server we’ll be using for these tests for those following along at home, or want some point of reference:
                                                                                                                                                                                                                                                                                Dell R710
                                                                                                                                                                                                                                                                                x2 Intel X5660 CPUs, for up to 24 threads
                                                                                                                                                                                                                                                                                64GB RAM
                                                                                                                                                                                                                                                                                x4 1TB 7200RPM SATA HDDs
                                                                                                                                                                                                                                                                                H200 RAID card configured for Host Bus Adapter (HBA) mode
                                                                                                                                                                                                                                                                                250GB Samsung 850 EVO SSD
                                                                                                                                                                                                                                                                                > The H200 is particularly important, as ZFS acts as its own RAID system. It also has its own checksumming and other algorithms that don’t like RAID cards getting in the way. As such, we put the card itself in a mode that facilitates this use case.
                                                                                                                                                                                                                                                                                > Due to that, we lose out on any battery-backed write cache the RAID card might offer. To make up for it, it’s fairly common to use an SSD or other persistent fast storage to act both as a write cache, and a read cache. This also transforms our HDDs into hybrid storage automatically, which is a huge performance boost on a budget.
                                                                                                                                                                                                                                                                              • She had a guitar and she taught him some chords
                                                                                                                                                                                                                                                                              • > First things first: we need a filesystem. This hardware has four 1TB HDDs, and a 250GB SSD. To keep this article from being too long, we’ve already placed GPT partition tables on all the HDDs, and split the SSD into 50GB for the OS, 32GB for the write cache, and 150GB for the read cache. A more robust setup would probably use separate SSDs or a mirrored pair for these, but labs are fair game.
                                                                                                                                                                                                                                                                              • They moved into a place they both could afford
                                                                                                                                                                                                                                                                              • > Let’s start by getting a performance baseline for the hardware. We might expect peak performance at 12 or 24 threads because the server has 12 real CPUs and 24 threads, but query throughput actually topped out at concurrent 32 processes. We can scratch our heads over this later, for now, we can consider it the maximum capabilities of this hardware.
                                                                                                                                                                                                                                                                                Here’s a small sample:
                                                                                                                                                                                                                                                                                ```
                                                                                                                                                                                                                                                                                $> pgbench -S -j 32 -c 32 -M prepared -T 20 pgbench

                                                                                                                                                                                                                                                                                ...

                                                                                                                                                                                                                                                                                tps = 264661.135288 (including connections establishing)
                                                                                                                                                                                                                                                                                tps = 264849.345595 (excluding connections establishing)

                                                                                                                                                                                                                                                                                > So far, this is pretty standard behavior. 260k prepared queries per second is great read performance, but this is supposed to be a filesystem demonstration. Let’s get ZFS involved.
                                                                                                                                                                                                                                                                                + The papers said Ed always played from the heart
                                                                                                                                                                                                                                                                                > Let’s repeat that same test with writes enabled. Once that happens, filesystem syncs, dirty pages, WAL overhead, and other things should drastically reduce overall throughput. That’s an expected result, but how much are we looking at, here?

                                                                                                                                                                                                                                                                                $> pgbench -j 32 -c 32 -M prepared -T 10 pgbench

                                                                                                                                                                                                                                                                                ...

                                                                                                                                                                                                                                                                                tps = 6153.877658 (including connections establishing)
                                                                                                                                                                                                                                                                                tps = 6162.392166 (excluding connections establishing)

                                                                                                                                                                                                                                                                                > SSD cache or not, storage overhead is a painful reality. Still, 6000 TPS with writes enabled is a great result for this hardware. Or is it? Can we actually do better?
                                                                                                                                                                                                                                                                                > Consider the Postgres full_page_writes parameter. Tomas Vondra has written about it in the past as a necessity to prevent WAL corruption due to partial writes. The WAL is both streaming replication and crash recovery, so its integrity is of utmost importance. As a result, this is one parameter almost everyone should leave alone.
                                                                                                                                                                                                                                                                                > ZFS is Copy on Write (CoW). As a result, it’s not possible to have a torn page because a page can’t be partially written without reverting to the previous copy. This means we can actually turn off full_page_writes in the Postgres config. The results are some fairly startling performance gains:

                                                                                                                                                                                                                                                                                $> pgbench -j 32 -c 32 -M prepared -T 10 pgbench

                                                                                                                                                                                                                                                                                tps = 10325.200812 (including connections establishing)

                                                                                                                                                                                                                                                                                tps = 10336.807218 (excluding connections establishing)

                                                                                                                                                                                                                                                                                > That’s nearly a 70% improvement. Due to write amplification caused by full page writes, Postgres produced 1.2GB of WAL files during a 1-minute pgbench test, but only 160MB with full page writes disabled.
                                                                                                                                                                                                                                                                                > To be fair, a 32-thread pgbench write test is extremely abusive and certainly not a typical usage scenario. However, ZFS just ensured our storage a much lower write load by altering one single parameter. That means the capabilities of the hardware have also been extended to higher write workloads as IO bandwidth is not being consumed by WAL traffic.
                                                                                                                                                                                                                                                                                + They both met movie stars, partied and mingled
                                                                                                                                                                                                                                                                                > Astute readers may have noticed we didn’t change the default ZFS block size from 128k to align with the Postgres default of 8kb.
                                                                                                                                                                                                                                                                                > As it turns out, the 128kb blocks allow ZFS to better combine some of those 8kb Postgres pages to save space. That will allow our measly 2TB to go a lot further than is otherwise possible.
                                                                                                                                                                                                                                                                                > Please note that this is not de-duplication, but simple lz4 compression, which is nearly real-time in terms of CPU overhead. De-duplication on ZFS is currently an uncertain bizzaro universe populated with misshapen horrors crawling along a broken landscape. It’s a world of extreme memory overhead for de-duplication tables, and potential lost data due to inherent conflicts with the CoW underpinnings. Please don’t use it, let anyone else use it, or even think about using it, ever.
                                                                                                                                                                                                                                                                                + They made a record and it went in the chart
                                                                                                                                                                                                                                                                                > We’re still not done. One important aspect of ZFS as a CoW filesystem, is that it has integrated snapshots.
                                                                                                                                                                                                                                                                                > Consider the scenario where a dev is connected to the wrong system and drops what they think is a table in a QA environment. It turns out they were in the wrong terminal and just erased a critical production table, and now everyone is frantic.
                                                                                                                                                                                                                                                                                + The future was wide open
                                                                                                                                                                                                                                                                                > It’s difficult to discount an immediately observable reduction in write overhead. Snapshots have a multitude of accepted and potential use cases, as well. In addition to online low-overhead compression, and the hybrid cache layer, ZFS boasts a plethora of features we didn’t explore.
                                                                                                                                                                                                                                                                                > Built-in checksums with integrated self-healing suggest it isn’t entirely necessary to re-initialize an existing Postgres instance to enable checksums. The filesystem itself ensures checksums are validated and correct, especially if we have more than one drive resource in our pool. It even goes the extra mile and actively corrects inconsistencies when encountered.
                                                                                                                                                                                                                                                                                > I immediately discounted ZFS back in 2012 because the company I worked for at the time was a pure Linux shop. ZFS was only available using the FUSE driver back then, meaning ZFS only worked through userspace with no real kernel integration. It was fun to tinker with, but nobody sane would use that on a production server of any description.
                                                                                                                                                                                                                                                                                > Things have changed quite drastically since then. I’ve stopped waiting for btrfs to become viable, and ZFS has probably taken the throne away from XFS as my filesystem of choice. Future editions of the Postgres High Availability Cookbook will reflect this as well.
                                                                                                                                                                                                                                                                                > Postgres MVCC and ZFS CoW seem made for each other. I’m curious to see what will transpire over the next few years now that ZFS has reached mainstream acceptance in at least one major Linux distribution.
                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                ###[NomadBSD](https://github.com/mrclksr/NomadBSD)
                                                                                                                                                                                                                                                                                + About
                                                                                                                                                                                                                                                                                > NomadBSD is a live system for flash drives, based on FreeBSD.
                                                                                                                                                                                                                                                                                + Screenshots
                                                                                                                                                                                                                                                                                ![](http://freeshell.de/~mk/download/nomadbsd-ss1.png)
                                                                                                                                                                                                                                                                                ![](http://freeshell.de/~mk/download/nomadbsd-ss2.png)
                                                                                                                                                                                                                                                                                + Requirements for building the image
                                                                                                                                                                                                                                                                                A recent FreeBSD system
                                                                                                                                                                                                                                                                                + Requirements for running NomadBSD
                                                                                                                                                                                                                                                                                * A 4GB (or more) flash drive
                                                                                                                                                                                                                                                                                * A System capable running FreeBSD 11.1 (amd64)
                                                                                                                                                                                                                                                                                + Building the image
                                                                                                                                                                                                                                                                                ~~ csh
                                                                                                                                                                                                                                                                                # make image
                                                                                                                                                                                                                                                                                ~~
                                                                                                                                                                                                                                                                                + Writing the image to an USB memory stick
                                                                                                                                                                                                                                                                                ~~ csh
                                                                                                                                                                                                                                                                                # dd if=nomadbsd.img of=/dev/da0 bs=10240 conv=sync
                                                                                                                                                                                                                                                                                ~~
                                                                                                                                                                                                                                                                                + Resize filesystem to use the entire USB memory
                                                                                                                                                                                                                                                                                + Boot NomadBSD into single user mode, and execute:
                                                                                                                                                                                                                                                                                ~~
                                                                                                                                                                                                                                                                                # gpart delete -i 2 da0s1
                                                                                                                                                                                                                                                                                # gpart resize -i 1 da0
                                                                                                                                                                                                                                                                                # gpart commit da0s1
                                                                                                                                                                                                                                                                                ~~
                                                                                                                                                                                                                                                                                + Determine the partition size in megabytes using
                                                                                                                                                                                                                                                                                ````fdisk da0````
                                                                                                                                                                                                                                                                                + and calculate the remaining size of da0s1a:
                                                                                                                                                                                                                                                                                ```` = - ````.
                                                                                                                                                                                                                                                                                ~~
                                                                                                                                                                                                                                                                                # gpart resize -i 1 -s M da0s1
                                                                                                                                                                                                                                                                                # gpart add -t freebsd-swap -i 2 da0s1
                                                                                                                                                                                                                                                                                # glabel label NomadBSDsw da0s1b
                                                                                                                                                                                                                                                                                # service growfs onestart
                                                                                                                                                                                                                                                                                # reboot
                                                                                                                                                                                                                                                                                ~~
                                                                                                                                                                                                                                                                                + [FreeBSD forum thread](https://forums.freebsd.org/threads/63888/)
                                                                                                                                                                                                                                                                                + [A short screen capture video of the NomadBSD system running in VirtualBox](https://freeshell.de/~mk/download/nomad_capture.mp4)
                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                ##Beastie Bits
                                                                                                                                                                                                                                                                                + [Coolpkg, a package manager inspired by Nix for OpenBSD](https://github.com/andrewchambers/coolpkg)
                                                                                                                                                                                                                                                                                + [zrepl - ZFS replication](https://zrepl.github.io/)
                                                                                                                                                                                                                                                                                + [OpenBSD hotplugd automount script](https://bijanebrahimi.github.io/blog/openbsd-hotplugd-scripting.html)
                                                                                                                                                                                                                                                                                + [Ancient troff sources vs. modern-day groff](https://virtuallyfun.com/2017/12/22/learn-ancient-troff-sources-vs-modern-day-groff/)
                                                                                                                                                                                                                                                                                + [Paypal donation balance and status.. thanks everyone!](http://lists.dragonflybsd.org/pipermail/users/2017-December/313752.html)
                                                                                                                                                                                                                                                                                + [Supervised FreeBSD rc.d script for a Go daemon (updated in last few days)](https://redbyte.eu/en/blog/supervised-freebsd-init-script-for-go-deamon/)
                                                                                                                                                                                                                                                                                + [A Brief History of sed](https://blog.sourcerer.io/a-brief-history-of-sed-6eaf00302ed)
                                                                                                                                                                                                                                                                                + [Flamegraph: Why does my AWS instance boot so slow?](http://www.daemonology.net/timestamping/tslog-c5.4xlarge.svg)
                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                ##Feedback/Questions
                                                                                                                                                                                                                                                                                + Jeremy - [Replacing Drive in a Zpool](http://dpaste.com/319593M#wrap)
                                                                                                                                                                                                                                                                                + [Dan’s Blog ](https://dan.langille.org/2017/08/16/swapping-5tb-in-3tb-out/)
                                                                                                                                                                                                                                                                                + Tim - [Keeping GELI key through reboot](http://dpaste.com/11QTA06)
                                                                                                                                                                                                                                                                                + Brian - [Mixing 2.5 and 3.5 drives](http://dpaste.com/2JQVD10#wrap)
                                                                                                                                                                                                                                                                                + Troels - [zfs swap on FreeBSD](http://dpaste.com/147WAFR#wrap)
                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                1 hr 52 min
                                                                                                                                                                                                                                                                              • 227: The long core dump

                                                                                                                                                                                                                                                                                We walk through dumping a PS4 kernel in only 6 days, tell you the news that NetBSD 7.1.1 has been released, details on how to run FreeBSD on a Thinkpad T470, and there’s progress in OpenBSD’s pledge.

                                                                                                                                                                                                                                                                                This episode was brought to you by

                                                                                                                                                                                                                                                                                Headlines
                                                                                                                                                                                                                                                                                NetBSD 7.1.1 released
                                                                                                                                                                                                                                                                                • The NetBSD Project is pleased to announce NetBSD 7.1.1, the first security/critical update of the NetBSD 7.1 release branch. It represents a selected subset of fixes deemed important for security or stability reasons.
                                                                                                                                                                                                                                                                                • Complete source and binaries for NetBSD 7.1.1 are available for download at many sites around the world. A list of download sites providing FTP, AnonCVS, and other services may be found at https://www.NetBSD.org/mirrors/. We encourage users who wish to install via ISO or USB disk images to download via BitTorrent by using the torrent files supplied in the images area. A list of hashes for the NetBSD 7.1.1 distribution has been signed with the well-connected PGP key for the NetBSD Security Officer: https://ftp.NetBSD.org/pub/NetBSD/security/hashes/NetBSD-7.1.1_hashes.asc
                                                                                                                                                                                                                                                                                • NetBSD is free. All of the code is under non-restrictive licenses, and may be used without paying royalties to anyone. Free support services are available via our mailing lists and website. Commercial support is available from a variety of sources. More extensive information on NetBSD is available from our website:
                                                                                                                                                                                                                                                                                • [NetBSD website](www.NetBSD.org)
                                                                                                                                                                                                                                                                                • +Changes Between 7.1 and 7.1.1 Below is an abbreviated list of changes in this release. The complete list can be found in the CHANGES-7.1.1 file in the top level directory of the NetBSD 7.1.1 release tree.
                                                                                                                                                                                                                                                                                  • Security Advisory Fixes The following security advisories were fixed:
                                                                                                                                                                                                                                                                                  • NetBSD-SA2017-004 buffer overflow via cmap for 4 graphics drivers.
                                                                                                                                                                                                                                                                                  • NetBSD-SA2017-005 x86: vulnerabilities in context handling.
                                                                                                                                                                                                                                                                                  • NetBSD-SA2017-006 Vnode reference leak in the openat system call.
                                                                                                                                                                                                                                                                                  • NetBSD-SA2018-001 Several vulnerabilities in context handling
                                                                                                                                                                                                                                                                                  • NetBSD-SA2018-002 Local DoS in virecover
                                                                                                                                                                                                                                                                                  • Note: Advisories prior to NetBSD-SA2017-004 do not affect NetBSD 7.1.1.
                                                                                                                                                                                                                                                                                  • Userland changes
                                                                                                                                                                                                                                                                                  • dhcrelay(8): Fix bug that prevented proper operation when run in the background.
                                                                                                                                                                                                                                                                                  • Heimdal: Update to 7.1. Fix CVE-2017-11103.
                                                                                                                                                                                                                                                                                  • mtree(8): Don't modify strings stored in hash, otherwise filling up of directory hierarchy stops if the same hash value occurs in directory and leaf.
                                                                                                                                                                                                                                                                                  • ping(8): Fix cksum calculation for clearing the cached route.
                                                                                                                                                                                                                                                                                  • resize_ffs(8): Fix numerous overflow errors which can lead to superblock corruption on large filesystems.
                                                                                                                                                                                                                                                                                  • rtadvd(8): Fix the default value of rltime. PR bin/51994.
                                                                                                                                                                                                                                                                                  • Update BIND to 9.10.5-P2.
                                                                                                                                                                                                                                                                                  • Update expat to 2.2.1.
                                                                                                                                                                                                                                                                                  • Update ntp to 4.2.8p10.
                                                                                                                                                                                                                                                                                  • Update root.cache to 2017102400.
                                                                                                                                                                                                                                                                                  • Update tzdata to 2017c.
                                                                                                                                                                                                                                                                                  • vi(1): Don't garble display when when resizing nvi in xterm.
                                                                                                                                                                                                                                                                                  • wpa_supplicant/hostapd: Update to 2.6.
                                                                                                                                                                                                                                                                                  • Apply fixes for CVEs 2017-13077 through 2017-13082 and CVEs 2017-13086 through 2017-13088.
                                                                                                                                                                                                                                                                                  • X: Apply fixes for CVEs 2017-12176 through 2017-12187, 2017-10971, 2017-10972, 2017-13722, 2017-13720, 2017-16611, and 2017-16612.
                                                                                                                                                                                                                                                                                  • ***
                                                                                                                                                                                                                                                                                    ###Dumping a PS4 Kernel in "Only" 6 Days
                                                                                                                                                                                                                                                                                    > What if a secure device had an attacker-viewable crashdump format? What if that same device allowed putting arbitrary memory into the crashdump? Amazingly, the ps4 tempted fate by supporting both of these features! Let’s see how that turned out…
                                                                                                                                                                                                                                                                                  • Crashdumps on PS4
                                                                                                                                                                                                                                                                                    • The crash handling infrastructure of the ps4 kernel is interesting for 2 main reasons:
                                                                                                                                                                                                                                                                                    • It is ps4-specific code (likely to be buggy)
                                                                                                                                                                                                                                                                                    • If the crashdump can be decoded, we will gain very useful info for finding bugs and creating reliable exploits
                                                                                                                                                                                                                                                                                    • On a normal FreeBSD system, a kernel panic will create a dump by calling kern_reboot with the RB_DUMP flag. This then leads to doadump being called, which will dump a rather tiny amount of information about the kernel image itself to some storage device.
                                                                                                                                                                                                                                                                                    • On ps4, the replacement for doadump is mdbg_run_dump, which can be called from panic or directly from trap_fatal. The amount of information stored into the dump is gigantic by comparison - kernel state for all process, thread, and vm objects are included, along with some metadata about loaded libraries. Other obvious changes from the vanilla FreeBSD method are that the mdbg_run_dump encodes data recorded into the dump on a field-by-field basis and additionally encrypts the resulting buffer before finally storing it to disk.
                                                                                                                                                                                                                                                                                    • Dumping Anything
                                                                                                                                                                                                                                                                                      • Let’s zoom in to a special part of mdbg_run_dump - where it iterates over all process’ threads and tries to dump some pthread state:
                                                                                                                                                                                                                                                                                      • dumpstate is a temporary buffer which will eventually make it into the crashdump. To summarize, sysdump__internal_call_readuser can be made to function as a read-anywhere oracle. This is because fsbase will point into our (owned) webkit process’ usermode address space. Thus, even without changing the actual fsbase value, we may freely change the value of tcb_thread, which is stored at fsbase + 0x10.
                                                                                                                                                                                                                                                                                      • Further, sysdump__internal_call_readuser will happily read from a kernel address and put the result into the dump.
                                                                                                                                                                                                                                                                                      • We can now put any kernel location into the dump, but we still need to decrypt and decode it…
                                                                                                                                                                                                                                                                                      • Aside from that, there’s also the issue that we may only add 0x10 bytes per thread in this manner…
                                                                                                                                                                                                                                                                                      • Further reading:
                                                                                                                                                                                                                                                                                        • Crashdump Crypto
                                                                                                                                                                                                                                                                                        • Crashdump Decoding
                                                                                                                                                                                                                                                                                        • Crashdump Automation
                                                                                                                                                                                                                                                                                        • Triggering the Vulnerability
                                                                                                                                                                                                                                                                                        • The Fix (Kind of…)
                                                                                                                                                                                                                                                                                        • Fin
                                                                                                                                                                                                                                                                                        • Appendix
                                                                                                                                                                                                                                                                                          • Crashdump Decryptor
                                                                                                                                                                                                                                                                                          • NXDP Decoder
                                                                                                                                                                                                                                                                                          • ***
                                                                                                                                                                                                                                                                                            ###BSDTW 2017 Conference Recap: Li-Wen Hsu
                                                                                                                                                                                                                                                                                          • BSDTW 2017 Conference Recap: Li-Wen Hsu
                                                                                                                                                                                                                                                                                          • 12/28/2017
                                                                                                                                                                                                                                                                                          • > Last month, we held BSDTW 2017 on November 11-12th, 2017 in Taipei, Taiwan. It was the second largest BSD conference in Taiwan and the first one in this decade. In 2004, the first AsiaBSDCon was also held in Taipei. Then all of the following AsiaBSDCon conferences were held in Tokyo, Japan. (AsiaBSDCon 2018 will be in Tokyo again next year, please submit your talk proposal by December 31th 2017, and attend the conference on March 8th-11th)
                                                                                                                                                                                                                                                                                            > We wanted to start small with the first BSDTW because we were not sure how much sponsorship or how many volunteers we might have. BSDTW 2017 was a single track, two-day conference with 11 selected 50 minute presentations and 1 WIP/lightning talk session consisting of 8 short talks. I do regret that we did not have any local presenters this year. It is also a similar problem at AsiaBSDCon. Unsurprisingly, as with AsiaBSDcon, the travel reimbursement took up a large part of the whole conference budget. We do have many good people that work in Asia, but we still need to encourage people to present their work more.
                                                                                                                                                                                                                                                                                            > We had over 130 registered attendees, with 30% of them coming from outside of Taiwan. To our knowledge, in recent years, this is the only open source conference in Taiwan to be held entirely in English, and to have such a large portion of international attendees. This is also the first open source conference in Taiwan to focus entirely on operating systems. The attendees included students, professors, engineers or CTOs, and CEOs from technology companies. This is also the first time that GroffTheBSDGoat visited Taiwan! We were surprised that after the silence for so many years, there are still so many people that use and love BSD near us. We saw many old friends, who had “disappeared” for a long time, came back, and were glad to meet many new friends at the conference. I am really happy that this conference was able to bring together these people, from local and abroad. After attending BSD conferences around the world for many years, I feel that the friendship between BSD users is the most important thing in the BSD community, and one of the main reasons people stay. It has been my pleasure to bring this community back to my friends in my homeland.
                                                                                                                                                                                                                                                                                            > After the two-day event, I truly understand that bootstrapping a new conference is a very hard job. One with many aspects that you don’t even imagine until you’re really in the process of planning an event. I now have an even greater respect for all of the conference organizers and realize that we need to have more people help them, to keep these conferences continue to get better and better. Plus, there will always be room for a new conference!
                                                                                                                                                                                                                                                                                            > Thanks to the FreeBSD Foundation for being the biggest sponsor of BSDTW 2017 and always being the strongest backend of our community. We are excited about the many local companies and organizations that helped us whether with people, materials or financially. We even had 21 personal sponsors, more than two times the number of other big open source conferences in Taiwan.
                                                                                                                                                                                                                                                                                            > As I said in the closing session, I’m not sure if there will be 2nd BSDTW next year. It still depends on the amount of sponsorship and number of volunteers. However, we will definitely hold more smaller meetups in the next year to keep building up the local BSD community.
                                                                                                                                                                                                                                                                                            > Finally, in the beginning of this month, we had a “post-conference media workshop” for organizing the media files we collected in the BSDTW 2017. Here are the review article in Traditional Chinese and the photos: https://medium.com/@bsdtw/bsdtw-2017-總回顧-a402788daede &&
                                                                                                                                                                                                                                                                                            https://www.flickr.com/photos/bsdtw/albums/72157689410035911
                                                                                                                                                                                                                                                                                            ***
                                                                                                                                                                                                                                                                                            ##News Roundup
                                                                                                                                                                                                                                                                                            ###Running FreeBSD on a Lenovo T470s
                                                                                                                                                                                                                                                                                          • Running FreeBSD on the Lenovo T470s ThinkPad
                                                                                                                                                                                                                                                                                          • > Installing FreeBSD on this machine was super easy. As I couldn't find a comprehensive/encouraging how-to about installing FreeBSD on a recent ThinkPad, I just wrote up the one below. It includes details about my personal setup, which are not required to run FreeBSD on this model, but which are more to my own taste. I still think this can be a quite useful inspiration for others who want to run their own customized configurations.
                                                                                                                                                                                                                                                                                          • Specs
                                                                                                                                                                                                                                                                                          • > The system I use has these specifications:
                                                                                                                                                                                                                                                                                          • Type: 20JS-001EGE
                                                                                                                                                                                                                                                                                          • CPU: Intel Core i7-6600U, 2x 2.60GHz
                                                                                                                                                                                                                                                                                          • RAM: 20GB DDR4
                                                                                                                                                                                                                                                                                          • SSD: 512GB NVMe
                                                                                                                                                                                                                                                                                          • Graphics: Intel HD Graphics 520 (IGP), 1x HDMI 1.4
                                                                                                                                                                                                                                                                                          • Display: 14", 1920x1080, non-glare, IPS
                                                                                                                                                                                                                                                                                          • Ports: 3x USB-A 3.0, 1x Thunderbolt 3, 1x Gb LAN
                                                                                                                                                                                                                                                                                          • Wireless: WLAN 802.11a/b/g/n/ac, Bluetooth 4.1, LTE (Micro-SIM)
                                                                                                                                                                                                                                                                                          • Cardreader: SD/SDHC/SDXC/MMC
                                                                                                                                                                                                                                                                                          • Webcam: 0.9 Megapixel
                                                                                                                                                                                                                                                                                          • Extras: MIL-STD-810G, Pointing Stick, Fingerprint-Reader, Docking port
                                                                                                                                                                                                                                                                                          • Things that work
                                                                                                                                                                                                                                                                                          • > Basically everything I care about:
                                                                                                                                                                                                                                                                                            • Accelerated video
                                                                                                                                                                                                                                                                                            • Keyboard
                                                                                                                                                                                                                                                                                            • Touchpad/ClickPad (like expected in a modern laptop)
                                                                                                                                                                                                                                                                                            • SSD
                                                                                                                                                                                                                                                                                            • WiFi
                                                                                                                                                                                                                                                                                            • Sound
                                                                                                                                                                                                                                                                                            • HDMI out
                                                                                                                                                                                                                                                                                            • Suspend to RAM
                                                                                                                                                                                                                                                                                            • Webcam
                                                                                                                                                                                                                                                                                            • Things that don't work
                                                                                                                                                                                                                                                                                              • Fingerprint reader
                                                                                                                                                                                                                                                                                              • Potentially anything I didn't test
                                                                                                                                                                                                                                                                                              • Battery life is okay, but could be better.
                                                                                                                                                                                                                                                                                              • Installation of the base system
                                                                                                                                                                                                                                                                                              • > I used a snapshot release of 12-CURRENT as the basis of my installation, particularly the one of 13th of December 2017.
                                                                                                                                                                                                                                                                                                > I dd'ed it onto a memory stick and boot the laptop. I started a standard installation and created an encrypted ZFS pool on nvme0, using encryption, swap encryption and partition scheme "GPT (UEFI)".
                                                                                                                                                                                                                                                                                                > After installation, it boots straight up.
                                                                                                                                                                                                                                                                                              • Ports tree used
                                                                                                                                                                                                                                                                                              • > All work is based on a head ports tree from about Dec 18, 22:15 CET, which should be more or less r456672.
                                                                                                                                                                                                                                                                                              • Preferred ClickPad configuration
                                                                                                                                                                                                                                                                                              • > As I'm not a fan of the the pointing stick, I disabled it in the bios. My final ClickPad configuration will be: Click to click (not tap), no middle button, right button in the lower right corner. As the old synaptics driver doesn't provide good thumb detection, libinput will be used.
                                                                                                                                                                                                                                                                                              • Check out the laptop list on the FreeBSD wiki for compatibility: (https://wiki.freebsd.org/Laptops/)
                                                                                                                                                                                                                                                                                              • ***
                                                                                                                                                                                                                                                                                                ###FreeBSD desktop LiveCD creator
                                                                                                                                                                                                                                                                                              • Introduction
                                                                                                                                                                                                                                                                                              • > The purpose of this tool is quickly generate bloat free images containing stock FreeBSD, and supported desktop environments.
                                                                                                                                                                                                                                                                                              • Features
                                                                                                                                                                                                                                                                                              • FreeBSD 11.1-RELEASE
                                                                                                                                                                                                                                                                                              • AMD64
                                                                                                                                                                                                                                                                                              • Gnome & KDE desktop environments
                                                                                                                                                                                                                                                                                              • Hybrid DVD/USB image
                                                                                                                                                                                                                                                                                              • Screenshots
                                                                                                                                                                                                                                                                                              • [Gnome LiveCD])https://github.com/pkgdemon/comet/raw/master/screenshots/gnome-livecd.png?raw=true)
                                                                                                                                                                                                                                                                                              • KDE LiveCD
                                                                                                                                                                                                                                                                                              • System Requirements
                                                                                                                                                                                                                                                                                              • FreeBSD 11.1, or higher for AMD64
                                                                                                                                                                                                                                                                                              • 20GB of free disk space
                                                                                                                                                                                                                                                                                              • 1GB of free memory
                                                                                                                                                                                                                                                                                              • UFS, or ZFS
                                                                                                                                                                                                                                                                                              • Initial Setup
                                                                                                                                                                                                                                                                                              • Install the required packages:
                                                                                                                                                                                                                                                                                              • pkg install git grub2-pcbsd grub2-efi xorriso
                                                                                                                                                                                                                                                                                              • Clone the repo:
                                                                                                                                                                                                                                                                                              • git clone https://www.github.com/pkgdemon/comet
                                                                                                                                                                                                                                                                                              • Enter the directory for running the LiveCD creator:
                                                                                                                                                                                                                                                                                              • cd comet/src
                                                                                                                                                                                                                                                                                              • Credentials for live media
                                                                                                                                                                                                                                                                                              • > User: liveuser
                                                                                                                                                                                                                                                                                                > Password: freebsd
                                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                                ###iXsystems
                                                                                                                                                                                                                                                                                              • StorageCrypter Ransomware: Security Threat or Clickbait?
                                                                                                                                                                                                                                                                                              • ###pledge() work in progress
                                                                                                                                                                                                                                                                                                > I wanted to give an update that a two pledge-related changes are being worked on. The semantics and integration are complicated so it is taking some time.
                                                                                                                                                                                                                                                                                                > One is execpromises. This will become the 2nd argument of pledge(). This allows one to set the pledge for the new image after pledge "exec"-allowed execve(). A warning though: utilizing this in software isn't as easy as you might think! The fork+exec + startup sequences needed to be studied quite carefully to ensure the newly-executed child doesn't ask for more than the parent's execpromises. In my experiments such a circumstance is exceedingly common, so the problem is eased by introducing a new pledge feature which allows pledge violations to return ENOSYS or such rather than killing the process.
                                                                                                                                                                                                                                                                                                > This feature also needs to be used with great caution (especially in privileged programs) because programs which fail to observe errors may continue operating forward very incorrectly; you've lost the ability to catch it failing, and provide care by fixing the problem.
                                                                                                                                                                                                                                                                                                > The other is pledgepaths. The semantics are still being tuned a bit. Before the first call to pledge() in a process, one can pledgepath() directories. Then later after pledge(), file access operations only work if the traversal of the path crosses one of those pre-declared directories (but better make sure you don't move a directory, because the kernel remembers and reasons about the vnode of the directory rather than the path). Something similar is being worked on for files, but we are still adjusting that, as well as a flag parameter for the pledgepath() call which may constrain the operations done on such files.
                                                                                                                                                                                                                                                                                                > As such, pledgepath() will become a filesystem containment mechanism unlike chroot() because paths will still be based upon true /.
                                                                                                                                                                                                                                                                                                > Patience.
                                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                                ###The anatomy of tee program on OpenBSD
                                                                                                                                                                                                                                                                                                > The tee command is used to read content from standard input and displays it not only in standard output but also saves to other files simultaneously. The source code of tee in OpenBSD is very simple, and I want to give it an analysis:
                                                                                                                                                                                                                                                                                                > (1) tee leverages Singlely-linked List defined in sys/queue.h to manage outputted files (including standard output):
                                                                                                                                                                                                                                                                                                struct list {
                                                                                                                                                                                                                                                                                                SLIST_ENTRY(list) next;
                                                                                                                                                                                                                                                                                                int fd;
                                                                                                                                                                                                                                                                                                char *name;
                                                                                                                                                                                                                                                                                                };
                                                                                                                                                                                                                                                                                                SLIST_HEAD(, list) head;
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                static void
                                                                                                                                                                                                                                                                                                add(int fd, char *name)
                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                struct list *p;
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                SLIST_INSERT_HEAD(&head, p, next);
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                int
                                                                                                                                                                                                                                                                                                main(int argc, char *argv[])
                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                struct list *p;
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                SLIST_INIT(&head);
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                SLIST_FOREACH(p, &head, next) {
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                > To understand it easily, I extract the macros from sys/queue.h and created a file which utilizes the marcos:
                                                                                                                                                                                                                                                                                                #define SLIST_HEAD(name, type) \
                                                                                                                                                                                                                                                                                                struct name { \
                                                                                                                                                                                                                                                                                                struct type *slh_first; /* first element */ \
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                #define SLIST_ENTRY(type) \
                                                                                                                                                                                                                                                                                                struct { \
                                                                                                                                                                                                                                                                                                struct type *sle_next; /* next element */ \
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                #define SLIST_FIRST(head) ((head)->slh_first)
                                                                                                                                                                                                                                                                                                #define SLIST_END(head) NULL
                                                                                                                                                                                                                                                                                                #define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head))
                                                                                                                                                                                                                                                                                                #define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
                                                                                                                                                                                                                                                                                                #define SLIST_FOREACH(var, head, field) \
                                                                                                                                                                                                                                                                                                for((var) = SLIST_FIRST(head); \
                                                                                                                                                                                                                                                                                                (var) != SLIST_END(head); \
                                                                                                                                                                                                                                                                                                (var) = SLIST_NEXT(var, field))
                                                                                                                                                                                                                                                                                                #define SLIST_INIT(head) { \
                                                                                                                                                                                                                                                                                                SLIST_FIRST(head) = SLIST_END(head); \
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                #define SLIST_INSERT_HEAD(head, elm, field) do { \
                                                                                                                                                                                                                                                                                                (elm)->field.sle_next = (head)->slh_first; \
                                                                                                                                                                                                                                                                                                (head)->slh_first = (elm); \
                                                                                                                                                                                                                                                                                                } while (0)
                                                                                                                                                                                                                                                                                                struct list {
                                                                                                                                                                                                                                                                                                SLIST_ENTRY(list) next;
                                                                                                                                                                                                                                                                                                int fd;
                                                                                                                                                                                                                                                                                                char *name;
                                                                                                                                                                                                                                                                                                };
                                                                                                                                                                                                                                                                                                SLIST_HEAD(, list) head;
                                                                                                                                                                                                                                                                                                int
                                                                                                                                                                                                                                                                                                main(int argc, char *argv[])
                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                struct list *p;
                                                                                                                                                                                                                                                                                                SLIST_INIT(&head);
                                                                                                                                                                                                                                                                                                SLIST_INSERT_HEAD(&head, p, next);
                                                                                                                                                                                                                                                                                                SLIST_FOREACH(p, &head, next) {
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                > Then employed gcc‘s pre-processing function:
                                                                                                                                                                                                                                                                                                # gcc -E slist.c
                                                                                                                                                                                                                                                                                                # 1 "slist.c"
                                                                                                                                                                                                                                                                                                # 1 ""
                                                                                                                                                                                                                                                                                                # 1 ""
                                                                                                                                                                                                                                                                                                # 1 "slist.c"
                                                                                                                                                                                                                                                                                                # 30 "slist.c"
                                                                                                                                                                                                                                                                                                struct list {
                                                                                                                                                                                                                                                                                                struct { struct list *sle_next; } next;
                                                                                                                                                                                                                                                                                                int fd;
                                                                                                                                                                                                                                                                                                char *name;
                                                                                                                                                                                                                                                                                                };
                                                                                                                                                                                                                                                                                                struct { struct list *slh_first; } head;
                                                                                                                                                                                                                                                                                                int
                                                                                                                                                                                                                                                                                                main(int argc, char *argv[])
                                                                                                                                                                                                                                                                                                {
                                                                                                                                                                                                                                                                                                struct list *p;
                                                                                                                                                                                                                                                                                                { ((&head)->slh_first) = NULL; };
                                                                                                                                                                                                                                                                                                do { (p)->next.sle_next = (&head)->slh_first; (&head)->slh_first = (p); } while (0);
                                                                                                                                                                                                                                                                                                for((p) = ((&head)->slh_first); (p) != NULL; (p) = ((p)->next.sle_next)) {
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                > It becomes clear now! The head node in list contains only 1 member: slh_first, which points to the first valid node. For the elements in the list, it is embedded with next struct which uses sle_next to refer to next buddy.
                                                                                                                                                                                                                                                                                                > (2) By default, tee will overwrite the output files. If you want to append it, use -a option, and the code is as following:
                                                                                                                                                                                                                                                                                                while (*argv) {
                                                                                                                                                                                                                                                                                                if ((fd = open(*argv, O_WRONLY | O_CREAT |
                                                                                                                                                                                                                                                                                                (append ? O_APPEND : O_TRUNC), DEFFILEMODE)) == -1) {
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                > (3) The next part is the skeleton of saving content to files:
                                                                                                                                                                                                                                                                                                while ((rval = read(STDIN_FILENO, buf, sizeof(buf))) > 0) {
                                                                                                                                                                                                                                                                                                SLIST_FOREACH(p, &head, next) {
                                                                                                                                                                                                                                                                                                n = rval;
                                                                                                                                                                                                                                                                                                bp = buf;
                                                                                                                                                                                                                                                                                                do {
                                                                                                                                                                                                                                                                                                if ((wval = write(p->fd, bp, n)) == -1) {
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                bp += wval;
                                                                                                                                                                                                                                                                                                } while (n -= wval);
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                > We need to iterates every opened file descriptor and write contents into it.
                                                                                                                                                                                                                                                                                                > (4) Normally, theinterrupt signal will cause tee exit:
                                                                                                                                                                                                                                                                                                # tee
                                                                                                                                                                                                                                                                                                fdkfkdfjk
                                                                                                                                                                                                                                                                                                fdkfkdfjk
                                                                                                                                                                                                                                                                                                ^C
                                                                                                                                                                                                                                                                                                #
                                                                                                                                                                                                                                                                                                > To disable this feature, use -i option:
                                                                                                                                                                                                                                                                                                # tee -i
                                                                                                                                                                                                                                                                                                fdhfhd
                                                                                                                                                                                                                                                                                                fdhfhd
                                                                                                                                                                                                                                                                                                ^C^C
                                                                                                                                                                                                                                                                                                > The corresponding code is like this:
                                                                                                                                                                                                                                                                                                ......
                                                                                                                                                                                                                                                                                                case 'i':
                                                                                                                                                                                                                                                                                                (void)signal(SIGINT, SIG_IGN);
                                                                                                                                                                                                                                                                                                break;
                                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                                ##Beastie Bits
                                                                                                                                                                                                                                                                                                + What I learned from reading the OpenBSD's network stack source code
                                                                                                                                                                                                                                                                                                + Broadcom BCM43224 and BCM43225 Wi-Fi cards now supported by bwn(4)
                                                                                                                                                                                                                                                                                                + Ingo details searching man pages
                                                                                                                                                                                                                                                                                                + DTrace & ZFS Being Updated On NetBSD, Moving Away From Old OpenSolaris Code
                                                                                                                                                                                                                                                                                                + Linux Professional Institute and BSD Certification Group Join Efforts
                                                                                                                                                                                                                                                                                                + The FreeBSD Foundation thanks Donors
                                                                                                                                                                                                                                                                                                ##Feedback/Questions
                                                                                                                                                                                                                                                                                                + Alex - My first freebsd bug
                                                                                                                                                                                                                                                                                                + John - Suggested Speakers
                                                                                                                                                                                                                                                                                                + Todd - Two questions
                                                                                                                                                                                                                                                                                                + Matthew - CentOS to FreeBSD
                                                                                                                                                                                                                                                                                                ***
                                                                                                                                                                                                                                                                                                1 hr 32 min
                                                                                                                                                                                                                                                                                              • 226: SSL: Santa’s Syscall List

                                                                                                                                                                                                                                                                                                We read the FreeBSD Q3 status report, explore good and bad syscalls, list GOG Games for OpenBSD, and show you what devmatch can do.

                                                                                                                                                                                                                                                                                                This episode was brought to you by

                                                                                                                                                                                                                                                                                                Headlines
                                                                                                                                                                                                                                                                                                FreeBSD Q3 Status Report 2017
                                                                                                                                                                                                                                                                                                • FreeBSD Team Reports
                                                                                                                                                                                                                                                                                                  • FreeBSD Release Engineering Team
                                                                                                                                                                                                                                                                                                  • Ports Collection
                                                                                                                                                                                                                                                                                                  • The FreeBSD Core Team
                                                                                                                                                                                                                                                                                                  • The FreeBSD Foundation
                                                                                                                                                                                                                                                                                                  • Projects
                                                                                                                                                                                                                                                                                                    • FreeBSD CI
                                                                                                                                                                                                                                                                                                    • Kernel
                                                                                                                                                                                                                                                                                                      • Intel 10G iflib Driver Update
                                                                                                                                                                                                                                                                                                      • Intel iWARP Support
                                                                                                                                                                                                                                                                                                      • pNFS Server Plan B
                                                                                                                                                                                                                                                                                                      • Architectures
                                                                                                                                                                                                                                                                                                        • AMD Zen (family 17h) support
                                                                                                                                                                                                                                                                                                        • Userland Programs
                                                                                                                                                                                                                                                                                                          • Updates to GDB
                                                                                                                                                                                                                                                                                                          • Ports
                                                                                                                                                                                                                                                                                                            • FreeBSDDesktop
                                                                                                                                                                                                                                                                                                            • OpenJFX 8
                                                                                                                                                                                                                                                                                                            • Puppet
                                                                                                                                                                                                                                                                                                            • Documentation
                                                                                                                                                                                                                                                                                                              • Absolute FreeBSD, 3rd Edition
                                                                                                                                                                                                                                                                                                              • Manual Pages
                                                                                                                                                                                                                                                                                                              • Third-Party Projects
                                                                                                                                                                                                                                                                                                                • The nosh Project
                                                                                                                                                                                                                                                                                                                • ####FreeBSD Foundation Q4 Update
                                                                                                                                                                                                                                                                                                                  ***
                                                                                                                                                                                                                                                                                                                  ###11 syscalls that rock the world
                                                                                                                                                                                                                                                                                                                • 0. read
                                                                                                                                                                                                                                                                                                                • > You cannot go wrong with a read. You can barely EFAULT it! On Linux amd64 it is syscall zero. If all its arguments are zero it returns zero. Cool!
                                                                                                                                                                                                                                                                                                                • 1. pipe
                                                                                                                                                                                                                                                                                                                • > The society for the preservation of historic calling conventions is very fond of pipe, as in many operating systems and architectures it preserves the fun feature of returning both of the file descriptors as return values. At least Linux MIPS does, and NetBSD does even on x86 and amd64. Multiple return values are making a comeback in languages like Lua and Go, but C has always had a bit of a funny thing about them, but they have long been supported in many calling conventions, so let us use them in syscalls! Well, one syscall.
                                                                                                                                                                                                                                                                                                                • 2. kqueue
                                                                                                                                                                                                                                                                                                                • > When the world went all C10K on our ass, and scaleable polling was a thing, Linux went epoll, the BSDs went kqueue and Solaris went /dev/poll. The nicest interface was kqueue, while epoll is some mix of edge and level triggered semantics and design errors so bugs are still being found.
                                                                                                                                                                                                                                                                                                                • 3. unshare
                                                                                                                                                                                                                                                                                                                • > Sounds like a selfish syscall, but this generous syscall call is the basis of Linux namespaces, allowing a process to isolate its resources. Containers are built from unshares.
                                                                                                                                                                                                                                                                                                                • 4. setns
                                                                                                                                                                                                                                                                                                                • > If you liked unshare, its younger but cooler friend takes file descriptors for namespaces. Pass it down a unix socket to another process, or stash it for later, and do that namespace switching. All the best system calls take file descriptors.
                                                                                                                                                                                                                                                                                                                • 5. execveat
                                                                                                                                                                                                                                                                                                                • > Despite its somewhat confusing name (FreeBSD has the saner fexecve, but other BSDs do not have support last time I checked), this syscall finally lets you execute a program just given a file descriptor for the file. I say finally, as Linux only implemented this in 3.19, which means it is hard to rely on it (yeah, stop using those stupid old kernels folks). Before that Glibc had a terrible userspace implementation that is basically useless. Perfect for creating sandboxes, as you can sandbox a program into a filesystem with nothing at all in, or with a totally controlled tree, by opening the file to execute before chroot or changing the namespace.
                                                                                                                                                                                                                                                                                                                • 6. pdfork
                                                                                                                                                                                                                                                                                                                • > Too cool for Linux, you have to head out to FreeBSD for this one. Like fork, but you get a file descriptor for the process not a pid. Then you can throw it in the kqueue or send it to another process. Once you have tried process descriptors you will never go back.
                                                                                                                                                                                                                                                                                                                • 7. signalfd
                                                                                                                                                                                                                                                                                                                • > You might detect a theme here, but if you have ever written traditional 1980s style signal handlers you know how much they suck. How about turning your signals into messages that you can read on, you guessed it, file descriptors. Like, usable.
                                                                                                                                                                                                                                                                                                                • 8. wstat
                                                                                                                                                                                                                                                                                                                • > This one is from Plan 9. It does the opposite of stat and writes the same structure. Simples. Avoids having chmod, chown, rename, utime and so on, by the simple expedient of making the syscall symmetric. Why not?
                                                                                                                                                                                                                                                                                                                • 9. clonefile
                                                                                                                                                                                                                                                                                                                • > The only cool syscall on OSX, and only supported on the new APFS filesystem. Copies whole files or directories on a single syscall using copy on write for all the data. Look on my works, copy_file_range and despair.
                                                                                                                                                                                                                                                                                                                • 10. pledge
                                                                                                                                                                                                                                                                                                                • > The little sandbox that worked. OpenBSD only here, they managed to make a simple sandbox that was practical for real programs, like the base OpenBSD system. Capsicum form FreeBSD (and promised for Linux for years but no sign) is a lovely design, and gave us pdfork, but its still kind of difficult and intrusive to implement. Linux has, well, seccomp, LSMs, and still nothing that usable for the average program.
                                                                                                                                                                                                                                                                                                                  ###Eleven syscalls that suck
                                                                                                                                                                                                                                                                                                                • 0. ioctl
                                                                                                                                                                                                                                                                                                                • > It can‘t decide if it‘s arguments are integers, strings, or some struct that is lost in the midst of time. Make up your mind! Plan 9 was invented to get rid of this.
                                                                                                                                                                                                                                                                                                                • 1. fcntl
                                                                                                                                                                                                                                                                                                                • > Just like ioctl but for some different miscellaneous operations, because one miscelleny is not enough.
                                                                                                                                                                                                                                                                                                                • 2. tuxcall
                                                                                                                                                                                                                                                                                                                • > Linux put a web server in the kernel! To win a benchmark contest with Microsoft! It had it‘s own syscall! My enum tux_reactions are YUK! Don‘t worry though, it was a distro patch (thanks Red Hat!) and never made it upstream, so only the man page and reserved number survive to taunt you and remind you that the path of the righteous is beset by premature optmization!
                                                                                                                                                                                                                                                                                                                • 3. io_setup
                                                                                                                                                                                                                                                                                                                • > The Linux asynchronous IO syscalls are almost entirely useless! Almost nothing works! You have to use O_DIRECT for a start. And then they still barely work! They have one use, benchmarking SSDs, to show what speed you could get if only there was a usable API. Want async IO in kernel? Use Windows!
                                                                                                                                                                                                                                                                                                                • 4. stat, and its friends and relatives
                                                                                                                                                                                                                                                                                                                • > Yes this one is useful, but can you find the data structure it uses? We have oldstat, oldfstat, ustat, oldlstat, statfs, fstatfs, stat, lstat, fstat, stat64, lstat64, fstat64, statfs64, fstatfs64, fstatat64 for stating files and links and filesystems in Linux. A new bunch will be along soon for Y2038. Simplify your life, use a BSD, where they cleaned up the mess as they did the cooking! Linux on 32 bit platforms is just sucky in comparison, and will get worse. And don’t even look at MIPS, where the padding is wrong.
                                                                                                                                                                                                                                                                                                                • 5. Linux on MIPS
                                                                                                                                                                                                                                                                                                                • > Not a syscall, a whole implemntation of the Linux ABI. Unlike the lovely clean BSDs, Linux is different on each architecture, system calls randomly take arguments in different orders, and constants have different values, and there are special syscalls. But MIPS takes the biscuit, the whole packet of biscuits. It was made to be binary compatible with old SGI machines that don’t even exist, and has more syscall ABIs than I have had hot dinners. Clean it up! Make a new sane MIPS ABI and deprecate the old ones, nothing like adding another variant. So annoying I think I threw out all my MIPS machines, each different.
                                                                                                                                                                                                                                                                                                                • 6. inotify, fanotify and friends
                                                                                                                                                                                                                                                                                                                • > Linux has no fewer than three file system change notification protocols. The first, dnotify hopped on ioctl‘s sidekick fcntl, while the two later ones, inotify and fanotify added a bunch more syscalls. You can use any of them, and they still will not provide the notification API you want for most applications. Most people use the second one, inotify and curse it. Did you know kqueue can do this on the BSDs?
                                                                                                                                                                                                                                                                                                                • 7. personality
                                                                                                                                                                                                                                                                                                                • > Oozing in personality, but we just don’t get along. Basically obsolete, as the kernel can decide what kind of system emulation to do from binaries directly, it stays around with some use cases in persuading ./configure it is running on a 32 bit system. But it can turn off ASLR, and let the CVEs right into your system. We need less persoanlity!
                                                                                                                                                                                                                                                                                                                • 8. gettimeofday
                                                                                                                                                                                                                                                                                                                • > Still has an obsolete timezone value from an old times when people thought timezones should go all the way to the kernel. Now we know that your computer should not know. Set its clock to UTC. Do the timezones in the UI based on where the user is, not the computer. You should use clock_gettime now. Don’t even talk to me about locales. This syscall is fast though, don’t use it for benchmarking, its in the VDSO.
                                                                                                                                                                                                                                                                                                                • 9. splice and tee
                                                                                                                                                                                                                                                                                                                • > These, back in 2005 were a quite nice idea, although Linux said then “it is incomplete, the interfaces are ugly, and it will oops the system if anything goes wrong”. It won’t oops your system now, but usage has not taken off. The nice idea from Linus was that a pipe is just a ring buffer in the kernel, that can have a more general API and use cases for performant code, but a decade on it hasn’t really worked out. It was also supposed to be a more general sendfile, which in many ways was the successor of that Tux web server, but I think sendfile is still more widely used.
                                                                                                                                                                                                                                                                                                                • 10. userfaultfd
                                                                                                                                                                                                                                                                                                                • > Yes, I like file descriptors. Yes CRIU is kind of cool. But userspace handling page faults? Is nothing sacred? I get that you can do this badly with a SIGSEGV handler, but talk about lipstick on a pig.
                                                                                                                                                                                                                                                                                                                  ***
                                                                                                                                                                                                                                                                                                                  ###OpenBSD 6.0 on an iMac G3 from 1999
                                                                                                                                                                                                                                                                                                                  > A while ago I spent $50 for an iMac G3 (aka the iMac,1). This iconic model restored Apple's fortunes in the late '90s. Since the iMac G3 can still boot Mac OSes 8 and 9, I mostly use the machine to indulge a nostalgia for childhood schooldays spent poking at the operating system and playing Escape Velocity. But before I got around to that, I decided to try out the software that the previous owner had left on the machine. The antiquated OSX 10.2 install and 12 year old versions of Safari and Internet Explorer were too slow and old to use for anything. Updating to newer software was almost impossible; a later OSX is required to run the little PowerPC-compatible software still languishing in forgotten corners of the Internet. This got me thinking: could this machine be used, really used, nowadays? Lacking a newer OSX disc, I decided to try the most recent OpenBSD release. (And, since then, to re-try with each new OpenBSD release.) Below are the results of this experiment (plus a working xorg.conf file) and a few background notes.
                                                                                                                                                                                                                                                                                                                • Background
                                                                                                                                                                                                                                                                                                                • > This iMac is a Revision D iMac G3 in grape. It's part of the iMac,1 family of computers. This family includes all tray-loading iMac G3s. (Later iMac G3s had a slot-loading CD drive and different components.) Save for a slightly faster processor, a dedicated graphics card, and cosmetic tweaks to the case, my iMac is identical to the prior year's line-launching Bondi Blue iMac. My machine has had its memory upgraded from 32 MB to 320 MB. Thank Goodness.
                                                                                                                                                                                                                                                                                                                  > The Revision D iMac G3 shipped with Mac OS 8.5. It can run up to Mac OS 9.2.2 or OSX 10.3.9. Other operating systems that tout support for the iMac,1 include NetBSD, OpenBSD, and a shrinking number of Linux distributions.
                                                                                                                                                                                                                                                                                                                  > OpenBSD is simple (by design) and well-maintained. In contrast, NetBSD seems rather more complex and featureful, and I have heard grumbling that despite its reputation for portability, NetBSD really only works well on amd64. I'd test that assertion if OpenBSD's macppc installation instructions didn't seem much simpler than NetBSD's. Linux is even more complicated, although most distros are put together in a way that you can mostly ignore that complexity (until you can't). In the end I went with OpenBSD because I am familiar with it and because I like it.
                                                                                                                                                                                                                                                                                                                • Installing OpenBSD on the iMac,1
                                                                                                                                                                                                                                                                                                                • > Installing OpenBSD on this iMac was simple. It's the same procedure as installing OpenBSD on an amd64 rig. You put in the installation disc; you tell the machine to boot from it; and then you answer a few prompts, most of which simply ask you to press enter. In this case, OpenBSD recognizes all machine's hardware just fine, including sound and networking, though I had a little trouble with video.
                                                                                                                                                                                                                                                                                                                  > The OpenBSD documentation says video should just work and that an xorg.conf file isn't necessary. As such, it no longer ships with an xorg.conf file. Though that's never posed a problem on my other OpenBSD machines, it does here. Video doesn't work out of the box on my iMac,1. startx just blanks the screen. Fortunately, because the BSDs use a centralized development model where each operating system is stored in one repository, OpenBSD's website provides a web interface to the source code going back to the early days. I was able to find the last version of the sample xorg.conf that used to ship on macppc. With a little tweaking, I transformed that file into this one, with which video works just fine. Just drop it into your iMac's /etc/X11 directory. You'll also need to remember to set the machdep.allowaperture sysctl to 2 (e.g., as root run sysctl machdep.allowaperture=2), although the installer will do that automatically if you answer yes to the question about whether you plan to run X.
                                                                                                                                                                                                                                                                                                                  > All that being said, video performance is pretty poor. I am either doing something wrong, or OpenBSD doesn't have accelerated video for this iMac, or this machine is just really old! I will discuss performance below.
                                                                                                                                                                                                                                                                                                                • Running OpenBSD on the iMac,1
                                                                                                                                                                                                                                                                                                                • > The machine performs okay under OpenBSD. You can expect to ably run minimalistic software under minimalistic window managers. I tried dillo, mrxvt, and cmus under cwm and fvwm. Performance here was just fine. I also tried Firefox 26, 33, and 34 under fvwm and cwm. Firefox ran, but "modern," Javascript-heavy sites were an exercise in frustration; the 2015 version of CNN.com basically froze Firefox for 30 seconds or more. A lighter browser like dillo is doable.
                                                                                                                                                                                                                                                                                                                  > You'll notice that I used the past-tense to talk about Firefox. Firefox currently doesn't build on PowerPC on OpenBSD. Neither does Chromium. Neither do a fair number of applications. But whatever -- there's still a lot of lighter applications available, and it's these you'll use day-to-day on a decades-old machine.
                                                                                                                                                                                                                                                                                                                  > Lightweight window managers work okay, as you'd expect. You can even run heavier desktop environments, such as xfce, though you'll give up a lot of performance.
                                                                                                                                                                                                                                                                                                                  > I ran the Ubench benchmark on this iMac and two more modern machines also running OpenBSD. The benchmark seems like an old one; I don't know how (if at all) it accounts for hardware changes in the past 13 years. That is, I don't know if the difference in score accurately measures the difference in real-world performance. Here are the results anyway:
                                                                                                                                                                                                                                                                                                                • Conclusion
                                                                                                                                                                                                                                                                                                                • > Except for when I check to see if OpenBSD still works, I run Mac OS9 on this rig. I have faster and better machines for running OpenBSD. If I didn't -- if this rig were, improbably, all I had left, and I was waiting on the rush delivery of something modern -- then I would use OpenBSD on my iMac,1. I'd have to stick to lightweight applications, but at least they'd be up-to-date and running on a simple, stable, OS.
                                                                                                                                                                                                                                                                                                                  ***
                                                                                                                                                                                                                                                                                                                  ##News Roundup
                                                                                                                                                                                                                                                                                                                  ###34th Chaos Communication Congress Schedule
                                                                                                                                                                                                                                                                                                                • Many talks are streamed live, a good mixture of english and german talks
                                                                                                                                                                                                                                                                                                                • May contain DTraces of FreeBSD
                                                                                                                                                                                                                                                                                                                • Are all BSDs created equally?
                                                                                                                                                                                                                                                                                                                • library operating systems
                                                                                                                                                                                                                                                                                                                • Hardening Open Source Development
                                                                                                                                                                                                                                                                                                                • ***
                                                                                                                                                                                                                                                                                                                  ###OpenBSD 6.2 + CDE
                                                                                                                                                                                                                                                                                                                  > If you've noticed a disruption in the time-space continuum recently, it is likely because I have finally been able to compile and install the Common Desktop Environment (CDE) in a current and actively-developed operating system (OpenBSD 6.2 in this case).
                                                                                                                                                                                                                                                                                                                  > This comes after so many attempts (across multiple platforms) that ended up with the build process prematurely stopping itself in its own tracks for a variety of infinitesimal reasons that were beyond my comprehension as a non-programmer, or when there was success it was not without some broken parts. As for the latter, I've been able to build CDE on OpenIndiana Hipster, but with an end product where I'm unable to change the color scheme in dtstyle (because "useColorObj" is set to "False"), with a default color scheme that is low-res and unpleasant. As for changing "useColorObj" to "True", I tried every recommended trick I could find online, but nothing worked.
                                                                                                                                                                                                                                                                                                                  > My recent attempts at installing CDE on OpenBSD (version 6.1) saw the process stop due to a number of errors that are pure gibberish to these naive eyes. While disappointing, it was par for the course within my miserable experience with trying to build this particular desktop environment. As I wrote in this space in November 2015, in the course of explaining part of my imperitive for installing Solaris 10:
                                                                                                                                                                                                                                                                                                                  > And so I have come to think of building the recently open-sourced CDE as being akin to a coffee mug I saw many years ago. One side of the mug read "Turn the mug to see how to keep an idiot busy." On the other side, it read "Turn the mug to see how to keep an idiot busy." I'm through feeling like an idiot, which is partially why I'm on this one-week journey with Solaris 10.
                                                                                                                                                                                                                                                                                                                  > While I thoroughly enjoyed running Solaris 10 on my ThinkPad T61p, and felt a devilish thrill at using it out in the open at my local MacBook- and iPhone-infested Starbucks and causing general befuddlement and consternation among the occasional prying yoga mom, I never felt like I could do much with it beyond explore the SunOS 5.10 command line and watch YouTube videos. While still supported by its current corporate owner (whose name I don't even want to type), it is no longer actively developed and is thus little more than a retro toy. I hated the idea of installing anything else over it, but productivity beckoned and it was time to tearfully and reluctantly drag myself off the dance floor.
                                                                                                                                                                                                                                                                                                                  > In any case, just last week I noticed that the Sourceforge page for the OpenBSD build had some 6.2-specific notes by way of a series of four patches, and so I decided 'what the heck, let's give this puppy another whirl'. After an initial abortive attempt at a build, I surmised that I hadn't applied the four patches correctly. A day or two later, I took a deep breath and tried again, this time resolving to not proceed with the time make World build command until I could see some sign of a successful patch process. (This time around, I downloaded the patches and moved them into the directory containing the CDE makefiles, and issued each patch command as patch Once I had the thing up and running, and with a mind bursting with fruit flavor, I started messing about. The first order of business was to create a custom color scheme modelled after the default color scheme in UnixWare. (Despite any baggage that system carries from its previous ownership under SCO, I adored the aesthetics of UnixWare 7.1.4 two years ago when I installed the free one month trial version on my ThinkPad. For reasons that escape me now, I named my newly-created color scheme in honor of UnixWare 7.1.3.)
                                                                                                                                                                                                                                                                                                                  > Like a proud papa, I immediately tweeted the above screenshot and risked irritating a Linux kid or two in the process, given SCO's anti-climatic anti-Linux patent trolling from way back when. (I'm not out to irritate penguinistas, I just sure like this color scheme.)
                                                                                                                                                                                                                                                                                                                • Final Thoughts
                                                                                                                                                                                                                                                                                                                • > It may look a little clunky at first, and may be a little bling-challenged, but the more I use CDE and adapt to it, the more it feels like an extension of my brain. Perhaps this is because it has a lot zip and behaves in a consistent and coherent manner. (I don't want to go too much further down that road here, as OSnews's Thom Holwerda already gave a good rundown about ten years ago.)
                                                                                                                                                                                                                                                                                                                  > Now that I have succesfully paired my absolute favorite operating system with a desktop environment that has exerted an intense gravitational hold on me for many, many years, I don't anticipate distrohopping any time soon. And as I attain a more advanced knowledge of CDE, I'll be chronicling any new discoveries here for the sake of anyone following me from behind as I feel my way around this darkened room.
                                                                                                                                                                                                                                                                                                                  ***
                                                                                                                                                                                                                                                                                                                  ###devmatch(8) added to FreeBSD HEAD
                                                                                                                                                                                                                                                                                                                  ```
                                                                                                                                                                                                                                                                                                                  Log:
                                                                                                                                                                                                                                                                                                                  Match unattached devices on the system to potential kernel modules.

                                                                                                                                                                                                                                                                                                                  devmatch(8) matchs up devices in the system device tree with drivers

                                                                                                                                                                                                                                                                                                                  that may match them. For each unattached device in the system, it
                                                                                                                                                                                                                                                                                                                  tries to find matching PNP info in the linker hints and prints modules
                                                                                                                                                                                                                                                                                                                  to load to claim the devices.

                                                                                                                                                                                                                                                                                                                  In --unbound mode, devmatch can look for drivers that have attached to

                                                                                                                                                                                                                                                                                                                  devices in the device tree and have plug and play information, but for
                                                                                                                                                                                                                                                                                                                  which no PNP info exists. This helps find drivers that haven't been
                                                                                                                                                                                                                                                                                                                  converted yet that are in use on this system.

                                                                                                                                                                                                                                                                                                                  In addition, the ability to dump out linker.hints is provided.

                                                                                                                                                                                                                                                                                                                  Future commits will add hooks to devd.conf and rc.d to fully automate

                                                                                                                                                                                                                                                                                                                  using this information.
                                                                                                                                                                                                                                                                                                                  Added:
                                                                                                                                                                                                                                                                                                                  head/usr.sbin/devmatch/
                                                                                                                                                                                                                                                                                                                  head/usr.sbin/devmatch/Makefile (contents, props changed)
                                                                                                                                                                                                                                                                                                                  head/usr.sbin/devmatch/devmatch.8 (contents, props changed)
                                                                                                                                                                                                                                                                                                                  head/usr.sbin/devmatch/devmatch.c (contents, props changed)
                                                                                                                                                                                                                                                                                                                  Modified:
                                                                                                                                                                                                                                                                                                                  head/usr.sbin/Makefile
                                                                                                                                                                                                                                                                                                                  Modified: head/usr.sbin/Makefile

                                                                                                                                                                                                                                                                                                                  + Oh, you naughty committers: :-) https://www.mail-archive.com/[email protected]/msg154720.html
                                                                                                                                                                                                                                                                                                                  ***
                                                                                                                                                                                                                                                                                                                  ##Beastie Bits
                                                                                                                                                                                                                                                                                                                  + [New FreeBSD Journal issue: Monitoring and Metrics](https://www.freebsdfoundation.org/journal/)
                                                                                                                                                                                                                                                                                                                  + [OpenBSD Engine Mix available on GOG.com](https://www.gog.com/mix/openbsd_engine_available)
                                                                                                                                                                                                                                                                                                                  + [OpenBSD Foundation reached their 2017 fundraising goal](http://www.openbsdfoundation.org/campaign2017.html)
                                                                                                                                                                                                                                                                                                                  + [TrueOS 17.12 Review – An Easy BSD](https://www.youtube.com/watch?v=nKr1GCsV-gA)
                                                                                                                                                                                                                                                                                                                  + [LibreSSL 2.6.4 Released](https://bsdsec.net/articles/libressl-2-6-4-released-fixed)
                                                                                                                                                                                                                                                                                                                  ***
                                                                                                                                                                                                                                                                                                                  ##Feedback/Questions
                                                                                                                                                                                                                                                                                                                  + Mike - [BSD 217 & Winning over Linux Users](http://dpaste.com/3AB7J4P#wrap)
                                                                                                                                                                                                                                                                                                                  + JLR - [Boot Environments Broken?](http://dpaste.com/2K0ZDH9#wrap)
                                                                                                                                                                                                                                                                                                                  + Kevr - [ZFS question and suggestion](http://dpaste.com/04MXA5P#wrap)
                                                                                                                                                                                                                                                                                                                  + Ivan - [FreeBSD read cache - ZFS](http://dpaste.com/1P9ETGQ#wrap)
                                                                                                                                                                                                                                                                                                                  ***
                                                                                                                                                                                                                                                                                                                  2 hr 8 min
                                                                                                                                                                                                                                                                                                                • 225: The one true OS

                                                                                                                                                                                                                                                                                                                  TrueOS stable 17.12 is out, we have an OpenBSD workstation guide for you, learnings from the PDP-11, FreeBSD 2017 Releng recap and Duo SSH.

                                                                                                                                                                                                                                                                                                                  This episode was brought to you by

                                                                                                                                                                                                                                                                                                                  Headlines
                                                                                                                                                                                                                                                                                                                  TrueOS stable release 17.12

                                                                                                                                                                                                                                                                                                                  We are pleased to announce a new release of the 6-month STABLE version of TrueOS!

                                                                                                                                                                                                                                                                                                                  This release cycle focused on lots of cleanup and stabilization of the distinguishing features of TrueOS: OpenRC, boot speed, removable-device management, SysAdm API integrations, Lumina improvements, and more. We have also been working quite a bit on the server offering of TrueOS, and are pleased to provide new text-based server images with support for Virtualization systems such as bhyve! This allows for simple server deployments which also take advantage of the TrueOS improvements to FreeBSD such as:

                                                                                                                                                                                                                                                                                                                  • Sane service management and status reporting with OpenRC
                                                                                                                                                                                                                                                                                                                  • Reliable, non-interactive system update mechanism with fail-safe boot environment support.
                                                                                                                                                                                                                                                                                                                  • Graphical management of remote TrueOS servers through SysAdm (also provides a reliable API for administrating systems remotely).
                                                                                                                                                                                                                                                                                                                  • LibreSSL for all base SSL support.
                                                                                                                                                                                                                                                                                                                  • Base system managed via packages (allows for additional fine-tuning).
                                                                                                                                                                                                                                                                                                                  • Base system is smaller due to the removal of the old GCC version in base. Any compiler and/or version may be installed and used via packages as desired.
                                                                                                                                                                                                                                                                                                                  • Support for newer graphics drivers and chipsets (graphics, networking, wifi, and more)
                                                                                                                                                                                                                                                                                                                  • TrueOS Version 17.12 (2017, December) is now available for download from the TrueOS website. Both the STABLE and UNSTABLE package repositories have also been updated in-sync with each other, so current users only need to follow the prompts about updating their system to run the new release.

                                                                                                                                                                                                                                                                                                                    We are also pleased to announce the availability of TrueOS Sponsorships! If you would like to help contribute to the project financially we now have the ability to accept both one-time donations as well as recurring monthly donations which wil help us advocate for TrueOS around the world. Thank you all for using and supporting TrueOS!

                                                                                                                                                                                                                                                                                                                    • Notable Changes:
                                                                                                                                                                                                                                                                                                                      • Over 1100 OpenRC services have been created for 3rd-party packages. This should ensure the functionality of nearly all available 3rd-party packages that install/use their own services.
                                                                                                                                                                                                                                                                                                                      • The OpenRC services for FreeBSD itself have been overhauled, resulting in significantly shorter boot times.
                                                                                                                                                                                                                                                                                                                      • Separate install images for desktops and servers (server image uses a text/console installer)
                                                                                                                                                                                                                                                                                                                      • Bhyve support for TrueOS Server Install
                                                                                                                                                                                                                                                                                                                      • FreeBSD base is synced with 12.0-CURRENT as of December 4th, 2017 (Github commit: 209d01f)
                                                                                                                                                                                                                                                                                                                      • FreeBSD ports tree is synced as of November 30th (pre-FLAVOR changes)
                                                                                                                                                                                                                                                                                                                      • Lumina Desktop has been updated/developed from 1.3.0 to 1.4.1
                                                                                                                                                                                                                                                                                                                      • PCDM now supports multiple simultaneous graphical sessions
                                                                                                                                                                                                                                                                                                                      • Removable devices are now managed through the “automounter” service.
                                                                                                                                                                                                                                                                                                                      • Devices are “announced” as available to the system via *.desktop shortcuts in /media. These shortcuts also contain a variety of optional “Actions” that may be performed on the device.
                                                                                                                                                                                                                                                                                                                      • Devices are only mounted while they are being used (such as when browsing via the command line or a file manager).
                                                                                                                                                                                                                                                                                                                      • Devices are automatically unmounted as soon as they stop being accessed.
                                                                                                                                                                                                                                                                                                                      • Integrated support for all major filesystems (UFS, EXT, FAT, NTFS, ExFAT, etc..)
                                                                                                                                                                                                                                                                                                                      • NOTE: The Lumina desktop is the only one which supports this functionality at the present time.
                                                                                                                                                                                                                                                                                                                      • The TrueOS update system has moved to an “active” update backend. This means that the user will need to actually start the update process by clicking the “Update Now” button in SysAdm, Lumina, or PCDM (as well as the command-line option). The staging of the update files is still performed automatically by default but this (and many other options) can be easily changed in the “Update Manager” settings as desired.
                                                                                                                                                                                                                                                                                                                      • Known Errata:
                                                                                                                                                                                                                                                                                                                        • [VirtualBox] Running FreeBSD within a VirtualBox VM is known to occasionally receive non-existent mouse clicks – particularly when using a scroll wheel or two-finger scroll.
                                                                                                                                                                                                                                                                                                                        • Quick Links:
                                                                                                                                                                                                                                                                                                                          • TrueOS Forums
                                                                                                                                                                                                                                                                                                                          • TrueOS Bugs
                                                                                                                                                                                                                                                                                                                          • TrueOS Handbook
                                                                                                                                                                                                                                                                                                                          • TrueOS Community Chat on Telegram
                                                                                                                                                                                                                                                                                                                          • ***
                                                                                                                                                                                                                                                                                                                            OpenBSD Workstation Guide
                                                                                                                                                                                                                                                                                                                            • Design Goals
                                                                                                                                                                                                                                                                                                                            • User actions should complete instantaneously. While I understand if compiling code and rendering videos takes time, opening programs and moving windows should have no observable delay. The system should use minimalist tools.
                                                                                                                                                                                                                                                                                                                            • Corollary: cache data offline when possible. Everything from OpenStreetMaps to StackExchange can be stored locally. No reason to repeatedly hit the internet to query them. This also improves privacy because the initial download is indiscriminate and doesn’t reveal personal queries or patterns of computer activity.
                                                                                                                                                                                                                                                                                                                            • No idling program should use a perceptible amount of CPU. Why does CalendarAgent on my Macbook sometimes use 150% CPU for fifteen minutes? Who knows. Why are background ChromeHelpers chugging along at upper-single-digit CPU? I didn’t realize that holding a rendered DOM could be so challenging.
                                                                                                                                                                                                                                                                                                                            • Avoid interpreted languages, web-based desktop apps, and JavaScript garbage. There, I said it. Take your Electron apps with you to /dev/null!
                                                                                                                                                                                                                                                                                                                            • Stability. Old fashioned programs on a conservative OS on quality mainstream hardware. There are enough challenges to tackle without a bleeding edge system being one of them.
                                                                                                                                                                                                                                                                                                                            • Delegate to quality hardware components. Why use a janky ncurses software audio mixer when you can use…an actual audio mixer?
                                                                                                                                                                                                                                                                                                                            • Hardware privacy. No cameras or microphones that I can’t physically disconnect. Also real hardware protection for cryptographic keys.
                                                                                                                                                                                                                                                                                                                            • Software privacy. Commercial software and operating systems have gotten so terrible about this. I even catch Mac command line tools trying to call Google Analytics. Sorry homebrew, your cute emojis don’t make up for the surveillance.
                                                                                                                                                                                                                                                                                                                              • The Hardware
                                                                                                                                                                                                                                                                                                                              • Core
                                                                                                                                                                                                                                                                                                                              • To get the best hardware for the money I’m opting for a desktop computer. Haven’t had one since the early 2000s and it feels anachronistic, but it will outperform a laptop of similar cost. After much searching, I found the HP Z240 Tower Workstation. It’s no-nonsense and supports exactly the customizations I was looking for:

                                                                                                                                                                                                                                                                                                                                • No operating system pre-loaded (Cut out the “Windows tax”)
                                                                                                                                                                                                                                                                                                                                • Intel Xeon E3-1270 v6 processor (Supports ECC ram)
                                                                                                                                                                                                                                                                                                                                • 16 GB (2x8 GB) DDR4-2400 ECC Unbuffered memory (2400Mhz is the full memory clock speed supported by the Xeon)
                                                                                                                                                                                                                                                                                                                                • 256 GB HP Z Turbo Drive G2 PCIe SSD (Uses NVMe rather than SATA for faster throughput, supported by nvme(4))
                                                                                                                                                                                                                                                                                                                                • No graphics card (We’ll add our own)
                                                                                                                                                                                                                                                                                                                                • Intel® Ethernet I210-T1 PCIe (Supported by em(4))

                                                                                                                                                                                                                                                                                                                                • A modest discrete video card will enable 2D Glamor acceleration on X11. The Radeon HD 6450 (sold separately) is fanless and listed as supported by radeon(4).

                                                                                                                                                                                                                                                                                                                                • Why build a solid computer and not protect it? Externally, the APC BR1300G UPS will protect the system from power surges and abrupt shutdowns.

                                                                                                                                                                                                                                                                                                                                  • Peripherals
                                                                                                                                                                                                                                                                                                                                  • The Matias Ergo Pro uses mechanical switches for that old fashioned clicky sound. It also includes dedicated buttons along the side for copying and pasting. Why is that cool? Well, it improves secondary selection, a technique that Sun computers used but time forgot.

                                                                                                                                                                                                                                                                                                                                    Since we’re talking about a home office workstation, you may want a printer. The higher quality printers speak PostScript and PDF natively. Unix machines connect to them on TCP port 9100 and send PostScript commands directly. (You can print via telnet if you know the commands!) The Brother HL-L5100DN is a duplex LaserJet which allows that “raw” TCP printing.

                                                                                                                                                                                                                                                                                                                                    • Audio/Video
                                                                                                                                                                                                                                                                                                                                    • I know a lot of people enjoy surrounding themselves with a wall of monitors like they’re in the heart of NASA Mission Control, but I find multi-monitor setups slightly disorienting. It introduces an extra bit of cognitive overhead to determine which monitor is for what exactly. That’s why I’d go with a modest, crisp Dell UltraSharp 24" U2417H. It’s 1080p and yeah there are 4k monitors nowadays, but text and icons are small enough as it is for me!

                                                                                                                                                                                                                                                                                                                                      If I ever considered a second monitor it would be e-ink for comfortably reading electronic copies of books or long articles. The price is currently too high to justify the purchase, but the most promising monitor seems to be the Dasung Paperlike.
                                                                                                                                                                                                                                                                                                                                      In the other direction, video input, it’s more flexible to use a general-purpose HDMI capture box like the Rongyuxuan than settle on a particular webcam. This allows hooking up a real camera, or any other video device.
                                                                                                                                                                                                                                                                                                                                      Although the motherboard for this system has built-in audio, we should use a card with better OpenBSD support. The WBTUO PCIe card uses a C-Media CMI8768 chipset, handled by cmpci(4). The card provides S/PDIFF in and out ports if you ever want to use an external DAC or ADC.
                                                                                                                                                                                                                                                                                                                                      The way to connect it with other things is with a dedicated hardware mixer. The Behringer Xenyx 802 has all the connections needed, and the ability to route audio to and from the computer and a variety of devices at once. The mixer may seem an odd peripheral, but I want to mix the computer with an old fashioned CD player, ham radio gear, and amplifier so this unifies the audio setup.
                                                                                                                                                                                                                                                                                                                                      When doing remote pair programming or video team meetings it’s nice to have a quality microphone. The best ones for this kind of work are directional, with a cardioid reception pattern. The MXL 770 condenser mic is perfect, and uses a powered XLR connection supplied by the mixer.

                                                                                                                                                                                                                                                                                                                                      • Backups
                                                                                                                                                                                                                                                                                                                                      • We’re going dead simple and old-school, back to tapes. There are a set of tape standards called LTO-n. As n increases the tape capacity gets bigger, but the tape drive gets more expensive. In my opinion the best balance these days for the home user is LTO-3. You can usually find an HP Ultrium 960 LTO-3 on eBay for 150 dollars. The cartridges hold 800GB and are about 15 dollars apiece. Hard drives keep coming down in price, but these tapes are very cheap and simpler than keeping a bunch of disk drives. Also tape has proven longevity, and good recoverability.

                                                                                                                                                                                                                                                                                                                                        To use old fashioned tech like this you need a SCSI host bus adapter like the Adaptec 29320LPE, supported by ahd(4).

                                                                                                                                                                                                                                                                                                                                        • Cryptography
                                                                                                                                                                                                                                                                                                                                        • You don’t want to generate and store secret keys on a general purpose network attached computer. The attack surface is a mile wide. Generating or manipulating “offline” secret keys needs to happen on a separate computer with no network access.

                                                                                                                                                                                                                                                                                                                                          Little boards like the Raspberry Pi would be good except they use ARM processors (incompatible with Tails OS) and have wifi. The JaguarBoard is a small x86 machine with no wireless capability. Just switch the keyboard and monitor over to this machine for your “cleanroom.”
                                                                                                                                                                                                                                                                                                                                          jaguar board: Generating keys requires entropy. The Linux kernel on Tails samples system properties to generate randomness, but why not help it out with a dedicated true random number generator (TRNG)? Bit Babbler supplies pure randomness at a high bitrate through USB. (OneRNG works better on the OpenBSD main system, via uonerng(4).)
                                                                                                                                                                                                                                                                                                                                          bit babbler: This little computer will save its results onto a OpenPGP Smartcard V2.1. This card provides write-only access to keys, and computes cryptographic primitives internally to sign and encrypt messages. To use it with a regular computer, hook up a Cherry ST2000 card reader. This reader has a PIN pad built in, so no keylogger on the main computer could even obtain your decryption PIN.

                                                                                                                                                                                                                                                                                                                                          • The Software
                                                                                                                                                                                                                                                                                                                                          • We take the beefed up hardware above and pair it with ninja-fast software written in C. Some text-based, others raw X11 graphical apps unencumbered by ties to any specific window manager.

                                                                                                                                                                                                                                                                                                                                            I’d advise OpenBSD for the underlying operating system, not a Linux. OpenBSD has greater internal consistency, their man pages are impeccable, and they make it a priority to prune old code to keep the system minimal.

                                                                                                                                                                                                                                                                                                                                            What Have We Learned from the PDP-11?

                                                                                                                                                                                                                                                                                                                                            The paper I have chosen tonight is a retrospective on a computer design. It is one of a series of papers by Gordon Bell, and various co-authors, spanning the design, growth, and eventual replacement of the companies iconic line of PDP-11 mini computers.

                                                                                                                                                                                                                                                                                                                                            This year represents the 60th anniversary of the founding of the company that produced the PDP-11. It is also 40 years since this paper was written, so I thought it would be entertaining to review Bell’s retrospective through the lens of our own 20/20 hindsight.
                                                                                                                                                                                                                                                                                                                                            To set the scene for this paper, first we should talk a little about the company that produced the PDP-11, the Digital Equipment Corporation of Maynard, Massachusetts. Better known as DEC.
                                                                                                                                                                                                                                                                                                                                            It’s also worth noting that the name PDP is an acronym for “Programmed Data Processor”, as at the time, computers had a reputation of being large, complicated, and expensive machines, and DEC’s venture capitalists would not support them if they built a “computer”
                                                                                                                                                                                                                                                                                                                                            A computer is not solely determined by its architecture; it reflects the technological, economic, and human aspects of the environment in which it was designed and built. […] The finished computer is a product of the total design environment.

                                                                                                                                                                                                                                                                                                                                            • “Right from the get go, Bell is letting us know that the success of any computer project is not abstractly building the best computer but building the right computer, and that takes context.”
                                                                                                                                                                                                                                                                                                                                            • It is the nature of computer engineering to be goal-oriented, with pressure to produce deliverable products. It is therefore difficult to plan for an extensive lifetime.

                                                                                                                                                                                                                                                                                                                                              Because of the open nature of the PDP-11, anything which interpreted the instructions according to the processor specification, was a PDP-11, so there had been a rush within DEC, once it was clear that the PDP-11 market was heating up, to build implementations; you had different groups building fast, expensive ones and cost reduced slower ones
                                                                                                                                                                                                                                                                                                                                              The first weakness of minicomputers was their limited addressing capability. The biggest (and most common) mistake that can be made in a computer design is that of not providing enough address bits for memory addressing and management.
                                                                                                                                                                                                                                                                                                                                              A second weakness of minicomputers was their tendency not to have enough registers. This was corrected for the PDP-11 by providing eight 16-bit registers. Later, six 32-bit registers were added for floating-point arithmetic. […] More registers would increase the multiprogramming context switch time and confuse the user.

                                                                                                                                                                                                                                                                                                                                              • “It’s also interesting to note Bell’s concern that additional registers would confuse the user. In the early 1970’s the assumption that the machine would be programmed directly in assembly was still the prevailing mindset.”
                                                                                                                                                                                                                                                                                                                                              • A third weakness of minicomputers was their lack of hardware stack capability. In the PDP-11, this was solved with the autoincrement/autodecrement addressing mechanism. This solution is unique to the PDP-11 and has proven to be exceptionally useful. (In fact, it has been copied by other designers.)

                                                                                                                                                                                                                                                                                                                                                • “Nowadays it’s hard to imagine hardware that doesn’t have a notion of a stack, but consider that a stack isn’t important if you don’t need recursion.”
                                                                                                                                                                                                                                                                                                                                                • “The design for the PDP-11 was laid down in 1969 and if we look at the programming languages of the time, FORTRAN and COBOL, neither supported recursive function calls. The function call sequence would often store the return address at a blank word at the start of the procedure making recursion impossible.”
                                                                                                                                                                                                                                                                                                                                                • A fourth weakness, limited interrupt capability and slow context switching, was essentially solved with the device of UNIBUS interrupt vectors, which direct device interrupts.

                                                                                                                                                                                                                                                                                                                                                  The basic mechanism is very fast, requiring only four memory cycles from the time an interrupt request is issued until the first instruction of the interrupt routine begins execution.
                                                                                                                                                                                                                                                                                                                                                  A fifth weakness of prior minicomputers, inadequate character-handling capability, was met in the PDP-11 by providing direct byte addressing capability.

                                                                                                                                                                                                                                                                                                                                                  • “Strings and character handling were of increasing importance during the 1960’s as scientific and business computing converged. The predominant character encodings at the time were 6 bit character sets which provided just enough space for upper case letters, the digits 0 to 9, space, and a few punctuation characters sufficient for printing financial reports.”
                                                                                                                                                                                                                                                                                                                                                  • “Because memory was so expensive, placing one 6 bit character into a 12 or 18 bit word was simply unacceptable so characters would be packed into words. This proved efficient for storage, but complex for operations like move, compare, and concatenate, which had to account for a character appearing in the top or bottom of the word, expending valuable words of program storage to cope.”
                                                                                                                                                                                                                                                                                                                                                  • “The problem was addressed in the PDP-11 by allowing the machine to operate on memory as both a 16-bit word, and the increasingly popular 8-bit byte. The expenditure of 2 additional bits per character was felt to be worth it for simpler string handling, and also eased the adoption of the increasingly popular 7-bit ASCII standard of which DEC were a proponent at the time. Bell concludes this point with the throw away line:”
                                                                                                                                                                                                                                                                                                                                                  • Although string instructions are not yet provided in the hardware, the common string operations (move, compare, concatenate) can be programmed with very short loops.

                                                                                                                                                                                                                                                                                                                                                    A sixth weakness, the inability to use read-only memories, was avoided in the PDP-11. Most code written for the PDP-11 tends to be pure and reentrant without special effort by the programmer, allowing a read-only memory (ROM) to be used directly.
                                                                                                                                                                                                                                                                                                                                                    A seventh weakness, one common to many minicomputers, was primitive I/O capabilities.
                                                                                                                                                                                                                                                                                                                                                    A ninth weakness of minicomputers was the high cost of programming them. Many users program in assembly language, without the comfortable environment of editors, file systems, and debuggers available on bigger systems. The PDP-11 does not seem to have overcome this weakness, although it appears that more complex systems are being built successfully with the PDP-11 than with its predecessors, the PDP-8 and PDP-15.
                                                                                                                                                                                                                                                                                                                                                    The problems faced by computer designers can usually be attributed to one of two causes: inexperience or second-systemitis
                                                                                                                                                                                                                                                                                                                                                    Before the PDP-11, there was no UNIX. Before the PDP-11, there was no C, this is the computer that C was designed on. If you want to know why the classical C int is 16 bits wide, it’s because of the PDP-11. UNIX bought us ideas such as pipes, everything is a file, and interactive computing.
                                                                                                                                                                                                                                                                                                                                                    UNIX, which had arrived at Berkley in 1974 aboard a tape carried by Ken Thompson, would evolve into the west coast flavoured Berkley Systems Distribution. Berkeley UNIX had been ported to the VAX by the start of the 1980’s and was thriving as the counter cultural alternative to DEC’s own VMS operating system. Berkeley UNIX spawned a new generation of hackers who would go on to form companies like Sun micro systems, and languages like Self, which lead directly to the development of Java. UNIX was ported to a bewildering array of computer systems during the 80’s and the fallout from the UNIX wars gave us the various BSD operating systems who continue to this day.

                                                                                                                                                                                                                                                                                                                                                    • The article, and the papers it is summarizing, contain a lot more than we could possibly dig into even if we dedicated the entire show to the topic
                                                                                                                                                                                                                                                                                                                                                    • ***
                                                                                                                                                                                                                                                                                                                                                      News Roundup
                                                                                                                                                                                                                                                                                                                                                      Two-factor authentication SSH with Duo in FreeBSD 11

                                                                                                                                                                                                                                                                                                                                                      This setup uses an SSH key as the first factor of authentication. Please watch Part 1 on setting up SSH keys and how to scp it to your server.

                                                                                                                                                                                                                                                                                                                                                      • Video guide

                                                                                                                                                                                                                                                                                                                                                      • Register for a free account at Duo.com

                                                                                                                                                                                                                                                                                                                                                      • Install the Duo package on your FreeBSD server

                                                                                                                                                                                                                                                                                                                                                      • pkg install -y duo

                                                                                                                                                                                                                                                                                                                                                        • Log into the Duo site > Applications > Protect an Application > Search for Unix application > Protect this Application This will generate the keys we need to configure Duo.
                                                                                                                                                                                                                                                                                                                                                        • Edit the Duo config file using the course notes template
                                                                                                                                                                                                                                                                                                                                                        • vi /usr/local/etc/pam_duo.conf

                                                                                                                                                                                                                                                                                                                                                          • Example config
                                                                                                                                                                                                                                                                                                                                                          • [duo]
                                                                                                                                                                                                                                                                                                                                                            ; Duo integration key
                                                                                                                                                                                                                                                                                                                                                            ikey = Integration key goes here
                                                                                                                                                                                                                                                                                                                                                            ; Duo secret key
                                                                                                                                                                                                                                                                                                                                                            skey = Secret key goes here
                                                                                                                                                                                                                                                                                                                                                            ; Duo API host
                                                                                                                                                                                                                                                                                                                                                            host = API hostname goes here
                                                                                                                                                                                                                                                                                                                                                            • Change the permissions of the Duo config file. If the permissions are not correct then the service will not function properly.
                                                                                                                                                                                                                                                                                                                                                            • chmod 600 /usr/local/etc/pam_duo.conf

                                                                                                                                                                                                                                                                                                                                                              • Edit the SSHD config file using the course notes template
                                                                                                                                                                                                                                                                                                                                                              • vi /etc/ssh/sshd_config

                                                                                                                                                                                                                                                                                                                                                                • Example config
                                                                                                                                                                                                                                                                                                                                                                • ListenAddress 0.0.0.0
                                                                                                                                                                                                                                                                                                                                                                  Port 22
                                                                                                                                                                                                                                                                                                                                                                  PasswordAuthentication no
                                                                                                                                                                                                                                                                                                                                                                  UsePAM yes
                                                                                                                                                                                                                                                                                                                                                                  ChallengeResponseAuthentication yes
                                                                                                                                                                                                                                                                                                                                                                  UseDNS no
                                                                                                                                                                                                                                                                                                                                                                  PermitRootLogin yes
                                                                                                                                                                                                                                                                                                                                                                  AuthenticationMethods publickey,keyboard-interactive
                                                                                                                                                                                                                                                                                                                                                                  • Edit PAM to configure SSHD for Duo using the course notes template
                                                                                                                                                                                                                                                                                                                                                                  • Example config
                                                                                                                                                                                                                                                                                                                                                                  • # auth
                                                                                                                                                                                                                                                                                                                                                                    auth sufficient pam_opie.so no_warn no_fake_prompts
                                                                                                                                                                                                                                                                                                                                                                    auth requisite pam_opieaccess.so no_warn allow_local
                                                                                                                                                                                                                                                                                                                                                                    auth required /usr/local/lib/security/pam_duo.so
                                                                                                                                                                                                                                                                                                                                                                    # session
                                                                                                                                                                                                                                                                                                                                                                    # session optional pam_ssh.so want_agent
                                                                                                                                                                                                                                                                                                                                                                    session required pam_permit.so
                                                                                                                                                                                                                                                                                                                                                                    # password
                                                                                                                                                                                                                                                                                                                                                                    # password sufficient pam_krb5.so no_warn try_first_pass
                                                                                                                                                                                                                                                                                                                                                                    password required pam_unix.so no_warn try_first_pass
                                                                                                                                                                                                                                                                                                                                                                    • Restart the sshd service
                                                                                                                                                                                                                                                                                                                                                                    • service sshd restart

                                                                                                                                                                                                                                                                                                                                                                      • SSH into your FreeBSD server and follow the link it outputs to enroll your phone with Duo.
                                                                                                                                                                                                                                                                                                                                                                      • ssh server.example.com

                                                                                                                                                                                                                                                                                                                                                                        • SSH into your server again
                                                                                                                                                                                                                                                                                                                                                                        • ssh server.example.com

                                                                                                                                                                                                                                                                                                                                                                          • Choose your preferred method and it should log you into your server.
                                                                                                                                                                                                                                                                                                                                                                          • FreeBSD 2017 Release Engineering Recap

                                                                                                                                                                                                                                                                                                                                                                            This past year was undoubtedly a rather busy and successful year for the Release Engineering Team. Throughout the year, development snapshot builds for FreeBSD-CURRENT and supported FreeBSD-STABLE branches were continually provided. In addition, work to package the base system using pkg(8) continued throughout the year and remains ongoing.

                                                                                                                                                                                                                                                                                                                                                                            The FreeBSD Release Engineering Team worked on the FreeBSD 11.1-RELEASE, with the code slush starting mid-May. The FreeBSD 11.1-RELEASE cycle stayed on schedule, with the final release build starting July 21, and the final release announcement following on July 25, building upon the stability and reliability of 11.0-RELEASE.
                                                                                                                                                                                                                                                                                                                                                                            Milestones during the 11.1-RELEASE cycle can be found on the 11.1 schedule page. The final announcement is available here.
                                                                                                                                                                                                                                                                                                                                                                            The FreeBSD Release Engineering Team started the FreeBSD 10.4-RELEASE cycle, led by Marius Strobl. The FreeBSD 10.4-RELEASE cycle continued on schedule, with the only adjustments to the schedule being the addition of BETA4 and the removal of RC3. FreeBSD 10.4-RELEASE builds upon the stability and reliability of FreeBSD 10.3-RELEASE, and is planned to be the final release from the stable/10 branch.
                                                                                                                                                                                                                                                                                                                                                                            Milestones during the 10.4-RELEASE cycle can be found on the 10.4 schedule page. The final announcement is available here.
                                                                                                                                                                                                                                                                                                                                                                            In addition to these releases, support for additional arm single-board computer images were added, notably Raspberry Pi 3 and Pine64. Additionally, release-related documentation effective 12.0-RELEASE and later has been moved from the base system repository to the documentation repository, making it possible to update related documentation as necessary post-release.
                                                                                                                                                                                                                                                                                                                                                                            Additionally, the FreeBSD Release Engineering article in the Project Handbook had been rewritten to outline current practices used by the Release Engineering Team. For more information on the procedures and processes the FreeBSD Release Engineering Team follows, the new article is available here and continually updated as procedures change.
                                                                                                                                                                                                                                                                                                                                                                            Finally, following the availability of FreeBSD 11.1-RELEASE, Glen Barber attended the September Developer Summit hosted at vBSDCon in Reston, VA, USA, where he gave a brief talk comprising of several points relating directly to the 11.1-RELEASE cycle. In particular, some of the points covered included what he felt went well during the release cycle, what did not go as well as it could have, and what we, as a Project, could do better to improve the release process. The slides from the talk are available in the FreeBSD Wiki.
                                                                                                                                                                                                                                                                                                                                                                            During the question and answer time following the talk, some questions asked included:

                                                                                                                                                                                                                                                                                                                                                                            • Q: Should developers use the ‘Relnotes’ tag in the Subversion commit template more loosely, at risk of an increase in false positives.
                                                                                                                                                                                                                                                                                                                                                                            • A: When asked when the tag in the template was initially added, the answer would have been “no”, however in hindsight it is easier to sift through the false positives, than to comb through months or years of commit logs.

                                                                                                                                                                                                                                                                                                                                                                              • Q: What issues are present preventing moving release-related documentation to the documentation repository?
                                                                                                                                                                                                                                                                                                                                                                              • A: There were some rendering issues last time it was investigated, but it is really nothing more than taking the time to fix those issues. (Note, that since this talk, the migration of the documentation in question had moved.)

                                                                                                                                                                                                                                                                                                                                                                                • Q: Does it make sense to extend the timeframe between milestone builds during a release cycle from one week to two weeks, to allow more time for testing, for example, RC1 versus RC2?
                                                                                                                                                                                                                                                                                                                                                                                • A: No. It would extend the length of the release cycle with no real benefit between milestones since as we draw nearer to the end of a given release cycle, the number of changes to that code base significantly reduce.

                                                                                                                                                                                                                                                                                                                                                                                  FLIMP - GIMP Exploit on FreeBSD

                                                                                                                                                                                                                                                                                                                                                                                  In 2014, when starting the Fuzzing Project, Hanno Böck did some primitive fuzzing on GIMP and reported two bugs. They weren't fixed and were forgotten in the public bug tracker.

                                                                                                                                                                                                                                                                                                                                                                                  Recently Tobias Stöckmann found one of these bugs (CVE-2017-17785) and figured out that it's easy to exploit.

                                                                                                                                                                                                                                                                                                                                                                                  • What kind of bug is that?
                                                                                                                                                                                                                                                                                                                                                                                  • It's a classic heap buffer overflow in the FLIC parser. FLIC is a file format for animations and was introduced by Autodesk Animator.

                                                                                                                                                                                                                                                                                                                                                                                    • How does the exploit work?
                                                                                                                                                                                                                                                                                                                                                                                    • Tobias has created a detailed writeup.

                                                                                                                                                                                                                                                                                                                                                                                      • The exploit doesn't work for me!
                                                                                                                                                                                                                                                                                                                                                                                      • We figured out it's unreliable and the memory addresses are depending on many circumstances. The exploit ZIP comes with two variations using different memory addresses.

                                                                                                                                                                                                                                                                                                                                                                                        Try both of them. We also noticed putting the files in a subdirectory sometimes made the exploit work.

                                                                                                                                                                                                                                                                                                                                                                                        • Anything more to tell about the GIMP?
                                                                                                                                                                                                                                                                                                                                                                                        • There's a wide variety of graphics formats. GIMP tries to support many of them, including many legacy formats that nobody is using any more today.

                                                                                                                                                                                                                                                                                                                                                                                          While this has obvious advantages - you can access the old images you may find on a backup CD from 1995 - it comes with risks. Support for many obscure file formats means many parsers that hardly anyone ever looks at.

                                                                                                                                                                                                                                                                                                                                                                                          • So... what about the other parsers?
                                                                                                                                                                                                                                                                                                                                                                                          • The second bug (CVE-2017-17786), which is a simple overread, was in the TGA parser. Furthermore we found buffer overreads in the XCF parser (CVE-2017-17788), the Gimp Brush (GBR) parser (CVE-2017-17784) and the Paint Shop Pro (PSP) parser (CVE-2017-17789).

                                                                                                                                                                                                                                                                                                                                                                                            We found another Heap buffer overflow in the Paint Shop Pro parser (CVE-2017-17787) which is probably also exploitable.
                                                                                                                                                                                                                                                                                                                                                                                            In other words: The GIMP import parsers are full of memory safety bugs.

                                                                                                                                                                                                                                                                                                                                                                                            • What should happen?
                                                                                                                                                                                                                                                                                                                                                                                            • First of all obviously all known memory safety bugs should be fixed.

                                                                                                                                                                                                                                                                                                                                                                                              Furthermore we believe the way GIMP plugins work is not ideal for security testing. The plug-ins are separate executables, however they can't be executed on their own, as they communicate with the main GIMP process.
                                                                                                                                                                                                                                                                                                                                                                                              Ideally either these plug-ins should be changed in a way that allows running them directly from the command line or - even better - they should be turned into libraries. The latter would also have the advantage of making the parser code useable for other software projects.
                                                                                                                                                                                                                                                                                                                                                                                              Finally it might be a good idea to sandbox the import parsers.

                                                                                                                                                                                                                                                                                                                                                                                              Dell FS12-NV7 Review – Bargain FreeBSD/ZFS box

                                                                                                                                                                                                                                                                                                                                                                                              It seems just about everyone selling refurbished data centre kit has a load of Dell FS12-NV7’s to flog. Dell FS-what? You won’t find them in the Dell catalogue, that’s for sure. They look a bit like C2100s of some vintage, and they have a lot in common. But on closer inspection they’re obviously a “special” for an important customer. Given the number of them knocking around, it’s obviously a customer with big data, centres stuffed full of servers with a lot of processing to do. Here’s a hint: It’s not Google or Amazon.

                                                                                                                                                                                                                                                                                                                                                                                              So, should you be buying a weirdo box with no documentation whatsoever? I’d say yes, definitely. If you’re interests are anything like mine. In a 2U box you can get twin 4-core CPUs and 64Gb of RAM for £150 or less. What’s not to like? Ah yes, the complete lack of documentation.
                                                                                                                                                                                                                                                                                                                                                                                              Over the next few weeks I intend to cover that. And to start off this is my first PC review for nearly twenty years.
                                                                                                                                                                                                                                                                                                                                                                                              As I mentioned, it’s a 2U full length heavy metal box on rails. On the back there are the usual I/O ports: a 9-way RS-232, VGA, two 1Gb Ethernet, two USB2 and a PS/2 keyboard and mouse. The front is taken up by twelve 3.5″ hard drive bays, with the status lights and power button on one of the mounting ears to make room. Unlike other Dell servers, all the connections are on the back, only.
                                                                                                                                                                                                                                                                                                                                                                                              So, in summary, you’re getting a lot for your money if its the kind of thing you want. It’s ideal as a high-performance Unix box with plenty of drive bays (preferably running BSD and ZFS). In this configuration it really shifts. Major bang-per-buck. Another idea I’ve had is using it for a flight simulator. That’s a lot of RAM and processors for the money. If you forego the SAS controllers in the PCIe slots and dump in a decent graphics card and sound board, it’s hard to see what’s could be better (and you get jet engine sound effects without a speaker).
                                                                                                                                                                                                                                                                                                                                                                                              So who should buy one of these? BSD geeks is the obvious answer. With a bit of tweaking they’re a dream. It can build-absolutely-everything in 20-30 minutes. For storage you can put fast SAS drives in and it goes like the wind, even at 3Gb bandwidth per drive. I don’t know if it works with FreeNAS but I can’t see why not – I’m using mostly FreeBSD 11.1 and the generic kernel is fine. And if you want to run a load of weird operating systems (like Windows XP) in VM format, it seems to work very well with the Xen hypervisor and Dom0 under FreeBSD. Or CentOS if you prefer.
                                                                                                                                                                                                                                                                                                                                                                                              So I shall end this review in true PCW style:

                                                                                                                                                                                                                                                                                                                                                                                              • Pros:
                                                                                                                                                                                                                                                                                                                                                                                                • Cheap
                                                                                                                                                                                                                                                                                                                                                                                                • Lots of CPUs,
                                                                                                                                                                                                                                                                                                                                                                                                • Lots of RAM
                                                                                                                                                                                                                                                                                                                                                                                                • Lots of HD slots
                                                                                                                                                                                                                                                                                                                                                                                                • Great for BSD/ZFS or VMs
                                                                                                                                                                                                                                                                                                                                                                                                • Cons:
                                                                                                                                                                                                                                                                                                                                                                                                  • Noisy
                                                                                                                                                                                                                                                                                                                                                                                                  • no AES-NI
                                                                                                                                                                                                                                                                                                                                                                                                  • SAS needs upgrading
                                                                                                                                                                                                                                                                                                                                                                                                  • Limited PCI slots
                                                                                                                                                                                                                                                                                                                                                                                                  • As I’ve mentioned, the noise and SAS are easy and relatively cheap to fix, and thanks to BitCoin miners, even the PCI slot problem can be sorted. I’ll talk about this in a later post.

                                                                                                                                                                                                                                                                                                                                                                                                    Beastie Bits
                                                                                                                                                                                                                                                                                                                                                                                                    • Reflections on Hackathons
                                                                                                                                                                                                                                                                                                                                                                                                    • 7-Part Video Crash Course on SaltStack For FreeBSD
                                                                                                                                                                                                                                                                                                                                                                                                    • The LLVM Thread Sanitizer has been ported to NetBSD
                                                                                                                                                                                                                                                                                                                                                                                                    • The First Unix Port (1998)
                                                                                                                                                                                                                                                                                                                                                                                                    • arm64 platform now officially supported [and has syspatch(8)]
                                                                                                                                                                                                                                                                                                                                                                                                    • BSDCan 2018 Call for Participation
                                                                                                                                                                                                                                                                                                                                                                                                    • AsiaBSDCon 2018 Call for Papers
                                                                                                                                                                                                                                                                                                                                                                                                    • ***
                                                                                                                                                                                                                                                                                                                                                                                                      Feedback/Questions
                                                                                                                                                                                                                                                                                                                                                                                                      • Shawn - DragonFlyBSD vagrant images
                                                                                                                                                                                                                                                                                                                                                                                                      • Ben - undermydesk
                                                                                                                                                                                                                                                                                                                                                                                                      • Ken - Conferences
                                                                                                                                                                                                                                                                                                                                                                                                      • Ben - ssh keys
                                                                                                                                                                                                                                                                                                                                                                                                        • SSH Chaining
                                                                                                                                                                                                                                                                                                                                                                                                        • ***
                                                                                                                                                                                                                                                                                                                                                                                                          1 hr 48 min

                                                                                                                                                                                                                                                                                                                                                                                                        About BSD Now

                                                                                                                                                                                                                                                                                                                                                                                                        From the publisher's feed

                                                                                                                                                                                                                                                                                                                                                                                                        Created by three guys who love BSD, we cover the latest news and have an extensive series of tutorials, as well as interviews with various people from all areas of the BSD community. It also serves as…

                                                                                                                                                                                                                                                                                                                                                                                                        More shows like BSD Now

                                                                                                                                                                                                                                                                                                                                                                                                        The Changelog: Software Development, Open Source by Changelog Media

                                                                                                                                                                                                                                                                                                                                                                                                        The Changelog: Software Development, Open Source

                                                                                                                                                                                                                                                                                                                                                                                                        286 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Security Now (Audio) by TWiT

                                                                                                                                                                                                                                                                                                                                                                                                        Security Now (Audio)

                                                                                                                                                                                                                                                                                                                                                                                                        2,011 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        MacBreak Weekly (Audio) by TWiT

                                                                                                                                                                                                                                                                                                                                                                                                        MacBreak Weekly (Audio)

                                                                                                                                                                                                                                                                                                                                                                                                        2,018 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Accidental Tech Podcast by Marco Arment, Casey Liss, John Siracusa

                                                                                                                                                                                                                                                                                                                                                                                                        Accidental Tech Podcast

                                                                                                                                                                                                                                                                                                                                                                                                        2,144 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        LINUX Unplugged by Jupiter Broadcasting

                                                                                                                                                                                                                                                                                                                                                                                                        LINUX Unplugged

                                                                                                                                                                                                                                                                                                                                                                                                        272 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Risky Business by Risky Business Media

                                                                                                                                                                                                                                                                                                                                                                                                        Risky Business

                                                                                                                                                                                                                                                                                                                                                                                                        374 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Late Night Linux by The Late Night Linux Family

                                                                                                                                                                                                                                                                                                                                                                                                        Late Night Linux

                                                                                                                                                                                                                                                                                                                                                                                                        169 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Darknet Diaries by Jack Rhysider

                                                                                                                                                                                                                                                                                                                                                                                                        Darknet Diaries

                                                                                                                                                                                                                                                                                                                                                                                                        8,063 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Behind the Bastards by Cool Zone Media and iHeartPodcasts

                                                                                                                                                                                                                                                                                                                                                                                                        Behind the Bastards

                                                                                                                                                                                                                                                                                                                                                                                                        15,564 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Linux Dev Time by The Late Night Linux Family

                                                                                                                                                                                                                                                                                                                                                                                                        Linux Dev Time

                                                                                                                                                                                                                                                                                                                                                                                                        22 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        2.5 Admins by The Late Night Linux Family

                                                                                                                                                                                                                                                                                                                                                                                                        2.5 Admins

                                                                                                                                                                                                                                                                                                                                                                                                        98 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Linux After Dark by The Late Night Linux Family

                                                                                                                                                                                                                                                                                                                                                                                                        Linux After Dark

                                                                                                                                                                                                                                                                                                                                                                                                        29 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        This Day in AI Podcast by Michael Sharkey, Chris Sharkey

                                                                                                                                                                                                                                                                                                                                                                                                        This Day in AI Podcast

                                                                                                                                                                                                                                                                                                                                                                                                        221 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Linux Matters by Linux Matters

                                                                                                                                                                                                                                                                                                                                                                                                        Linux Matters

                                                                                                                                                                                                                                                                                                                                                                                                        22 Listeners

                                                                                                                                                                                                                                                                                                                                                                                                        Better Offline by Cool Zone Media and iHeartPodcasts

                                                                                                                                                                                                                                                                                                                                                                                                        Better Offline

                                                                                                                                                                                                                                                                                                                                                                                                        608 Listeners