Skip to content

Instantly share code, notes, and snippets.

@vianpl
Created November 14, 2018 16:45
Show Gist options
  • Save vianpl/6483bc7b8375cb1d851fd17d15ce2c40 to your computer and use it in GitHub Desktop.
Save vianpl/6483bc7b8375cb1d851fd17d15ce2c40 to your computer and use it in GitHub Desktop.
eBPF USB atomic alloction error injection
USB ATOMIC ALLOCATION ERROR INJECTION
Prerequisites:
- Install bcc and bcc-tools, this patch https://github.com/iovisor/bcc/pull/2044
is needed
- The BCC tools are available at: /usr/share/bcc/tools
- Boot with the latest KOTD-debug kernel which has CONFIG_BPF_KPROBE_OVERRIDE
enabled
Injecting errors into an USB network device:
- lsusb output:
Bus 004 Device 004: ID 0424:5734 Standard Microsystems Corp.
>>> Bus 004 Device 003: ID 0bda:8153 Realtek Semiconductor Corp. RTL8153 Gigabit Ethernet Adapter
Bus 004 Device 002: ID 0424:5807 Standard Microsystems Corp.
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 003 Device 008: ID 0853:0100 Topre Corporation HHKB Professional
Bus 003 Device 006: ID 0409:005a NEC Corp. HighSpeed Hub
Bus 003 Device 004: ID 0bda:4014 Realtek Semiconductor Corp.
Bus 003 Device 007: ID 0424:274c Standard Microsystems Corp.
Bus 003 Device 005: ID 046d:c52e Logitech, Inc. MK260 Wireless Combo Receiver
Bus 003 Device 003: ID 0424:2734 Standard Microsystems Corp.
Bus 003 Device 002: ID 0424:2807 Standard Microsystems Corp.
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 001 Device 004: ID 0c45:6713 Microdia
Bus 001 Device 005: ID 15aa:1555 Gearway Electronics (Dong Guan) Co., Ltd.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
- Error injection; will fail 10 times to allocate atomic memory during any
URB sumbission by USB device [bus 4: dev 3]:
sudo ./inject kmalloc -c 10 -P 1 -I linux/usb.h "(true)
=> usb_submit_urb(struct urb *urb, gfp_t mem_flags)(mem_flags == GFP_ATOMIC && urb->dev->bus->busnum == 4 && urb->dev->devnum == 3)
"
- dmesg output:
[24734.915723] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915727] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915730] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915734] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915737] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915741] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915745] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915748] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915752] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
[24734.915756] r8152 4-1.2:1.0 enp62s0u1u2: Couldn't submit rx[000000004cd74c10], ret = -12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment