linux/drivers
Greg Kroah-Hartman fcbfaffee5 driver core: add TAINT_FORCED_BIND for when userspace manually messes with devices and drivers
The ability to add and remove devices from a driver through the sysfs
"bind" and "unbind" files was created all those decades ago as a way
that kernel developers can iterate faster, and provide a debugging way
for users to attempt to add a new device to a driver without having to
rebuild their kernel.

This api over the years has been abused and recently come under a major
fuzzing "attack" through tools like syzbot which decided that it would
attempt to just randomly bind any driver to any type of device, causing
loads of unneeded errors and pointless kernel patches to be generated by
unsuspecting new developers.

Handle all of this by adding a new taint flag, TAINT_FORCED_BIND, which
will be set on the driver if the bind/unbind sysfs files are ever
written to.  This lets kernel developers "know" that a user is
attempting to do something that is not normal, and as such, if the
kernel breaks they get to keep the shiny pieces laying around on the
floor.

The flag is 'Y' which was unused, and can remembered as the user is
"yeeting" the device being operated on here (thrown with force without
regard for the thing being thrown).

Note, the taint flag gets set _BEFORE_ the bind/unbind callback happens,
as many times crashes/oops/warnings/failures happen within the callback,
and the taint flag needs to be there to show what was being attempted.
If it were to be set after the callback happens, the oops report would
not properly reflect what foolishness was being attempted.

Fuzzing tools like syzbot, that doesn't have hand-crafted rules to keep
the tool from hitting bind/unbind, should be run with panic_on_taint
enabled so that they fall over and don't continue on, thinking that they
actually found a real issue.

Userspace operations that rely on the bind/unbind files to work around
the lack of will to upgrade a kernel image to a newer version with
proper support for new devices, or the lack of will to submit valid
device ids to driver authors, will still work properly, but now the
kernel will be flagged in a way that will show that perhaps those users
should reconsider their behavior and work to have the drivers properly
support these devices in a "native" manner.

Finally, the bind/unbind files can find real use-after-free issues with
some drivers by forcing the process to happen virtually without having
to rely on manual removal processes.  Those real bugs should still be
worked on, but by adding this taint flag, developers can more easily
determine bug reports that are actually worth looking at.

