Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
[profile] Prevent potential division by zero
Limit the profile sample count to INT_MAX to avoid both signed
overflow and a potential division by zero when updating the stored
mean value.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
  • Loading branch information
mcb30 committed Mar 18, 2018
1 parent b11ae1d commit ae93064
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/core/profile.c
Expand Up @@ -26,6 +26,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#include <stdint.h>
#include <stdio.h>
#include <strings.h>
#include <limits.h>
#include <assert.h>
#include <ipxe/isqrt.h>
#include <ipxe/profile.h>
Expand Down Expand Up @@ -122,8 +123,9 @@ void profile_update ( struct profiler *profiler, unsigned long sample ) {
*/
assert ( ( ( signed ) sample ) >= 0 );

/* Update sample count */
profiler->count++;
/* Update sample count, limiting to avoid signed overflow */
if ( profiler->count < INT_MAX )
profiler->count++;

/* Adjust mean sample value scale if necessary. Skip if
* sample is zero (in which case flsl(sample)-1 would
Expand Down

0 comments on commit ae93064

Please sign in to comment.