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

            Bug ID: 284904
           Summary: buffer overflow in if_umb.c umb_in_len2mask()
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Some People
          Priority: ---
         Component: usb
          Assignee: usb@FreeBSD.org
          Reporter: r...@lcs.mit.edu

umb_in_len2mask(mask, len) will write as many as len/8 bytes:

        for (i = 0; i < len / 8; i++)
                p[i] = 0xff;

len comes from a ipv4elem.prefixlen in a MBIM_CID_IP_CONFIGURATION
message from the USB device, and can be any uint32_t value. So a broken
or malicious USB device can cause a buffer overflow.

Here's a backtrace from just before a crash:

#0  umb_in_len2mask (mask=0xffffffc0826c69c0, len=50331648)
    at /usr/rtm/symbsd/src/sys/dev/usb/net/if_umb.c:1448
#1  umb_add_inet_config (sc=0xffffffc094c4d000, ip=..., prefixlen=50331648, 
    gw=...) at /usr/rtm/symbsd/src/sys/dev/usb/net/if_umb.c:1778
#2  0xffffffc00026fe1e in umb_decode_ip_configuration (sc=0xffffffc094c4d000, 
    data=0xffffffd00cbb9330, len=<optimized out>)
    at /usr/rtm/symbsd/src/sys/dev/usb/net/if_umb.c:1855
#3  umb_decode_cid (sc=0xffffffc094c4d000, cid=<optimized out>, 
    data=0xffffffd00cbb9330, len=<optimized out>)
    at /usr/rtm/symbsd/src/sys/dev/usb/net/if_umb.c:2685
#4  0xffffffc00026db7e in umb_decode_response (sc=0xffffffc094c4d000, 
    response=0xffffffd00cbb9300, len=128)
    at /usr/rtm/symbsd/src/sys/dev/usb/net/if_umb.c:1355
#5  umb_get_response_task (msg=<optimized out>)
    at /usr/rtm/symbsd/src/sys/dev/usb/net/if_umb.c:1243
#6  0xffffffc0002552da in usb_process (arg=0xffffffc094c4d078)
    at /usr/rtm/symbsd/src/sys/dev/usb/usb_process.c:160
#7  0xffffffc0003f8750 in fork_exit (callout=0xffffffc0002551de <usb_process>, 
    arg=0xffffffc094c4d078, frame=0xffffffc0826c6c40)
    at /usr/rtm/symbsd/src/sys/kern/kern_fork.c:1152
#8  0xffffffc0007efbee in fork_trampoline ()
    at /usr/rtm/symbsd/src/sys/riscv/riscv/swtch.S:370

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

Reply via email to