Author: asomers
Date: Wed Jun 12 22:19:49 2013
New Revision: 251670
URL: http://svnweb.freebsd.org/changeset/base/251670

Log:
  MFC r251396
  
  sys/dev/mps/mps.c
  sys/dev/mps/mps_user.c
          Fix uninitialized memory reference in mps_read_config_page.  It was
          referencing a field (params->hdr.Ext.ExtPageType) that would only be
          set when reading an Extended config page.  The symptom was that
          MPSIO_READ_CFG_PAGE ioctls would randomly fail with
          MPI2_IOCSTATUS_CONFIG_INVALID_PAGE errors.  The solution is to
          determine whether an extended or an ordinary config page is requested
          by looking at the PageType field, which should be available 
regardless.
  
          Similarly, mps_user_read_extcfg_header and mps_user_read_extcfg_page,
          which call mps_read_config_page, had to be fixed to always set the
          PageType field.  They were implicitly assuming that
          mps_read_config_page always operated on Extended pages.
  
  Reviewed by:  ken
  Approved by:  ken (mentor)

Modified:
  stable/9/sys/dev/mps/mps.c
  stable/9/sys/dev/mps/mps_user.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/dev/   (props changed)

Modified: stable/9/sys/dev/mps/mps.c
==============================================================================
--- stable/9/sys/dev/mps/mps.c  Wed Jun 12 21:41:09 2013        (r251669)
+++ stable/9/sys/dev/mps/mps.c  Wed Jun 12 22:19:49 2013        (r251670)
@@ -2409,7 +2409,7 @@ mps_read_config_page(struct mps_softc *s
        req->SGLFlags = 0;
        req->ChainOffset = 0;
        req->PageAddress = params->page_address;
-       if (params->hdr.Ext.ExtPageType != 0) {
+       if (params->hdr.Struct.PageType == MPI2_CONFIG_PAGETYPE_EXTENDED) {
                MPI2_CONFIG_EXTENDED_PAGE_HEADER *hdr;
 
                hdr = &params->hdr.Ext;

Modified: stable/9/sys/dev/mps/mps_user.c
==============================================================================
--- stable/9/sys/dev/mps/mps_user.c     Wed Jun 12 21:41:09 2013        
(r251669)
+++ stable/9/sys/dev/mps/mps_user.c     Wed Jun 12 22:19:49 2013        
(r251670)
@@ -305,6 +305,7 @@ mps_user_read_extcfg_header(struct mps_s
        hdr = &params.hdr.Ext;
        params.action = MPI2_CONFIG_ACTION_PAGE_HEADER;
        hdr->PageVersion = ext_page_req->header.PageVersion;
+       hdr->PageType = MPI2_CONFIG_PAGETYPE_EXTENDED;
        hdr->ExtPageLength = 0;
        hdr->PageNumber = ext_page_req->header.PageNumber;
        hdr->ExtPageType = ext_page_req->header.ExtPageType;
@@ -346,6 +347,7 @@ mps_user_read_extcfg_page(struct mps_sof
        params.action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT;
        params.page_address = le32toh(ext_page_req->page_address);
        hdr->PageVersion = reqhdr->PageVersion;
+       hdr->PageType = MPI2_CONFIG_PAGETYPE_EXTENDED;
        hdr->PageNumber = reqhdr->PageNumber;
        hdr->ExtPageType = reqhdr->ExtPageType;
        hdr->ExtPageLength = reqhdr->ExtPageLength;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to