On 03/13/2018 06:02 AM, Kamlakant Patel wrote:
This happens when BMC doesn't return any data and the code is trying
to print the value of data[2].

Getting following crash:
[  484.728410] Unable to handle kernel NULL pointer dereference at virtual 
address 00000002
[  484.736496] pgd = ffff0000094a2000
[  484.739885] [00000002] *pgd=00000047fcffe003, *pud=00000047fcffd003, 
*pmd=0000000000000000
[  484.748158] Internal error: Oops: 96000005 [#1] SMP
[...]
[  485.101451] Call trace:
[...]
[  485.188473] [<ffff000000a46e68>] msg_done_handler+0x668/0x700 [ipmi_ssif]
[  485.195249] [<ffff000000a456b8>] ipmi_ssif_thread+0x110/0x128 [ipmi_ssif]
[  485.202038] [<ffff0000080f1430>] kthread+0x108/0x138
[  485.206994] [<ffff0000080838e0>] ret_from_fork+0x10/0x30
[  485.212294] Code: aa1903e1 aa1803e0 b900227f 95fef6a5 (39400aa3)

Adding a check to validate the data len before printing data[2] to fix this 
issue.

Queue for next release, thanks.

-corey

Signed-off-by: Kamlakant Patel <kamlakant.pa...@cavium.com>
---
  drivers/char/ipmi/ipmi_ssif.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
index f929e72..16d7fb5 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -761,7 +761,7 @@ static void msg_done_handler(struct ssif_info *ssif_info, 
int result,
                        ssif_info->ssif_state = SSIF_NORMAL;
                        ipmi_ssif_unlock_cond(ssif_info, flags);
                        pr_warn(PFX "Error getting flags: %d %d, %x\n",
-                              result, len, data[2]);
+                              result, len, (len >= 3) ? data[2] : 0);
                } else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
                           || data[1] != IPMI_GET_MSG_FLAGS_CMD) {
                        /*
@@ -783,7 +783,7 @@ static void msg_done_handler(struct ssif_info *ssif_info, 
int result,
                if ((result < 0) || (len < 3) || (data[2] != 0)) {
                        /* Error clearing flags */
                        pr_warn(PFX "Error clearing flags: %d %d, %x\n",
-                              result, len, data[2]);
+                              result, len, (len >= 3) ? data[2] : 0);
                } else if (data[0] != (IPMI_NETFN_APP_REQUEST | 1) << 2
                           || data[1] != IPMI_CLEAR_MSG_FLAGS_CMD) {
                        pr_warn(PFX "Invalid response clearing flags: %x %x\n",



------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
Openipmi-developer mailing list
Openipmi-developer@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openipmi-developer

Reply via email to