https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297516

            Bug ID: 297516
           Summary: sendfile: Assertion uio->uio_rw == UIO_WRITE in 32-bit
                    compat mode
           Product: Base System
           Version: 16.0-CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: kern
          Assignee: [email protected]
          Reporter: [email protected]

Attempting to use freebsd32_sendfile on a 64-bit kernel will instantly panic as
shown below.  This is a regression.  I don't know exactly when it was
introduced, but I don't think that it was present as recently as early July.

STACK TRACE
===========

panic: Assertion uio->uio_rw == UIO_WRITE failed at
/usr/home/somers/src/freebsd.org/src/main/sys/kern/uipc_mbuf.c:2002
...
#10 0xffffffff80c3b749 in vpanic (fmt=<optimized out>,
    ap=ap@entry=0xfffffe00d86618a0)
    at /usr/home/somers/src/freebsd.org/src/main/sys/kern/kern_shutdown.c:962
        buf = "Assertion uio->uio_rw == UIO_WRITE failed at
/usr/home/somers/src/freebsd.org/src/main/sys/kern/uipc_mbuf.c:2002", '\000'
<repeats 143 times>
        __pc = 0x0
        __pc = 0x0
        __pc = 0x0
        other_cpus = {__bits = {65527, 0 <repeats 15 times>}}
        td = 0xfffff80017657000
        bootopt = <optimized out>
        newpanic = <optimized out>
#11 0xffffffff80c3b5c3 in panic (
    fmt=0xffffffff81da5280 <cnputs_mtx> "\021S,\201\377\377\377\377")
    at /usr/home/somers/src/freebsd.org/src/main/sys/kern/kern_shutdown.c:887
        ap = {{gp_offset = 32, fp_offset = 48,
            overflow_arg_area = 0xfffffe00d86618d0,
            reg_save_area = 0xfffffe00d8661870}}
#12 0xffffffff80cf2756 in mc_uiotomc (mc=mc@entry=0xfffffe00d86619b0,
    uio=0xfffff800af319b00, length=65536, lspace=lspace@entry=0, how=18,
    how@entry=2, flags=0)
    at /usr/home/somers/src/freebsd.org/src/main/sys/kern/uipc_mbuf.c:2002
        total = <optimized out>
        error = <optimized out>
        mb = <optimized out>
#13 0xffffffff80d0b280 in uipc_sosend_stream_or_seqpacket (
    so=0xfffff80124870400, addr=<optimized out>, uio0=0xfffff800af319b00,
    m=<optimized out>, c=<optimized out>, flags=0, td=0xdeadc0dedeadc0de)
    at /usr/home/somers/src/freebsd.org/src/main/sys/kern/uipc_usrreq.c:1194
        unp2 = 0xffffffff80fc95a0 <mac_socket_check_send+208>
        needsopts = 0
        mc = {mc_q = {stqh_first = 0x0, stqh_last = 0xfffffe00d86619b0},
          mc_len = 0, mc_mlen = 0}
        cmc = {mc_q = {stqh_first = 0x0, stqh_last = 0xfffffe00d8661998},
          mc_len = 0, mc_mlen = 0}
        nonblock = <optimized out>
        eor = false
        sent = 0
        aio = <optimized out>
        uio = 0xfffff800af319b00
        error = <optimized out>
        resid = 24
        so2 = <optimized out>
        sb = <optimized out>
#14 0xffffffff80cff349 in sousrsend (so=0xffffffff81da5280 <cnputs_mtx>,
    addr=0xfffffe00d86615f0, uio=0xffffffff813fb398, control=0x12, flags=0,
    userproc=0x0)
    at /usr/home/somers/src/freebsd.org/src/main/sys/kern/uipc_socket.c:2671
        len = <optimized out>
        td = <optimized out>
        saved_vnet = 0x0
        error = <optimized out>
#15 0xffffffff80cc0784 in fo_write (fp=0xfffff8001763d7d0,
    uio=0xfffff800af319b00, active_cred=0xffffffff813fb398,
    td=0xfffff80017657000, flags=<optimized out>)
    at /usr/home/somers/src/freebsd.org/src/main/sys/sys/file.h:375
No locals.
#16 kern_filewrite (td=0xfffff80017657000, fd=fd@entry=5,
    fp=0xfffff8001763d7d0, auio=auio@entry=0xfffff800af319b00,
    flags=flags@entry=0, cntp=cntp@entry=0xfffffe00d8661ce8)
    at /usr/home/somers/src/freebsd.org/src/main/sys/kern/sys_generic.c:601
        ktruio = 0x0
        cnt = 24
        error = <optimized out>
