Skip to contentSkip to conversation

blkback: don't call vbd_size() if bd_disk is NULL

PATCH In review Laszlo Ersek 3 participants 3 messages May 25, 2011 Xen hypervisor interface

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 blkback: don't call vbd_size() if bd_disk is NULL

...because vbd_size() dereferences bd_disk if bd_part is NULL.

---
 drivers/xen/blkback/vbd.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/xen/blkback/vbd.c +2 -1
diff -r 415a9b435fef drivers/xen/blkback/vbd.c
@@ -73,7 +73,6 @@ int vbd_create(blkif_t *blkif, blkif_vde
 	}
 
 	vbd->bdev = bdev;
-	vbd->size = vbd_size(vbd);
 
 	if (vbd->bdev->bd_disk == NULL) {
 		DPRINTK("vbd_creat: device %08x doesn't exist.\n",
@@ -82,6 +81,8 @@ int vbd_create(blkif_t *blkif, blkif_vde
 		return -ENOENT;
 	}
 
+	vbd->size = vbd_size(vbd);
+
 	if (vbd->bdev->bd_disk->flags & GENHD_FL_CD || cdrom)
 		vbd->type |= VDISK_CDROM;
 	if (vbd->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)
Acked-by on v1 1/1
#1 lore raw
Quoted 4 lines
Quoted 1 line
Quoted 1 line · Laszlo Ersek

...because vbd_size() dereferences bd_disk if bd_part is NULL.

Quoted 29 lines
---
  drivers/xen/blkback/vbd.c |    3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff -r 415a9b435fef drivers/xen/blkback/vbd.c

drivers/xen/blkback/vbd.c +2 -1
@@ -73,7 +73,6 @@ int vbd_create(blkif_t *blkif, blkif_vde
  	}
 
  	vbd->bdev = bdev;
-	vbd->size = vbd_size(vbd);
 
  	if (vbd->bdev->bd_disk == NULL) {
  		DPRINTK("vbd_creat: device %08x doesn't exist.\n",
@@ -82,6 +81,8 @@ int vbd_create(blkif_t *blkif, blkif_vde
  		return -ENOENT;
  	}
 
+	vbd->size = vbd_size(vbd);
+
  	if (vbd->bdev->bd_disk->flags & GENHD_FL_CD || cdrom)
  		vbd->type |= VDISK_CDROM;
  	if (vbd->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel

#2 lore raw
Quoted 2 lines · Jan Beulich
Quoted 2 lines
Quoted 1 line
Quoted 1 line · Laszlo Ersek

...because vbd_size() dereferences bd_disk if bd_part is NULL.

Which would imply that doing this on disk without any partitions would crash.

Weird, I don't seem to get that problem on a disk without any partitions (just a raw disk). Or does the kernel actually set the bd_part to something even if it does not have any partitions?

Quoted 42 lines
Quoted 2 lines
Quoted 25 lines
---
  drivers/xen/blkback/vbd.c |    3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)

diff -r 415a9b435fef drivers/xen/blkback/vbd.c

drivers/xen/blkback/vbd.c +2 -1
@@ -73,7 +73,6 @@ int vbd_create(blkif_t *blkif, blkif_vde
  	}
 
  	vbd->bdev = bdev;
-	vbd->size = vbd_size(vbd);
 
  	if (vbd->bdev->bd_disk == NULL) {
  		DPRINTK("vbd_creat: device %08x doesn't exist.\n",
@@ -82,6 +81,8 @@ int vbd_create(blkif_t *blkif, blkif_vde
  		return -ENOENT;
  	}
 
+	vbd->size = vbd_size(vbd);
+
  	if (vbd->bdev->bd_disk->flags & GENHD_FL_CD || cdrom)
  		vbd->type |= VDISK_CDROM;
  	if (vbd->bdev->bd_disk->flags & GENHD_FL_REMOVABLE)
Quoted 4 lines

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel

_______________________________________________
Xen-devel mailing list
[email protected]
http://lists.xensource.com/xen-devel