From c98dcf56a85e4ebf806f64525821104fa4c3b812 Mon Sep 17 00:00:00 2001 From: William Cohen Date: Mar 09 2012 21:36:44 +0000 Subject: Fix overrun in lmsensor component. (rhbz797692) --- diff --git a/papi-bz797692.patch b/papi-bz797692.patch new file mode 100644 index 0000000..c908dcd --- /dev/null +++ b/papi-bz797692.patch @@ -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 diff --git a/papi.spec b/papi.spec index 7dbf466..df7395f 100644 --- a/papi.spec +++ b/papi.spec @@ -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 - 4.2.1-2 +- Fix overrun in lmsensor component. (rhbz797692) + * Tue Feb 14 2012 William Cohen - 4.2.1-1 - Rebase to 4.2.1.