Browse Source

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>
Kirill Smelkov 10 years ago
parent
commit
c38e11b508
1 changed files with 6 additions and 4 deletions
  1. 6 4
      ccan/bitmap/bitmap.h

+ 6 - 4
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;