ACK: [PATCH] lib: fwts_klog: fix vector size and handle errors from pcre_exec (LP: #1461520)

Alex Hung alex.hung at canonical.com
Mon Jun 8 02:57:07 UTC 2015


On 06/05/2015 12:18 AM, Colin King wrote:
> From: Colin Ian King <colin.king at canonical.com>
> 
> On an 32 bit x86 platform another stack smashing bug occurs where
> pcre_exec scribbles over the stack because the vector being passed
> to pcre_exec is not a multiple of 3 in size (as the API requires).
> 
> Make the vector overly large multiple of 3 to fix this. This is the same
> fix as in an earlier bug (LP: #1401184), however, I failed to fix all
> the occurrances of the original bug, hence we got bitten again by this.
> 
> Also, move the define for VECTOR_SIZE to the top of the source just to
> be a bit tidier.
> 
> Signed-off-by: Colin Ian King <colin.king at canonical.com>
> ---
>  src/lib/src/fwts_klog.c | 8 +++-----
>  1 file changed, 3 insertions(+), 5 deletions(-)
> 
> diff --git a/src/lib/src/fwts_klog.c b/src/lib/src/fwts_klog.c
> index 0d6358b..9c51b32 100644
> --- a/src/lib/src/fwts_klog.c
> +++ b/src/lib/src/fwts_klog.c
> @@ -34,6 +34,7 @@
>   *  klog pattern matching strings data file, data stored in json format
>   */
>  #define KLOG_DATA_JSON_FILE		"klog.json"
> +#define VECTOR_SIZE			(3)	/* Must be a multiple of 3 */
>  
>  /*
>   *  fwts_klog_free()
> @@ -260,8 +261,6 @@ static char *fwts_klog_unique_label(const char *str)
>  	return buffer;
>  }
>  
> -#define VECTOR_SIZE	(3)	/* Must be a multiple of 3 */
> -
>  void fwts_klog_scan_patterns(fwts_framework *fw,
>  	char *line,
>  	int  repeated,
> @@ -553,13 +552,12 @@ static void fwts_klog_regex_find_callback(fwts_framework *fw, char *line, int re
>  	re = pcre_compile(pattern, 0, &error, &erroffset, NULL);
>  	if (re != NULL) {
>  		int rc;
> -		int vector[1];
> +		int vector[VECTOR_SIZE];
>  		pcre_extra *extra = pcre_study(re, 0, &error);
>  
>  		if (error)
>  			return;
> -
> -		rc = pcre_exec(re, extra, line, strlen(line), 0, 0, vector, 1);
> +		rc = pcre_exec(re, extra, line, strlen(line), 0, 0, vector, VECTOR_SIZE);
>  		free(extra);
>  		pcre_free(re);
>  		if (rc == 0)
> 
Acked-by: Alex Hung <alex.hung at canonical.com>



More information about the fwts-devel mailing list