diff options
author | Jean Delvare | 2018-09-26 18:07:10 +0200 |
---|---|---|
committer | David S. Miller | 2018-09-28 19:27:26 +0200 |
commit | 048a7f8b4ec085d5c56ad4a3bf450389a4aed5f9 (patch) | |
tree | 41815bbe3107dd8e9647df90df1332e8218d8f9e /drivers/s390/net/qeth_core_main.c | |
parent | s390: qeth_core_mpc: Use ARRAY_SIZE instead of reimplementing its function (diff) | |
download | kernel-qcow2-linux-048a7f8b4ec085d5c56ad4a3bf450389a4aed5f9.tar.gz kernel-qcow2-linux-048a7f8b4ec085d5c56ad4a3bf450389a4aed5f9.tar.xz kernel-qcow2-linux-048a7f8b4ec085d5c56ad4a3bf450389a4aed5f9.zip |
s390: qeth: Fix potential array overrun in cmd/rc lookup
Functions qeth_get_ipa_msg and qeth_get_ipa_cmd_name are modifying
the last member of global arrays without any locking that I can see.
If two instances of either function are running at the same time,
it could cause a race ultimately leading to an array overrun (the
contents of the last entry of the array is the only guarantee that
the loop will ever stop).
Performing the lookups without modifying the arrays is admittedly
slower (two comparisons per iteration instead of one) but these
are operations which are rare (should only be needed in error
cases or when debugging, not during successful operation) and it
seems still less costly than introducing a mutex to protect the
arrays in question.
As a side bonus, it allows us to declare both arrays as const data.
Signed-off-by: Jean Delvare <jdelvare@suse.de>
Cc: Julian Wiedmann <jwi@linux.ibm.com>
Cc: Ursula Braun <ubraun@linux.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Julian Wiedmann <jwi@linux.ibm.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/s390/net/qeth_core_main.c')
-rw-r--r-- | drivers/s390/net/qeth_core_main.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/s390/net/qeth_core_main.c b/drivers/s390/net/qeth_core_main.c index de8282420f96..ffce6f39828a 100644 --- a/drivers/s390/net/qeth_core_main.c +++ b/drivers/s390/net/qeth_core_main.c @@ -610,7 +610,7 @@ static void qeth_put_reply(struct qeth_reply *reply) static void qeth_issue_ipa_msg(struct qeth_ipa_cmd *cmd, int rc, struct qeth_card *card) { - char *ipa_name; + const char *ipa_name; int com = cmd->hdr.command; ipa_name = qeth_get_ipa_cmd_name(com); if (rc) |