Patch "s390/qeth: fix SETIP command handling" has been added to the 4.9-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
s390/qeth: fix SETIP command handling
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
s390-qeth-fix-setip-command-handling.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Mar 8 06:55:02 PST 2018
From: Julian Wiedmann <[email protected]>
Date: Fri, 9 Feb 2018 11:03:50 +0100
Subject: s390/qeth: fix SETIP command handling
From: Julian Wiedmann <[email protected]>
[ Upstream commit 1c5b2216fbb973a9410e0b06389740b5c1289171 ]
send_control_data() applies some special handling to SETIP v4 IPA commands. But current code parses *all* command types for the SETIP command code. Limit the command code check to IPA commands.
--- drivers/s390/net/qeth_core.h | 5 +++++ drivers/s390/net/qeth_core_main.c | 14 ++++++++------ 2 files changed, 13 insertions(+), 6 deletions(-)
drivers/s390/net/qeth_core.h +5 -0
@@ -592,6 +592,11 @@ struct qeth_cmd_buffer {void (*callback) (struct qeth_channel *,struct qeth_cmd_buffer *); }; +static inline struct qeth_ipa_cmd *__ipa_cmd (struct qeth_cmd_buffer *iob) +{ +return (struct qeth_ipa_cmd *)(iob->data +IPA_PDU_HEADER_SIZE ); +} +/** * definition of a qeth channel, used for read and write */
drivers/s390/net/qeth_core_main.c +8 -6
@@ -2050,7 +2050,7 @@ int qeth_send_control_data(struct qeth_cunsigned long flags;struct qeth_reply *reply =NULL ;unsigned long timeout, event_timeout; -struct qeth_ipa_cmd *cmd; +struct qeth_ipa_cmd *cmd =NULL ;QETH_CARD_TEXT (card,2 ,"sendctl" );
@@ -2077,10 +2077,13 @@ int qeth_send_control_data(struct qeth_cwhile (atomic_cmpxchg (&card->write.irq_pending,0 ,1 )) ;qeth_prepare_control_data (card, len, iob); -if (IS_IPA (iob->data)) +if (IS_IPA (iob->data)) { + cmd =__ipa_cmd (iob); event_timeout =QETH_IPA_TIMEOUT ; -else + }else { event_timeout =QETH_TIMEOUT ; + } + timeout = jiffies + event_timeout;QETH_CARD_TEXT (card,6 ,"noirqpnd" );
@@ -2105,9 +2108,8 @@ int qeth_send_control_data(struct qeth_c/* we have only one long running ipassist, since we can ensure process context of this command we can sleep */ - cmd = (struct qeth_ipa_cmd *)(iob->data+IPA_PDU_HEADER_SIZE ); -if ((cmd->hdr.command ==IPA_CMD_SETIP ) && - (cmd->hdr.prot_version ==QETH_PROT_IPV4 )) { +if (cmd && cmd->hdr.command ==IPA_CMD_SETIP && + cmd->hdr.prot_version ==QETH_PROT_IPV4 ) {if (!wait_event_timeout (reply->wait_q,atomic_read (&reply->received), event_timeout)) goto time_err;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/s390-qeth-fix-setip-command-handling.patch queue-4.9/s390-qeth-fix-ip-address-lookup-for-l3-devices.patch queue-4.9/s390-qeth-fix-ipa-command-submission-race.patch queue-4.9/s390-qeth-fix-overestimated-count-of-buffer-elements.patch queue-4.9/s390-qeth-fix-double-free-on-ip-add-remove-race.patch queue-4.9/s390-qeth-fix-ip-removal-on-offline-cards.patch queue-4.9/s390-qeth-fix-underestimated-count-of-buffer-elements.patch