summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirill Smelkov <kirr@nexedi.com>2015-06-01 18:10:00 +0300
committerDavid Gibson <david@gibson.dropbear.id.au>2015-06-02 19:58:36 +1000
commitc38e11b508e52fb2921e67d1123b05d9bef90fd2 (patch)
tree4d088cb752c6f5ff540e107dbc29fb50c0411927
parentd58e2fd2a63dfea5338a1637f9bb89500ad0406d (diff)
bitmap: Don't crash if allocation fails in bitmap_alloc0() & friends
Currently, if allocation fails, inside bitmap_alloc0(), we'll continue to use bitmap=NULL pointer and pass it to bitmap_zero() which will SIGSEGV. Cc: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Kirill Smelkov <kirr@nexedi.com> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--ccan/bitmap/bitmap.h10
1 files changed, 6 insertions, 4 deletions
diff --git a/ccan/bitmap/bitmap.h b/ccan/bitmap/bitmap.h
index 6cbf9a22..9e6c2bbc 100644
--- a/ccan/bitmap/bitmap.h
+++ b/ccan/bitmap/bitmap.h
@@ -203,7 +203,8 @@ static inline bitmap *bitmap_alloc0(unsigned long nbits)
bitmap *bitmap;
bitmap = bitmap_alloc(nbits);
- bitmap_zero(bitmap, nbits);
+ if (bitmap)
+ bitmap_zero(bitmap, nbits);
return bitmap;
}
@@ -212,7 +213,8 @@ static inline bitmap *bitmap_alloc1(unsigned long nbits)
bitmap *bitmap;
bitmap = bitmap_alloc(nbits);
- bitmap_fill(bitmap, nbits);
+ if (bitmap)
+ bitmap_fill(bitmap, nbits);
return bitmap;
}
@@ -221,7 +223,7 @@ static inline bitmap *bitmap_realloc0(bitmap *bitmap,
{
bitmap = realloc(bitmap, bitmap_sizeof(nbits));
- if (nbits > obits)
+ if ((nbits > obits) && bitmap)
bitmap_zero_range(bitmap, obits, nbits);
return bitmap;
@@ -232,7 +234,7 @@ static inline bitmap *bitmap_realloc1(bitmap *bitmap,
{
bitmap = realloc(bitmap, bitmap_sizeof(nbits));
- if (nbits > obits)
+ if ((nbits > obits) && bitmap)
bitmap_fill_range(bitmap, obits, nbits);
return bitmap;