Reviewed-by: Johan Hovold <johan@kernel.org>
Tested-by: Johan Hovold <johan@kernel.org>
Reviewed-by: Aaron Tomlin <atomlin@atomlin.com>
Reviewed-by: Bradley Morgan <brads@mainlining.org>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Link: https://patch.msgid.link/20260914-bind_taint-v4-3-eadf8a090903@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2026-09-18 18:24:41 +01:00
..
accel kmalloc_obj conversions for v7.3-rc2 2026-09-05 20:45:18 -07:00
accessibility
acpi treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
amba
android Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
ata ata: libata-scsi: do not raise UA for storage element depopulation and restoration 2026-09-03 16:10:44 +02:00
atm
auxdisplay auxdisplay for v7.3-1 2026-08-24 08:15:59 -07:00
base driver core: add TAINT_FORCED_BIND for when userspace manually messes with devices and drivers 2026-09-18 18:24:41 +01:00
bcma
block kmalloc_obj conversions for v7.3-rc2 2026-09-05 20:45:18 -07:00
bluetooth Bluetooth: hci_mrvl: Fix wrong return value check of wait_on_bit_timeout() 2026-08-31 14:05:27 -04:00
bus Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
cache
cdrom
cdx
char virtio_console: allocate the port_buffer with the caller's gfp 2026-09-05 19:28:39 +02:00
clk treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
clocksource hyperv-next for v7.3-rc1 2026-08-26 16:47:40 -07:00
comedi
connector
counter Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
cpufreq treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
cpuidle cpuidle: dt_idle_genpd: kfree() the original name allocation 2026-09-01 17:28:56 +02:00
crypto treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
cxl
dax mm.git review status for mm-hotfixes-stable..mm-stable 2026-08-20 18:17:08 -07:00
dca
devfreq treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
dibs net/dibs: Correct freeing of dmb_clientid_arr 2026-08-12 17:08:05 -07:00
dio
dma treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
dma-buf kmalloc_obj conversions for v7.3-rc2 2026-09-05 20:45:18 -07:00
dpll Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2026-08-18 10:42:41 -07:00
edac treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
eisa
extcon
firewire firewire updates for v7.3 2026-08-22 08:41:28 -07:00
firmware treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
fpga treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
fsi
fwctl rust: introduce abstractions for fwctl 2026-08-14 19:21:17 -03:00
gnss
gpib Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
gpio treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
gpu rust: dma: tie DMA allocations to the device's bound lifetime 2026-09-07 22:50:04 +02:00
greybus
hid treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
hsi HSI changes for the 7.3 series 2026-08-21 12:01:23 -07:00
hte
hv treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
hwmon treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
hwspinlock
hwtracing treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
i2c treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
i3c treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
idle
iio treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
infiniband treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
input treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
interconnect This pull request contains the following interconnect updates for 2026-08-19 09:55:37 +02:00
iommu treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
ipack Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
irqchip Miscellaneous IRQ subsystem fixes: 2026-09-06 10:35:24 -07:00
leds LEDs for v7.3 2026-08-27 11:05:51 -07:00
macintosh
mailbox treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
mcb
md treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
media treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
memory * Raw NAND changes 2026-08-23 09:11:21 -07:00
memstick
message
mfd treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
misc Merge drm/drm-fixes into drm-misc-fixes 2026-09-01 09:38:51 +02:00
mmc MMC core: 2026-08-21 11:58:08 -07:00
most
mtd treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
mux
net treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
nfc Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net 2026-08-18 10:42:41 -07:00
ntb NTB: ntb_transport: Reject oversized TX buffers 2026-08-20 13:43:24 -07:00
nubus
nvdimm treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
nvme kmalloc_obj conversions for v7.3-rc2 2026-09-05 20:45:18 -07:00
nvmem Char/Misc/IIO/etc driver update for 7.3-rc1 2026-08-25 09:38:50 -07:00
of Devicetree fixes for v7.3, part 1: 2026-08-27 12:53:43 -07:00
opp treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
parisc parisc: eisa: Fix infinite loop when parsing invalid IRQ value 2026-08-18 11:43:05 +02:00
parport
pci treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
pcmcia
peci
perf drivers: perf: Use __DEVICE_ATTR() macro to initialize dev_ext_attribute 2026-09-16 18:17:40 +01:00
phy Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
pinctrl Pin control bulk changes for kernel v7.3 2026-08-24 08:46:03 -07:00
platform treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
pmdomain treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
pnp
power treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
powercap More power management updates for 7.3-rc1 2026-08-26 14:13:26 -07:00
pps
ps3
ptp treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
pwm Driver core changes for 7.3-rc1 2026-08-19 10:42:18 -07:00
rapidio
ras - Mark the mpc85xx and ThunderX EDAC drivers as orphaned due to lack of 2026-08-31 20:10:39 -07:00
regulator regulator: Fix for v7.3 2026-08-27 12:21:56 -07:00
remoteproc
resctrl arm64 updates for 7.3 2026-08-18 11:57:17 -07:00
reset Mostly the usual clk driver updates and new SoC additions plus non-critical 2026-08-26 11:14:30 -07:00
rpmsg
rtc RTC for 7.3 2026-08-28 09:53:43 -07:00
s390 treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
sbus
scsi kmalloc_obj conversions for v7.3-rc2 2026-09-05 20:45:18 -07:00
sh
siox
slimbus
soc treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
soundwire soundwire updates for 7.3 2026-08-24 12:16:16 -07:00
spi treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
spmi
ssb
staging Staging driver fixes for 7.3-rc2 2026-09-06 09:49:06 -07:00
target scsi: target: iscsi: Reserve a terminator byte for the login payload 2026-09-01 22:08:31 -04:00
tc
tee treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
thermal MFD for v7.3 2026-08-27 10:45:08 -07:00
thunderbolt treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
tty treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
ufs kmalloc_obj conversions for v7.3-rc2 2026-09-05 20:45:18 -07:00
uio
usb USB fixes for 7.3-rc2 2026-09-06 08:50:20 -07:00
vdpa vduse: Add suspend 2026-08-19 06:38:48 -04:00
vfio mm.git review status for mm-hotfixes-stable..mm-stable 2026-08-20 18:17:08 -07:00
vhost vhost,vdpa,virtio: fixes, features 2026-08-20 17:07:50 -07:00
video Backlight for v7.3 2026-08-27 11:16:39 -07:00
virt arm64 updates for 7.3 2026-08-18 11:57:17 -07:00
virtio virtio_ring: fix infinite loop in virtnet_poll_cleantx when device is broken 2026-08-19 06:38:47 -04:00
w1
watchdog MFD for v7.3 2026-08-27 10:45:08 -07:00
xen treewide: refresh kmalloc_obj() conversions 2026-09-04 21:37:00 -07:00
zorro
Kconfig
Makefile