From a572fad6647bd8ee47bc5ee86bc61b8f60d72688 Mon Sep 17 00:00:00 2001
From: chrfranke <chrfranke@4ea69e1a-61f1-4043-bf83-b5c94c648137>
Date: Wed, 18 Nov 2009 19:42:10 +0000
Subject: [PATCH] Linux: Fix segfault in 3ware interface (ticket #22).

git-svn-id: https://smartmontools.svn.sourceforge.net/svnroot/smartmontools/trunk@2987 4ea69e1a-61f1-4043-bf83-b5c94c648137
---
 smartmontools/CHANGELOG    | 2 ++
 smartmontools/os_linux.cpp | 4 ++--
 2 files changed, 4 insertions(+), 2 deletions(-)

diff --git a/smartmontools/CHANGELOG b/smartmontools/CHANGELOG
index eb034b31c..c731102b1 100644
--- a/smartmontools/CHANGELOG
+++ b/smartmontools/CHANGELOG
@@ -43,6 +43,8 @@ NOTES FOR FUTURE RELEASES: see TODO file.
 
 <DEVELOPERS: ADDITIONS TO THE CHANGE LOG GO JUST BELOW HERE, PLEASE>
 
+  [CF] Linux: Fix segfault in 3ware interface (ticket #22).
+
   [MS] knowndrives.cpp updates:
        - Hitachi Deskstar 7K2000
        - Seagate Momentus 7200 FDE.2 series
diff --git a/smartmontools/os_linux.cpp b/smartmontools/os_linux.cpp
index 7c485ffca..5993f113d 100644
--- a/smartmontools/os_linux.cpp
+++ b/smartmontools/os_linux.cpp
@@ -1541,7 +1541,7 @@ bool linux_escalade_device::ata_pass_through(const ata_cmd_in & in, ata_cmd_out
       passthru->size++;
   }
   else
-    set_err(EINVAL);
+    return set_err(EINVAL);
 
   // Now send the command down through an ioctl()
   int ioctlreturn;
@@ -1605,7 +1605,7 @@ bool linux_escalade_device::ata_pass_through(const ata_cmd_in & in, ata_cmd_out
   }
 
   // Return register values
-  {
+  if (passthru) {
     ata_out_regs_48bit & r = out.out_regs;
     r.error           = passthru->features;
     r.sector_count_16 = passthru->sector_count;
-- 
GitLab