<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <small>Hi Kamalesh,</small><br>
    <br>
    <div class="moz-cite-prefix">On 07/13/2015 02:59 PM, Kamalesh
      Babulal wrote:<br>
    </div>
    <blockquote cite="mid:55A384E2.7080407@linux.vnet.ibm.com"
      type="cite">
      <pre wrap="">

On 07/13/2015 10:36 AM, Neelesh Gupta wrote:
</pre>
      <blockquote type="cite">
        <pre wrap="">The patch fixes an illegal access to the memory which has been
freed.

Fixes Coverity defect # 101858

Signed-off-by: Neelesh Gupta <a class="moz-txt-link-rfc2396E" href="mailto:neelegup@linux.vnet.ibm.com"><neelegup@linux.vnet.ibm.com></a>
---
 hw/fsp/fsp-ipmi.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/hw/fsp/fsp-ipmi.c b/hw/fsp/fsp-ipmi.c
index e5cd6e2..729ff93 100644
--- a/hw/fsp/fsp-ipmi.c
+++ b/hw/fsp/fsp-ipmi.c
@@ -87,13 +87,12 @@ static void fsp_ipmi_req_complete(struct fsp_msg *msg)
 {
        uint8_t status = (msg->resp->word1 >> 8) & 0xff;
        uint32_t length = msg->resp->data.words[0];
-       struct fsp_ipmi_msg *fsp_ipmi_msg;
+       struct fsp_ipmi_msg *fsp_ipmi_msg = msg->user_data;
        struct ipmi_msg *ipmi_msg;
 
        fsp_freemsg(msg);
 
        if (status != FSP_STATUS_SUCCESS) {
-               fsp_ipmi_msg = msg->user_data;
                assert(fsp_ipmi_msg == fsp_ipmi.cur_msg);
 
                ipmi_msg = &fsp_ipmi_msg->ipmi_msg;
</pre>
      </blockquote>
      <pre wrap="">fsp_free(msg) means msg->user_data is also un-allocated. It means
fsp_ipmi_msg is pointing
to memory which is freed. From the code, I am guessing you need
free(msg) before you
call fsp_ipmi_send_request(). If my assumption is right, how about below
code ?</pre>
    </blockquote>
    <br>
    <small>'msg->user_data' is a private data to this driver and the
      driver has to<br>
      take care of it. For instance, 'fsp_ipmi_msg' can only be free'd
      through<br>
      a backend callback i.e., fsp_ipmi_free_msg() in this driver.<br>
      <br>
      Neelesh.<br>
    </small><br>
    <blockquote cite="mid:55A384E2.7080407@linux.vnet.ibm.com"
      type="cite">
      <pre wrap="">

--- a/hw/fsp/fsp-ipmi.c
+++ b/hw/fsp/fsp-ipmi.c
@@ -90,8 +90,6 @@ static void fsp_ipmi_req_complete(struct fsp_msg *msg)
        struct fsp_ipmi_msg *fsp_ipmi_msg;
        struct ipmi_msg *ipmi_msg;

-       fsp_freemsg(msg);
-
        if (status != FSP_STATUS_SUCCESS) {
                fsp_ipmi_msg = msg->user_data;
                assert(fsp_ipmi_msg == fsp_ipmi.cur_msg);
@@ -111,9 +109,14 @@ static void fsp_ipmi_req_complete(struct fsp_msg *msg)
                                  IPMI_NETFN_RETURN_CODE(ipmi_msg->netfn),
                                  IPMI_ERR_UNSPECIFIED);

+              fsp_freemsg(msg);
+
                /* Send the next request in the queue */
                fsp_ipmi_send_request();
+              return;
        }
+
+       fsp_freemsg(msg);
 }

 static int fsp_ipmi_send_request(void)


</pre>
    </blockquote>
    <br>
  </body>
</html>