Revision 7ff57e98fb78ad94edafbdc7435f2d745e9e6bb5 authored by Fabio M. De Francesco on 23 February 2022, 10:02:52 UTC, committed by Jakub Kicinski on 24 February 2022, 17:09:33 UTC
smc_pnetid_by_table_ib() uses read_lock() and then it calls smc_pnet_apply_ib()
which, in turn, calls mutex_lock(&smc_ib_devices.mutex).

read_lock() disables preemption. Therefore, the code acquires a mutex while in
atomic context and it leads to a SAC bug.

Fix this bug by replacing the rwlock with a mutex.

Reported-and-tested-by: syzbot+4f322a6d84e991c38775@syzkaller.appspotmail.com
Fixes: 64e28b52c7a6 ("net/smc: add pnet table namespace support")
Confirmed-by: Tony Lu <tonylu@linux.alibaba.com>
Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com>
Acked-by: Karsten Graul <kgraul@linux.ibm.com>
Link: https://lore.kernel.org/r/20220223100252.22562-1-fmdefrancesco@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent e13ad14
Raw File
max8688.rst
Kernel driver max8688
=====================

Supported chips:

  * Maxim MAX8688

    Prefix: 'max8688'

    Addresses scanned: -

    Datasheet: http://datasheets.maxim-ic.com/en/ds/MAX8688.pdf

Author: Guenter Roeck <linux@roeck-us.net>


Description
-----------

This driver supports hardware monitoring for Maxim MAX8688 Digital Power-Supply
Controller/Monitor with PMBus Interface.

The driver is a client driver to the core PMBus driver. Please see
Documentation/hwmon/pmbus.rst for details on PMBus client drivers.


Usage Notes
-----------

This driver does not auto-detect devices. You will have to instantiate the
devices explicitly. Please see Documentation/i2c/instantiating-devices.rst for
details.


Platform data support
---------------------

The driver supports standard PMBus driver platform data.


Sysfs entries
-------------

The following attributes are supported. Limits are read-write; all other
attributes are read-only.

======================= ========================================================
in1_label		"vout1"
in1_input		Measured voltage. From READ_VOUT register.
in1_min			Minimum Voltage. From VOUT_UV_WARN_LIMIT register.
in1_max			Maximum voltage. From VOUT_OV_WARN_LIMIT register.
in1_lcrit		Critical minimum Voltage. VOUT_UV_FAULT_LIMIT register.
in1_crit		Critical maximum voltage. From VOUT_OV_FAULT_LIMIT
			register.
in1_min_alarm		Voltage low alarm. From VOLTAGE_UV_WARNING status.
in1_max_alarm		Voltage high alarm. From VOLTAGE_OV_WARNING status.
in1_lcrit_alarm		Voltage critical low alarm. From VOLTAGE_UV_FAULT
			status.
in1_crit_alarm		Voltage critical high alarm. From VOLTAGE_OV_FAULT
			status.
in1_highest		Historical maximum voltage.
in1_reset_history	Write any value to reset history.

curr1_label		"iout1"
curr1_input		Measured current. From READ_IOUT register.
curr1_max		Maximum current. From IOUT_OC_WARN_LIMIT register.
curr1_crit		Critical maximum current. From IOUT_OC_FAULT_LIMIT
			register.
curr1_max_alarm		Current high alarm. From IOUT_OC_WARN_LIMIT register.
curr1_crit_alarm	Current critical high alarm. From IOUT_OC_FAULT status.
curr1_highest		Historical maximum current.
curr1_reset_history	Write any value to reset history.

temp1_input		Measured temperature. From READ_TEMPERATURE_1 register.
temp1_max		Maximum temperature. From OT_WARN_LIMIT register.
temp1_crit		Critical high temperature. From OT_FAULT_LIMIT register.
temp1_max_alarm		Chip temperature high alarm. Set by comparing
			READ_TEMPERATURE_1 with OT_WARN_LIMIT if TEMP_OT_WARNING
			status is set.
temp1_crit_alarm	Chip temperature critical high alarm. Set by comparing
			READ_TEMPERATURE_1 with OT_FAULT_LIMIT if TEMP_OT_FAULT
			status is set.
temp1_highest		Historical maximum temperature.
temp1_reset_history	Write any value to reset history.
======================= ========================================================
back to top