apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Konstantin Sharenkov" <Konstantin.Sharen...@enterra-inc.com>
Subject Memory allocation checks. Veri big impact to stablility
Date Fri, 24 Mar 2006 04:58:21 GMT
Hello.

 

If I understand everything correctly the function apr_palloc and
apr_pcalloc can return NULL as result if there is no more memory
available.

These functions are widely being used within library but a lot of times
result of these functions not being checked 

 

like

If( *result*==NULL )

            return APR_ENOMEM.

 

 

It impacts to stability of software used apr, apr-pool under stress
load. Or withrestricted memory

 

Can you fix these cases in your libraries?

I think it is very important!!!!

 

I have made review some of cases

 

apr\atomic\unix\apr_atomic.c

 

   hash_mutex = apr_palloc(p, sizeof(apr_thread_mutex_t*) *
NUM_ATOMIC_HASH);

 

   for (i = 0; i < NUM_ATOMIC_HASH; i++) {

       rv = apr_thread_mutex_create(&(hash_mutex[i]),

                                    APR_THREAD_MUTEX_DEFAULT, p);

       if (rv != APR_SUCCESS) {

          return rv;

       }

   }

 

apr\file_io\os2\filedup.c

 

    *new_file = (apr_file_t *)apr_palloc(p, sizeof(apr_file_t));

    memcpy(*new_file, old_file, sizeof(apr_file_t));

    (*new_file)->pool = p;

 

 

        (*new_file)->buffer = apr_palloc(p, old_file->bufsize);

        (*new_file)->bufsize = old_file->bufsize;

 

apr\file_io\os2\open.c

 

    apr_file_t *dafile = (apr_file_t *)apr_palloc(pool,
sizeof(apr_file_t));

 

    dafile->pool = pool;

    dafile->isopen = FALSE;

 

 

    (*file) = apr_palloc(pool, sizeof(apr_file_t));

    (*file)->pool = pool;

    (*file)->filedes = *dafile;

 

 

        (*file)->buffer = apr_palloc(pool, APR_FILE_DEFAULT_BUFSIZE);

        (*file)->bufsize = APR_FILE_DEFAULT_BUFSIZE;

        rv = apr_thread_mutex_create(&(*file)->mutex, 0, pool);

 

apr\file_io\os2\pipe.c

 

 

    (*in) = (apr_file_t *)apr_palloc(pool, sizeof(apr_file_t));

    rc = DosCreateEventSem(NULL, &(*in)->pipeSem, DC_SEM_SHARED, FALSE);

 

 

    (*out) = (apr_file_t *)apr_palloc(pool, sizeof(apr_file_t));

    (*out)->pool = pool;

    (*out)->filedes = filedes[1];

 

 

apr\file_io\unix\dir.c

 

    (*new) = (apr_dir_t *)apr_palloc(pool, sizeof(apr_dir_t));

 

    (*new)->pool = pool;

 

 

..following only list of affected files

 

apr\file_io\unix\filedup.c

apr\file_io\unix\filepath.c

apr\file_io\unix\filepath_util.c

apr\file_io\unix\open.c

apr\file_io\win32\dir.c

apr\file_io\win32\filedup.c

apr\file_io\win32\filepath.c

apr\file_io\win32\open.c

apr\locks\os2\proc_mutex.c

apr\locks\os2\thread_mutex.c

apr\locks\os2\thread_rwlock.c

apr\locks\unix\global_mutex.c

apr\locks\unix\proc_mutex.c

apr\locks\unix\thread_cond.c

apr\locks\unix\thread_rwlock.c

apr\locks\win32\proc_mutex.c

apr\locks\win32\thread_cond.c

apr\locks\win32\thread_rwlock.c

apr\memory\unix\apr_pools.c

 

apr_pcallock affected!!!!!!!

APR_DECLARE(void *) apr_pcalloc(apr_pool_t *pool, apr_size_t size)

{

    void *mem;

 

    size = APR_ALIGN_DEFAULT(size);

    if ((mem = apr_palloc(pool, size)) != NULL) {

        memset(mem, 0, size); // ! there

    }

 

    return mem;

}

 

apr\misc\unix\env.c

 

...

Most all files !!! whre apr_palloc used!!!

 

 

With best regards 

Konstantin Sharenkov.

 

 

 


Mime
View raw message