ubd_kern.c:do_io() may access uninitialized memory and divide requests
into smaller chunks than necessary.  Found with Valgrind.

Signed-off-by: Steve VanDeBogart <[EMAIL PROTECTED]>
---

Index: linux-2.6.27-rc5/arch/um/drivers/ubd_kern.c
===================================================================
--- linux-2.6.27-rc5.orig/arch/um/drivers/ubd_kern.c    2008-08-29 
15:50:19.000000000 -0700
+++ linux-2.6.27-rc5/arch/um/drivers/ubd_kern.c 2008-08-29 15:51:48.000000000 
-0700
@@ -1218,8 +1218,7 @@
        struct ubd *ubd_dev = disk->private_data;

        io_req->req = req;
-       io_req->fds[0] = (ubd_dev->cow.file != NULL) ? ubd_dev->cow.fd :
-               ubd_dev->fd;
+       io_req->fds[0] = (ubd_dev->cow.file == NULL) ? -1 : ubd_dev->cow.fd;
        io_req->fds[1] = ubd_dev->fd;
        io_req->cow_offset = -1;
        io_req->offset = offset;
@@ -1374,12 +1373,18 @@
        nsectors = req->length / req->sectorsize;
        start = 0;
        do {
-               bit = ubd_test_bit(start, (unsigned char *) &req->sector_mask);
-               end = start;
-               while((end < nsectors) &&
-                     (ubd_test_bit(end, (unsigned char *)
-                                   &req->sector_mask) == bit))
-                       end++;
+               if (req->fds[0] == -1) {
+                       bit = 1;
+                       end = nsectors;
+               } else {
+                       bit = ubd_test_bit(start,
+                                       (unsigned char *) &req->sector_mask);
+                       end = start;
+                       while ((end < nsectors) &&
+                                       (ubd_test_bit(end, (unsigned char *)
+                                                 &req->sector_mask) == bit))
+                               end++;
+               }

                off = req->offset + req->offsets[bit] +
                        start * req->sectorsize;

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to