#17 0xffffffff80c38faa in vn_sendfile (fp=<optimized out>, sockfd=5,
    hdr_uio=<optimized out>, trl_uio=0xfffff800af319b00,
    offset=<optimized out>, nbytes=0, sent=0xfffffe00d8661d80, flags=0,
    td=0xfffff80017657000)
    at /usr/home/somers/src/freebsd.org/src/main/sys/kern/kern_sendfile.c:1178
        cnt = -2118685976
        sock_fp = 0xfffff8001763d7d0
        mhtail = 0xfffff80124caba00
        va = {va_type = 232, va_mode = 33207, va_bsdflags = 65535,
          va_uid = 1601310144, va_gid = 4294965249,
          va_nlink = 18446735280555793152, va_fsid = 2,
          va_fileid = 18446741875082739712, va_size = 0,
          va_blocksize = -2195392684896, va_atime = {tv_sec = -2130496517,
            tv_nsec = -2195392684896}, va_mtime = {tv_sec = -2198626811904,
            tv_nsec = 549755814128}, va_ctime = {tv_sec = 2, tv_nsec = 3},
          va_birthtime = {tv_sec = -2198626811904, tv_nsec = -8793153758464},
          va_gen = 2, va_flags = 18446741878316866800,
          va_rdev = 18446744071574695594, va_bytes = 618333444,
          va_filerev = 80, va_vaflags = 618332673, va_spare = -2195392684656}
        obj_size = 13
        tls_enq_cnt = -2048
        obj = 0xfffff800177fb1d0
        so = <optimized out>
        mh = <optimized out>
        m = 0x0
        tls = 0x0
        sbytes = <optimized out>
        hdrlen = 0
        softerr = 0
        use_ext_pgs = <optimized out>
        vp = 0xfffff8015f720dc0
        shmfd = <optimized out>
        error = 0
        pr = 0xffffffff81aed910 <streamproto>
        rem = 0
        saved_vnet = 0x0
        off = <optimized out>
        max_pgs = <optimized out>
        ext_pgs_idx = <optimized out>
        nobj_size = <optimized out>
        pga = <optimized out>
        sf = <optimized out>
#18 0xffffffff803f4808 in fo_sendfile (fp=0xffffffff81da5280 <cnputs_mtx>,
    sockfd=-664398352, hdr_uio=0xffffffff813fb398, trl_uio=0xec63ae9b24db0201,
    offset=1, nbytes=0, sent=0xfffffe00d8661d80, flags=18,
    td=0xfffff80017657000)
    at /usr/home/somers/src/freebsd.org/src/main/sys/sys/file.h:445
No locals.
#19 freebsd32_do_sendfile (td=0xfffff80017657000, uap=0xfffff80017657428,
    compat=<optimized out>)
    at
/usr/home/somers/src/freebsd.org/src/main/sys/compat/freebsd32/freebsd32_misc.c:2263
        hdtr32 = {headers = 545570880, hdr_cnt = 3, trailers = 545271984,
          trl_cnt = 2}
        hdr_uio = 0xfffff800af319b80
        trl_uio = 0xfffff800af319b00
        fp = 0xfffff80007f67c80
        rights = {cr_rights = {144115188075855885, 288230376151711744}}
        sbytes = -2195392684560
        offset = <optimized out>
        error = <optimized out>
        hdtr = <optimized out>
        iov32 = <optimized out>
#20 0xffffffff8128edc0 in syscallenter (td=0xfffff80017657000)
    at
/usr/home/somers/src/freebsd.org/src/main/sys/amd64/ia32/../../kern/subr_syscall.c:193
        se = 0xffffffff81a143a0 <freebsd32_sysent+12576>
        p = 0xfffffe013ad31000
        sa = 0xfffff80017657418
        error = <optimized out>
        sy_thr_static = <optimized out>
        traced = <optimized out>
#21 ia32_syscall (frame=0xfffffe00d8661f40)
    at
/usr/home/somers/src/freebsd.org/src/main/sys/amd64/ia32/ia32_syscall.c:231
        ksi = {ksi_link = {tqe_next = 0xfffffe00d8661e70,
            tqe_prev = 0xffffffff80cadc29 <userret+121>}, ksi_info = {
            si_signo = 134092672, si_errno = -2048, si_code = 1231,
            si_pid = 0, si_uid = 618332673, si_status = -329011557,
            si_addr = 0xfffff80017657000, si_value = {sival_int = 788352,
              sival_ptr = 0xc0780, sigval_int = 788352, sigval_ptr = 0xc0780},
            _reason = {_fault = {_trapno = 618332673}, _timer = {
                _timerid = 618332673, _overrun = -329011557}, _mesgq = {
                _mqd = 618332673}, _poll = {_band = -1413093876702707199},
              _capsicum = {_syscall = 618332673}, __spare__ = {
                __spare1__ = -1413093876702707199, __spare2__ = {392523776,
                  -2048, 12, 0, -664395984, -512, -2128813459}}}},
          ksi_flags = -664396096, ksi_sigq = 0x2}
        orig_tf_rflags = 646
        td = 0xfffff80017657000
#22 0xffffffff8119d00f in int0x80_syscall_common ()
    at
/usr/home/somers/src/freebsd.org/src/main/sys/amd64/ia32/ia32_exception.S:75

STEPS TO REPRODUCE
==================

1) Install Rust from rustup
2) rustup target install i686-unknown-freebsd
3) git clone [email protected]:nix-rust/nix.git
4) cd nix
5) cargo test --all-features --target i686-unknown-freebsd -- --test-threads=1
sendfile

-- 
You are receiving this mail because:
You are the assignee for the bug.

Reply via email to