Fix overrun in lmsensor component. (rhbz797692)

This commit is contained in:
William Cohen 2012-03-09 16:36:44 -05:00
parent 4bb90afdf0
commit c98dcf56a8
2 changed files with 209 additions and 1 deletions

203
papi-bz797692.patch Normal file
View File

@ -0,0 +1,203 @@
diff -up papi-4.2.1/src/components/lmsensors/linux-lmsensors.c.bz papi-4.2.1/src/components/lmsensors/linux-lmsensors.c
--- papi-4.2.1/src/components/lmsensors/linux-lmsensors.c.bz 2012-02-10 14:58:08.000000000 -0500
+++ papi-4.2.1/src/components/lmsensors/linux-lmsensors.c 2012-03-09 16:23:20.139608076 -0500
@@ -4,11 +4,11 @@
#include "papi_memory.h"
#include "linux-lmsensors.h"
+papi_vector_t _lmsensors_vector;
-
-/*******************************************************************************
- ******** BEGIN FUNCTIONS USED INTERNALLY SPECIFIC TO THIS COMPONENT *********
- ******************************************************************************/
+/******************************************************************************
+ ******** BEGIN FUNCTIONS USED INTERNALLY SPECIFIC TO THIS COMPONENT ********
+ *****************************************************************************/
/*
* Counts number of events available in this system
*/
@@ -50,72 +50,69 @@ createNativeEvents( void )
int chip_nr = 0;
const sensors_chip_name *chip_name;
- cmp_id_t component;
-
/* component name and description */
- strcpy( component.name, "LM_SENSORS" );
- strcpy( component.descr,
- "lm-sensors provides tools for monitoring the hardware health" );
+ strcpy( _lmsensors_vector.cmp_info.name, "LM_SENSORS" );
+ // strcpy( _lmsensors_vector.cmp_info.descr,
+ // "lm-sensors provides tools for monitoring the hardware health" );
/* Loop through all the chips found */
while ( ( chip_name =
sensors_get_detected_chips( NULL, &chip_nr ) ) != NULL ) {
- int a, b;
- const sensors_feature *feature;
- const sensors_subfeature *sub;
- char chipnamestring[PAPI_MIN_STR_LEN];
+ int a, b;
+ const sensors_feature *feature;
+ const sensors_subfeature *sub;
+ char chipnamestring[PAPI_MIN_STR_LEN];
- lm_sensors_native_table[id].count = 0;
+ // lm_sensors_native_table[id].count = 0;
/* get chip name from its internal representation */
- sensors_snprintf_chip_name( chipnamestring,
- PAPI_MIN_STR_LEN, chip_name );
+ sensors_snprintf_chip_name( chipnamestring,
+ PAPI_MIN_STR_LEN, chip_name );
- a = 0;
- /* Loop through all the features found */
- while ( ( feature = sensors_get_features( chip_name, &a ) ) ) {
- char *featurelabel;
+ a = 0;
+
+ /* Loop through all the features found */
+ while ( ( feature = sensors_get_features( chip_name, &a ) ) ) {
+ char *featurelabel;
- if ( !( featurelabel = sensors_get_label( chip_name, feature ) ) ) {
- fprintf( stderr, "ERROR: Can't get label of feature %s!\n",
+ if ( !( featurelabel = sensors_get_label( chip_name, feature ))) {
+ fprintf( stderr, "ERROR: Can't get label of feature %s!\n",
feature->name );
- continue;
- }
+ continue;
+ }
- b = 0;
+ b = 0;
- /* Loop through all the subfeatures found */
- while ( ( sub =
- sensors_get_all_subfeatures( chip_name, feature,
- &b ) ) ) {
- count = 0;
+ /* Loop through all the subfeatures found */
+ while ((sub=sensors_get_all_subfeatures(chip_name,feature,&b))) {
- /* Save native event data */
- sprintf( lm_sensors_native_table[id].name,
- "%s.%s.%s.%s",
- component.name,
- chipnamestring, featurelabel, sub->name );
+ count = 0;
- strncpy( lm_sensors_native_table[id].description,
- lm_sensors_native_table[id].name, PAPI_MAX_STR_LEN );
+ /* Save native event data */
+ sprintf( lm_sensors_native_table[id].name, "%s.%s.%s.%s",
+ _lmsensors_vector.cmp_info.name,
+ chipnamestring, featurelabel, sub->name );
- /* The selector has to be !=0 . Starts with 1 */
- lm_sensors_native_table[id].resources.selector = id + 1;
+ strncpy( lm_sensors_native_table[id].description,
+ lm_sensors_native_table[id].name, PAPI_MAX_STR_LEN );
- /* Save the actual references to this event */
- lm_sensors_native_table[id].resources.name = chip_name;
- lm_sensors_native_table[id].resources.subfeat_nr = sub->number;
+ /* The selector has to be !=0 . Starts with 1 */
+ lm_sensors_native_table[id].resources.selector = id + 1;
- count = sub->number;
+ /* Save the actual references to this event */
+ lm_sensors_native_table[id].resources.name = chip_name;
+ lm_sensors_native_table[id].resources.subfeat_nr = sub->number;
- /* increment the table index counter */
- id++;
- }
+ count = sub->number;
- lm_sensors_native_table[id].count = count + 1;
- free( featurelabel );
- }
+ /* increment the table index counter */
+ id++;
+ }
+
+ // lm_sensors_native_table[id].count = count + 1;
+ free( featurelabel );
+ }
}
/* Return the number of events created */
@@ -179,6 +176,7 @@ LM_SENSORS_init_substrate( )
/* Create dyanmic events table */
NUM_EVENTS = detectSensors( );
+ //printf("Found %d sensors\n",NUM_EVENTS);
if ( ( lm_sensors_native_table =
( LM_SENSORS_native_event_entry_t * )
@@ -193,7 +191,7 @@ LM_SENSORS_init_substrate( )
return EXIT_FAILURE;
}
- return ( PAPI_OK );
+ return PAPI_OK;
}
@@ -224,7 +222,8 @@ LM_SENSORS_start( hwd_context_t * ctx, h
{
( void ) ctx;
( void ) ctrl;
- return ( PAPI_OK );
+
+ return PAPI_OK;
}
@@ -235,8 +234,9 @@ int
LM_SENSORS_stop( hwd_context_t * ctx, hwd_control_state_t * ctrl )
{
( void ) ctx;
- ( void ) ctrl;
- return ( PAPI_OK );
+ ( void ) ctrl;
+
+ return PAPI_OK;
}
@@ -444,9 +444,8 @@ LM_SENSORS_ntv_code_to_bits( unsigned in
papi_vector_t _lmsensors_vector = {
.cmp_info = {
/* default component information (unspecified values are initialized to 0) */
- .name =
- "$Id: linux-lmsensors.c,v 1.6 2012/02/10 19:58:08 terpstra Exp $",
- .version = "$Revision: 1.6 $",
+ .name = "linux-lmsensors.c",
+ .version = "4.2.1",
.num_mpx_cntrs = PAPI_MPX_DEF_DEG,
.num_cntrs = LM_SENSORS_MAX_COUNTERS,
.default_domain = PAPI_DOM_USER,
@@ -489,5 +488,4 @@ papi_vector_t _lmsensors_vector = {
.ntv_enum_events = LM_SENSORS_ntv_enum_events,
.ntv_code_to_name = LM_SENSORS_ntv_code_to_name,
.ntv_code_to_bits = LM_SENSORS_ntv_code_to_bits,
- .ntv_bits_to_info = NULL,
};
diff -up papi-4.2.1/src/components/lmsensors/linux-lmsensors.h.bz papi-4.2.1/src/components/lmsensors/linux-lmsensors.h
--- papi-4.2.1/src/components/lmsensors/linux-lmsensors.h.bz 2012-02-09 10:02:53.000000000 -0500
+++ papi-4.2.1/src/components/lmsensors/linux-lmsensors.h 2012-03-09 15:57:31.393736053 -0500
@@ -4,7 +4,7 @@
/**
* @file linux-lmsensors.h
- * CVS: $Id: linux-lmsensors.h,v 1.5 2012/02/09 15:02:53 jagode Exp $
+ * CVS: $Id$
* @author Daniel Lucio
* @author Joachim Protze
* @author Heike Jagode

View File

@ -1,11 +1,12 @@
Summary: Performance Application Programming Interface
Name: papi
Version: 4.2.1
Release: 1%{?dist}
Release: 2%{?dist}
License: BSD
Group: Development/System
URL: http://icl.cs.utk.edu/papi/
Source0: http://icl.cs.utk.edu/projects/papi/downloads/%{name}-%{version}.tar.gz
Patch1: papi-bz797692.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: ncurses-devel
BuildRequires: gcc-gfortran
@ -42,6 +43,7 @@ the PAPI userspace libraries and interfaces.
%prep
%setup -q
%patch1 -p1 -b .bz
%build
cd src
@ -100,6 +102,9 @@ rm -rf $RPM_BUILD_ROOT
%{_libdir}/*.a
%changelog
* Fri Mar 9 2012 William Cohen <wcohen@redhat.com> - 4.2.1-2
- Fix overrun in lmsensor component. (rhbz797692)
* Tue Feb 14 2012 William Cohen <wcohen@redhat.com> - 4.2.1-1
- Rebase to 4.2.1.