looks good for merge

regards
-steve

On Mon, 2009-04-06 at 12:49 +0200, Jim Meyering wrote:
> Here's a complete and relatively non-invasive change.
> In addition to the API changes, it avoids a low-memory NULL deref.
> 
> From 1dfcfbbb82697254fca47b82d114ef0dd98a23c2 Mon Sep 17 00:00:00 2001
> From: Jim Meyering <[email protected]>
> Date: Mon, 6 Apr 2009 12:46:52 +0200
> Subject: [PATCH] logsys.h (logsys_format_set): Change return type, adjust 
> param type.
> 
> * include/corosync/engine/logsys.h:
> * exec/logsys.c (logsys_format_set): Return -1 upon strdup failure.
> Change type of param to "const char *".
> * exec/logsys.c (logsys_init): Adjust use.
> * exec/mainconfig.c (corosync_main_config_read_logging): Adjust uses.
> ---
>  exec/logsys.c                    |    9 +++++++--
>  exec/mainconfig.c                |   17 +++++++++++------
>  include/corosync/engine/logsys.h |    6 +++---
>  3 files changed, 21 insertions(+), 11 deletions(-)
> 
> diff --git a/exec/logsys.c b/exec/logsys.c
> index f122ff2..1b83fa7 100644
> --- a/exec/logsys.c
> +++ b/exec/logsys.c
> @@ -916,7 +916,7 @@ int logsys_config_file_set (const char **error_string, 
> const char *file)
>       return (0);
>  }
> 
> -void logsys_format_set (char *format)
> +int logsys_format_set (const char *format)
>  {
>       pthread_mutex_lock (&logsys_config_mutex);
> 
> @@ -930,8 +930,12 @@ void logsys_format_set (char *format)
>       } else {
>               format_buffer = strdup("[%6s] %b");
>       }
> +     if (format_buffer == NULL) {
> +             return -1;
> +     }
> 
>       pthread_mutex_unlock (&logsys_config_mutex);
> +     return 0;
>  }
> 
>  char *logsys_format_get (void)
> @@ -1137,7 +1141,8 @@ int logsys_init (
>       logsys_config_mode_set (mode);
>       logsys_config_facility_set (name, facility);
>       logsys_config_file_set (&errstr, file);
> -     logsys_format_set (format);
> +     if (logsys_format_set (format))
> +             return -1;
>       _logsys_rec_init (rec_size);
>       _logsys_wthread_create ();
>       return (0);
> diff --git a/exec/mainconfig.c b/exec/mainconfig.c
> index b8dc0d5..7dc7a28 100644
> --- a/exec/mainconfig.c
> +++ b/exec/mainconfig.c
> @@ -195,6 +195,7 @@ int corosync_main_config_read_logging (
>       hdb_handle_t object_find_handle;
>       hdb_handle_t object_find_logsys_handle;
>       char new_format_buffer[PATH_MAX];
> +     int err = 0;
> 
>       objdb->object_find_create (
>               OBJECT_PARENT_HANDLE,
> @@ -236,12 +237,12 @@ int corosync_main_config_read_logging (
>                               if (!insert_into_buffer(new_format_buffer,
>                                               sizeof(new_format_buffer),
>                                               " %f:%l", "s]")) {
> -                                     logsys_format_set(new_format_buffer);
> +                                     err = 
> logsys_format_set(new_format_buffer);
>                               } else
>                               if (!insert_into_buffer(new_format_buffer,
>                                               sizeof(new_format_buffer),
>                                               "%f:%l", NULL)) {
> -                                     logsys_format_set(new_format_buffer);
> +                                     err = 
> logsys_format_set(new_format_buffer);
>                               }
>                       } else
>                       if (strcmp (value, "off") == 0) {
> @@ -255,12 +256,12 @@ int corosync_main_config_read_logging (
>                               if (!insert_into_buffer(new_format_buffer,
>                                               sizeof(new_format_buffer),
>                                               "%n:", "f:")) {
> -                                     logsys_format_set(new_format_buffer);
> +                                     err = 
> logsys_format_set(new_format_buffer);
>                               } else
>                               if (!insert_into_buffer(new_format_buffer,
>                                               sizeof(new_format_buffer),
>                                               " %n", "s]")) {
> -                                     logsys_format_set(new_format_buffer);
> +                                     err = 
> logsys_format_set(new_format_buffer);
>                               }
>                       } else
>                       if (strcmp (value, "off") == 0) {
> @@ -274,7 +275,7 @@ int corosync_main_config_read_logging (
>                               if(!insert_into_buffer(new_format_buffer,
>                                               sizeof(new_format_buffer),
>                                               "%t ", NULL)) {
> -                                     logsys_format_set(new_format_buffer);
> +                                     err = 
> logsys_format_set(new_format_buffer);
>                               }
>                       } else
>                       if (strcmp (value, "off") == 0) {
> @@ -283,6 +284,10 @@ int corosync_main_config_read_logging (
>                               goto parse_error;
>                       }
>               }
> +             if (err) {
> +                     error_reason = "exhausted virtual memory";
> +                     goto parse_error;
> +             }
> 
>               /* free old string on reload */
>               if (main_config->logfile) {
> @@ -365,7 +370,7 @@ int corosync_main_config_read_logging (
>                               logsys_logger.subsys,
>                               logsys_logger.tags,
>                               logsys_logger.priority);
> -                     
> +
>               }
>               objdb->object_find_destroy (object_find_logsys_handle);
>       }
> diff --git a/include/corosync/engine/logsys.h 
> b/include/corosync/engine/logsys.h
> index 25fc59b..36e30e4 100644
> --- a/include/corosync/engine/logsys.h
> +++ b/include/corosync/engine/logsys.h
> @@ -94,8 +94,8 @@ extern void logsys_config_facility_set (
>       const char *name,
>       unsigned int facility);
> 
> -extern void logsys_format_set (
> -     char *format);
> +extern int logsys_format_set (
> +     const char *format);
> 
>  extern char *logsys_format_get (void);
> 
> @@ -182,7 +182,7 @@ __attribute__ ((constructor)) static void 
> logsys_system_init (void)       \
>       logsys_config_mode_set (mode);                                  \
>       logsys_config_file_set (&error_string, (file));                 \
>       logsys_config_facility_set (name, (facility));                  \
> -     logsys_format_set (format);                                     \
> +     logsys_format_set (format); /* FIXME: assert success? */        \
>       _logsys_rec_init (rec_size);                                    \
>       _logsys_wthread_create();                                       \
>  }

_______________________________________________
Openais mailing list
[email protected]
https://lists.linux-foundation.org/mailman/listinfo/openais

Reply via email to