mirror of https://gitee.com/openkylin/linux.git
ipmi: Fix a fairly significant list bug
This bug could cause lists to be corrupted. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iEYEABECAAYFAldgbp0ACgkQIXnXXONXERf9nQCdFmWMz74aMImO5hp5sjAqVmcB 7R8An1ubZlv/np1y3+WDE1Nf6qktLWEq =PxOE -----END PGP SIGNATURE----- Merge tag 'for-linus-4.7-2' of git://git.code.sf.net/p/openipmi/linux-ipmi Pull ipmi bugfix from Corey Minyard: "Fix a fairly significant ipmi list bug This bug could cause lists to be corrupted" * tag 'for-linus-4.7-2' of git://git.code.sf.net/p/openipmi/linux-ipmi: ipmi: Remove smi_msg from waiting_rcv_msgs list before handle_one_recv_msg()
This commit is contained in:
commit
f66c6e6a84
|
@ -3820,6 +3820,7 @@ static void handle_new_recv_msgs(ipmi_smi_t intf)
|
|||
while (!list_empty(&intf->waiting_rcv_msgs)) {
|
||||
smi_msg = list_entry(intf->waiting_rcv_msgs.next,
|
||||
struct ipmi_smi_msg, link);
|
||||
list_del(&smi_msg->link);
|
||||
if (!run_to_completion)
|
||||
spin_unlock_irqrestore(&intf->waiting_rcv_msgs_lock,
|
||||
flags);
|
||||
|
@ -3829,11 +3830,14 @@ static void handle_new_recv_msgs(ipmi_smi_t intf)
|
|||
if (rv > 0) {
|
||||
/*
|
||||
* To preserve message order, quit if we
|
||||
* can't handle a message.
|
||||
* can't handle a message. Add the message
|
||||
* back at the head, this is safe because this
|
||||
* tasklet is the only thing that pulls the
|
||||
* messages.
|
||||
*/
|
||||
list_add(&smi_msg->link, &intf->waiting_rcv_msgs);
|
||||
break;
|
||||
} else {
|
||||
list_del(&smi_msg->link);
|
||||
if (rv == 0)
|
||||
/* Message handled */
|
||||
ipmi_free_smi_msg(smi_msg);
|
||||
|
|
Loading…
Reference in New Issue