[sblim-cmpi-sysfs] Fix provider segfaults when enumerating instances of Linux_SysfsAttribute class, Fix provider doesn'

vcrhonek vcrhonek at fedoraproject.org
Tue Nov 8 15:52:03 UTC 2011


commit 85443ef57184a956d748306e16e73f8ad5346ecd
Author: Vitezslav Crhonek <vcrhonek at redhat.com>
Date:   Tue Nov 8 16:51:37 2011 +0100

    Fix provider segfaults when enumerating instances of Linux_SysfsAttribute class, Fix provider doesn't show much sysfs entries, Add mofs registration for various CIMOMs

 sblim-cmpi-sysfs-1.2.0-provider-segfault.patch |   12 +++
 sblim-cmpi-sysfs-1.2.0-sysfs-links.patch       |   16 ++++
 sblim-cmpi-sysfs.spec                          |  106 +++++++++++++++++++++---
 3 files changed, 122 insertions(+), 12 deletions(-)
---
diff --git a/sblim-cmpi-sysfs-1.2.0-provider-segfault.patch b/sblim-cmpi-sysfs-1.2.0-provider-segfault.patch
new file mode 100644
index 0000000..97127c8
--- /dev/null
+++ b/sblim-cmpi-sysfs-1.2.0-provider-segfault.patch
@@ -0,0 +1,12 @@
+diff -up sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c.orig sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c
+--- sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c.orig	2011-11-03 13:24:11.722220576 +0100
++++ sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsAttributeUtil.c	2011-11-03 13:24:46.621218152 +0100
+@@ -123,7 +123,7 @@ CMPIInstance *  Linux_SysfsAttributeUtil
+    }
+ 
+    /* Read the instance value from the instance file */
+-   if ( (fileinfo.st_mode & S_IRUSR) && (instancefile = fopen(instancename,"r")) != NULL) {
++   if ( (fileinfo.st_mode & S_IRUSR) && (fileinfo.st_size > 0) && (instancefile = fopen(instancename,"r")) != NULL) {
+       /* Read in each of the whitespace separated values from the file */
+       fscanf(instancefile, " %s", buffer);
+       while (fscanf(instancefile, " %s", val) != EOF) {
diff --git a/sblim-cmpi-sysfs-1.2.0-sysfs-links.patch b/sblim-cmpi-sysfs-1.2.0-sysfs-links.patch
new file mode 100644
index 0000000..444bd39
--- /dev/null
+++ b/sblim-cmpi-sysfs-1.2.0-sysfs-links.patch
@@ -0,0 +1,16 @@
+diff -up sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c.orig sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c
+--- sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c.orig	2009-05-22 04:45:48.000000000 +0200
++++ sblim-cmpi-sysfs-1.2.0/util/Linux_SysfsDeviceUtil.c	2011-11-03 13:35:01.437175460 +0100
+@@ -91,10 +91,10 @@ CMPIInstance * Linux_SysfsDeviceUtil_mak
+ void * Linux_SysfsDeviceUtil_beginEnumeration( void * location )
+ {
+    FILE * handle;
+-   char * findcommand = malloc(strlen((char *)location)+38); 
++   char * findcommand = malloc(strlen((char *)location)+41);
+ 
+    /* Find all the instance names in the target location */
+-   sprintf(findcommand, "find %s -maxdepth 1 -mindepth 1 -type d", (char *)location);
++   sprintf(findcommand, "find -L %s -maxdepth 1 -mindepth 1 -type d", (char *)location);
+    handle = popen(findcommand,"r");
+    free(findcommand); 
+    return handle; 
diff --git a/sblim-cmpi-sysfs.spec b/sblim-cmpi-sysfs.spec
index 79ab1c9..3bee7df 100644
--- a/sblim-cmpi-sysfs.spec
+++ b/sblim-cmpi-sysfs.spec
@@ -2,7 +2,7 @@
 
 Name:           sblim-cmpi-sysfs
 Version:        1.2.0
-Release:        2%{?dist}
+Release:        3%{?dist}
 Summary:        SBLIM sysfs instrumentation
 
 Group:          Applications/System
@@ -11,6 +11,13 @@ URL:            http://sblim.wiki.sourceforge.net/
 Source0:        http://downloads.sourceforge.net/sblim/%{name}-%{version}.tar.bz2
 BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
+# Patch0: already upstream,
+#         see http://sourceforge.net/tracker/index.php?func=detail&aid=2818227&group_id=128809&atid=712784
+Patch0:         sblim-cmpi-sysfs-1.2.0-provider-segfault.patch
+# Patch1: issue reported upstream, patch not accepted yet,
+#         see http://sourceforge.net/tracker/index.php?func=detail&aid=2818223&group_id=128809&atid=712784
+Patch1:         sblim-cmpi-sysfs-1.2.0-sysfs-links.patch
+
 BuildRequires:  sblim-cmpi-devel sblim-cmpi-base-devel
 Requires:       sblim-cmpi-base cim-server
 
@@ -28,6 +35,8 @@ SBLIM Base Params Testcase Files for SBLIM Testsuite
 
 %prep
 %setup -q
+%patch0 -p1 -b .provider-segfault
+%patch1 -p1 -b .sysfs-links
 sed -ri 's,-type d -maxdepth 1 -mindepth 1,-maxdepth 1 -mindepth 1 -type d,g' \
         ./test/system/linux/*.{sh,system}
 
@@ -80,32 +89,105 @@ rm -rf $RPM_BUILD_ROOT
 %{_datadir}/sblim-testsuite/system/linux/Linux_Sysfs*
 
 
-%define SYSFS_SCHEMA %{_datadir}/%{name}/Linux_SysfsAttribute.mof %{_datadir}/%{name}/Linux_SysfsBlockDevice.mof %{_datadir}/%{name}/Linux_SysfsBusDevice.mof %{_datadir}/%{name}/Linux_SysfsInputDevice.mof %{_datadir}/%{name}/Linux_SysfsNetworkDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.mof %{_datadir}/%{name}/Linux_SysfsTTYDevice.mof
-%define SYSFS_REGISTRATION %{_datadir}/%{name}/Linux_SysfsAttribute.registration %{_datadir}/%{name}/Linux_SysfsBlockDevice.registration %{_datadir}/%{name}/Linux_SysfsBusDevice.registration %{_datadir}/%{name}/Linux_SysfsInputDevice.registration %{_datadir}/%{name}/Linux_SysfsNetworkDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.registration %{_datadir}/%{name}/Linux_SysfsTTYDevice.registration
+%define SCHEMA %{_datadir}/%{name}/Linux_SysfsAttribute.mof %{_datadir}/%{name}/Linux_SysfsBlockDevice.mof %{_datadir}/%{name}/Linux_SysfsBusDevice.mof %{_datadir}/%{name}/Linux_SysfsInputDevice.mof %{_datadir}/%{name}/Linux_SysfsNetworkDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIDevice.mof %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.mof %{_datadir}/%{name}/Linux_SysfsTTYDevice.mof
+%define REGISTRATION %{_datadir}/%{name}/Linux_SysfsAttribute.registration %{_datadir}/%{name}/Linux_SysfsBlockDevice.registration %{_datadir}/%{name}/Linux_SysfsBusDevice.registration %{_datadir}/%{name}/Linux_SysfsInputDevice.registration %{_datadir}/%{name}/Linux_SysfsNetworkDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIDevice.registration %{_datadir}/%{name}/Linux_SysfsSCSIHostDevice.registration %{_datadir}/%{name}/Linux_SysfsTTYDevice.registration
 
 %pre
-if [ $1 -gt 1 ]; then
+function unregister()
+{
   %{_datadir}/%{name}/provider-register.sh -d \
-        -r %{SYSFS_REGISTRATION} -m %{SYSFS_SCHEMA} > /dev/null 2>&1 || :;
+        $1 \
+        -m %{SCHEMA} \
+        -r %{REGISTRATION} > /dev/null 2>&1 || :;
+  # don't let registration failure when server not running fail upgrade!
+}
+ 
+# If upgrading, deregister old version
+if [ $1 -gt 1 ]
+then
+        unregistered=no
+        if [ -e /usr/sbin/cimserver ]; then
+           unregister "-t pegasus";
+           unregistered=yes
+        fi  
+ 
+        if [ -e /usr/sbin/sfcbd ]; then
+           unregister "-t sfcb";
+           unregistered=yes
+        fi  
+ 
+        if [ "$unregistered" != yes ]; then
+           unregister
+        fi  
 fi
 
 %post
+function register()
+{
+  # The follwoing script will handle the registration for various CIMOMs.
+  %{_datadir}/%{name}/provider-register.sh \
+        $1 \
+        -m %{SCHEMA} \
+        -r %{REGISTRATION} > /dev/null 2>&1 || :;
+  # don't let registration failure when server not running fail install!
+}
+ 
 /sbin/ldconfig
-if [ $1 -ge 1 ]; then
-   %{_datadir}/%{name}/provider-register.sh \
-         -r %{SYSFS_REGISTRATION} -m %{SYSFS_SCHEMA} > /dev/null 2>&1 || :;
+if [ $1 -ge 1 ]
+then
+        registered=no
+        if [ -e /usr/sbin/cimserver ]; then
+          register "-t pegasus";
+          registered=yes
+        fi  
+ 
+        if [ -e /usr/sbin/sfcbd ]; then
+          register "-t sfcb";
+          registered=yes
+        fi
+ 
+        if [ "$registered" != yes ]; then
+          register
+        fi
 fi
 
 %preun
-if [ $1 -eq 0 ]; then
-   %{_datadir}/%{name}/provider-register.sh -d \
-         -r %{SYSFS_REGISTRATION} -m %{SYSFS_SCHEMA} > /dev/null 2>&1 || :;
+function unregister()
+{
+  %{_datadir}/%{name}/provider-register.sh -d \
+        $1 \
+        -m %{SCHEMA} \
+        -r %{REGISTRATION} > /dev/null 2>&1 || :;
+  # don't let registration failure when server not running fail erase!
+}
+ 
+if [ $1 -eq 0 ]
+then
+        unregistered=no
+        if [ -e /usr/sbin/cimserver ]; then
+          unregister "-t pegasus";
+          unregistered=yes
+        fi
+ 
+        if [ -e /usr/sbin/sfcbd ]; then
+          unregister "-t sfcb";
+          unregistered=yes
+        fi
+ 
+        if [ "$unregistered" != yes ]; then
+          unregister
+        fi
 fi
-
+ 
 %postun -p /sbin/ldconfig
 
 
 %changelog
+* Tue Nov 08 2011 Vitezslav Crhonek <vcrhonek at redhat.com> - 1.2.0-3
+- Fix provider segfaults when enumerating instances of Linux_SysfsAttribute class
+- Fix provider doesn't show much sysfs entries
+- Add mofs registration for various CIMOMs
+
 * Wed Feb 09 2011 Fedora Release Engineering <rel-eng at lists.fedoraproject.org> - 1.2.0-2
 - Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
 


More information about the scm-commits mailing list