[smartmontools/f13/master] - megaraid: Fix segfault on non-data commands (#577935)

Michal Hlavinka mhlavink at fedoraproject.org
Mon Nov 15 14:59:16 UTC 2010


commit 3cdb0391f577531d4f72531a6612529d5e2fd60f
Author: Michal Hlavinka <mhlavink at redhat.com>
Date:   Mon Nov 15 15:59:16 2010 +0100

    - megaraid: Fix segfault on non-data commands (#577935)

 smartmontools-5.40-megaraid.patch |   33 +++++++++++++++++++++++++++++++++
 smartmontools.spec                |   10 +++++++++-
 2 files changed, 42 insertions(+), 1 deletions(-)
---
diff --git a/smartmontools-5.40-megaraid.patch b/smartmontools-5.40-megaraid.patch
new file mode 100644
index 0000000..3c3f8bc
--- /dev/null
+++ b/smartmontools-5.40-megaraid.patch
@@ -0,0 +1,33 @@
+diff -up smartmontools-5.39.1/os_linux.cpp.megaraid smartmontools-5.39.1/os_linux.cpp
+--- smartmontools-5.39.1/os_linux.cpp.megaraid	2010-01-28 21:24:32.000000000 +0100
++++ smartmontools-5.39.1/os_linux.cpp	2010-11-15 12:58:56.648181400 +0100
+@@ -1095,17 +1095,21 @@ bool linux_megaraid_device::megasas_cmd(
+   pthru->cdb_len = cdbLen;
+   pthru->timeout = 0;
+   pthru->flags = MFI_FRAME_DIR_READ;
+-  pthru->sge_count = 1;
+-  pthru->data_xfer_len = dataLen;
+-  pthru->sgl.sge32[0].phys_addr = (intptr_t)data;
+-  pthru->sgl.sge32[0].length = (uint32_t)dataLen;
++  if (dataLen > 0) {
++    pthru->sge_count = 1;
++    pthru->data_xfer_len = dataLen;
++    pthru->sgl.sge32[0].phys_addr = (intptr_t)data;
++    pthru->sgl.sge32[0].length = (uint32_t)dataLen;
++  }
+   memcpy(pthru->cdb, cdb, cdbLen);
+ 
+   uio.host_no = m_hba;
+-  uio.sge_count = 1;
+-  uio.sgl_off = offsetof(struct megasas_pthru_frame, sgl);
+-  uio.sgl[0].iov_base = data;
+-  uio.sgl[0].iov_len = dataLen;
++  if (dataLen > 0) {
++    uio.sge_count = 1;
++    uio.sgl_off = offsetof(struct megasas_pthru_frame, sgl);
++    uio.sgl[0].iov_base = data;
++    uio.sgl[0].iov_len = dataLen;
++  }
+ 
+   rc = 0;
+   errno = 0;
diff --git a/smartmontools.spec b/smartmontools.spec
index 000d6ef..5ede9e4 100644
--- a/smartmontools.spec
+++ b/smartmontools.spec
@@ -1,7 +1,7 @@
 Summary:	Tools for monitoring SMART capable hard disks
 Name:		smartmontools
 Version:	5.40
-Release:	2%{?dist}
+Release:	3%{?dist}
 Epoch:		1
 Group:		System Environment/Base
 License:	GPLv2+
@@ -13,6 +13,9 @@ Source2:	smartmontools.sysconf
 #fedora/rhel specific
 Patch1:		smartmontools-5.38-defaultconf.patch
 
+#from upstream, for smartmontools <= 5.40
+Patch2:         smartmontools-5.40-megaraid.patch
+
 BuildRoot:	%(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
 Requires:	fileutils mailx chkconfig initscripts
 BuildRequires:	readline-devel ncurses-devel automake util-linux groff gettext
@@ -29,6 +32,8 @@ failure.
 %prep
 %setup -q 
 %patch1 -p1 -b .defaultconf
+%patch2 -p1 -b .megaraid
+
 # fix encoding
 for fe in AUTHORS CHANGELOG
 do
@@ -86,6 +91,9 @@ fi
 %{_datadir}/%{name}/drivedb.h
 
 %changelog
+* Mon Nov 15 2010 Michal Hlavinka <mhlavink at redhat.com> - 1:5.40-3
+- megaraid: Fix segfault on non-data commands (#577935)
+
 * Tue Nov 09 2010 Michal Hlavinka <mhlavink at redhat.com> - 1:5.40-2
 - don't forget to restart smartd service after update (#651211)
 


More information about the scm-commits mailing list