fio: fix smalloc strdop allocation failure
authorChristian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
Tue, 3 Mar 2015 11:44:46 +0000 (12:44 +0100)
committerJens Axboe <axboe@fb.com>
Tue, 3 Mar 2015 22:00:55 +0000 (15:00 -0700)
smalloc_strdup didn't check for allocation success and thereby ran into
segfaults if the single pool went out of memory.
Now with this patch applied it is still failing, but in a more consistent
way than segfaulting.

You still get a bad allocation, but it looks like this now:
  fio: smalloc OOM
  fio: filesetup.c:1495: dup_files: Assertion `0' failed.
  Aborted

In fact the upper layers expected smalloc_strdup to retrun NULL on failure.

Signed-off-by: Christian Ehrhardt <ehrhardt@linux.vnet.ibm.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
smalloc.c

index 67cb7cc11d475b81aef3d53a7eb896eee31504bb..66f9ec0dd5c101dc216956fa74c9f6e959ed9a99 100644 (file)
--- a/smalloc.c
+++ b/smalloc.c
@@ -492,9 +492,10 @@ void *scalloc(size_t nmemb, size_t size)
 
 char *smalloc_strdup(const char *str)
 {
-       char *ptr;
+       char *ptr = NULL;
 
        ptr = smalloc(strlen(str) + 1);
-       strcpy(ptr, str);
+       if (ptr)
+               strcpy(ptr, str);
        return ptr;
 }