mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-08 09:58:12 +07:00
rfkill: introduce RFKILL_STATE_MAX
While it is interesting to not add last-enum-markers because it allows gcc to warn us of switch() statements missing a valid state, we really should be handling memory corruption on a rfkill state with default clauses, anyway. So add RFKILL_STATE_MAX and use it where applicable. It makes for safer code in the long run. Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br> Acked-by: Ivo van Doorn <IvDoorn@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
77fba13ccc
commit
96c87607ac
@ -49,6 +49,7 @@ enum rfkill_state {
|
|||||||
RFKILL_STATE_SOFT_BLOCKED = 0, /* Radio output blocked */
|
RFKILL_STATE_SOFT_BLOCKED = 0, /* Radio output blocked */
|
||||||
RFKILL_STATE_UNBLOCKED = 1, /* Radio output allowed */
|
RFKILL_STATE_UNBLOCKED = 1, /* Radio output allowed */
|
||||||
RFKILL_STATE_HARD_BLOCKED = 2, /* Output blocked, non-overrideable */
|
RFKILL_STATE_HARD_BLOCKED = 2, /* Output blocked, non-overrideable */
|
||||||
|
RFKILL_STATE_MAX, /* marker for last valid state */
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -201,6 +201,8 @@ static int rfkill_toggle_radio(struct rfkill *rfkill,
|
|||||||
* BLOCK even a transmitter that is already in state
|
* BLOCK even a transmitter that is already in state
|
||||||
* RFKILL_STATE_HARD_BLOCKED */
|
* RFKILL_STATE_HARD_BLOCKED */
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (force || state != rfkill->state) {
|
if (force || state != rfkill->state) {
|
||||||
@ -234,6 +236,9 @@ static void __rfkill_switch_all(const enum rfkill_type type,
|
|||||||
{
|
{
|
||||||
struct rfkill *rfkill;
|
struct rfkill *rfkill;
|
||||||
|
|
||||||
|
if (unlikely(state >= RFKILL_STATE_MAX))
|
||||||
|
return;
|
||||||
|
|
||||||
rfkill_global_states[type].current_state = state;
|
rfkill_global_states[type].current_state = state;
|
||||||
list_for_each_entry(rfkill, &rfkill_list, node) {
|
list_for_each_entry(rfkill, &rfkill_list, node) {
|
||||||
if ((!rfkill->user_claim) && (rfkill->type == type)) {
|
if ((!rfkill->user_claim) && (rfkill->type == type)) {
|
||||||
@ -329,9 +334,7 @@ int rfkill_force_state(struct rfkill *rfkill, enum rfkill_state state)
|
|||||||
{
|
{
|
||||||
enum rfkill_state oldstate;
|
enum rfkill_state oldstate;
|
||||||
|
|
||||||
if (state != RFKILL_STATE_SOFT_BLOCKED &&
|
if (unlikely(state >= RFKILL_STATE_MAX))
|
||||||
state != RFKILL_STATE_UNBLOCKED &&
|
|
||||||
state != RFKILL_STATE_HARD_BLOCKED)
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
mutex_lock(&rfkill->mutex);
|
mutex_lock(&rfkill->mutex);
|
||||||
@ -727,6 +730,8 @@ int __must_check rfkill_register(struct rfkill *rfkill)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
if (rfkill->type >= RFKILL_TYPE_MAX)
|
if (rfkill->type >= RFKILL_TYPE_MAX)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
if (rfkill->state >= RFKILL_STATE_MAX)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
snprintf(dev->bus_id, sizeof(dev->bus_id),
|
snprintf(dev->bus_id, sizeof(dev->bus_id),
|
||||||
"rfkill%ld", (long)atomic_inc_return(&rfkill_no) - 1);
|
"rfkill%ld", (long)atomic_inc_return(&rfkill_no) - 1);
|
||||||
|
Loading…
Reference in New Issue
Block a user