mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 20:51:44 +00:00
da5c0f1192
The device_is_registered() in nfc core is used to check whether
nfc device is registered in netlink related functions such as
nfc_fw_download(), nfc_dev_up() and so on. Although device_is_registered()
is protected by device_lock, there is still a race condition between
device_del() and device_is_registered(). The root cause is that
kobject_del() in device_del() is not protected by device_lock.
(cleanup task) | (netlink task)
|
nfc_unregister_device | nfc_fw_download
device_del | device_lock
... | if (!device_is_registered)//(1)
kobject_del//(2) | ...
... | device_unlock
The device_is_registered() returns the value of state_in_sysfs and
the state_in_sysfs is set to zero in kobject_del(). If we pass check in
position (1), then set zero in position (2). As a result, the check
in position (1) is useless.
This patch uses bool variable instead of device_is_registered() to judge
whether the nfc device is registered, which is well synchronized.
Fixes:
|
||
---|---|---|
.. | ||
hci | ||
nci | ||
af_nfc.c | ||
core.c | ||
digital_core.c | ||
digital_dep.c | ||
digital_technology.c | ||
digital.h | ||
Kconfig | ||
llcp_commands.c | ||
llcp_core.c | ||
llcp_sock.c | ||
llcp.h | ||
Makefile | ||
netlink.c | ||
nfc.h | ||
rawsock.c |