[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[2418] 2009-07-16 Vladimir Serbinenko <address@hidden>
From: |
Vladimir Serbinenko |
Subject: |
[2418] 2009-07-16 Vladimir Serbinenko <address@hidden> |
Date: |
Thu, 16 Jul 2009 15:36:44 +0000 |
Revision: 2418
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2418
Author: phcoder
Date: 2009-07-16 15:36:43 +0000 (Thu, 16 Jul 2009)
Log Message:
-----------
2009-07-16 Vladimir Serbinenko <address@hidden>
Fix hang and segmentation fault in grub-emu-usb
* disk/scsi.c (grub_scsi_open): return err and not grub_errno
* util/usb.c (grub_libusb_devices): likewise
(grub_libusb_init): rename to ...
(GRUB_MOD_INIT (libusb)):...this
(grub_libusb_fini): rename to ..
(GRUB_MOD_FINI (libusb)):...this
* disk/usbms.c (grub_usbms_transfer): fix retry logic
* include/grub/disk.h (grub_raid_init): removed, it's useless
(grub_raid_fini): likewise
(grub_lvm_init): likewise
(grub_lvm_fini): likewise
* util/grub-emu.c (main): don't call grub_libusb_init, it's done
by grub_init_all
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/disk/scsi.c
trunk/grub2/disk/usbms.c
trunk/grub2/include/grub/disk.h
trunk/grub2/util/grub-emu.c
trunk/grub2/util/usb.c
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2009-07-16 14:53:33 UTC (rev 2417)
+++ trunk/grub2/ChangeLog 2009-07-16 15:36:43 UTC (rev 2418)
@@ -1,5 +1,23 @@
2009-07-16 Vladimir Serbinenko <address@hidden>
+ Fix hang and segmentation fault in grub-emu-usb
+
+ * disk/scsi.c (grub_scsi_open): return err and not grub_errno
+ * util/usb.c (grub_libusb_devices): likewise
+ (grub_libusb_init): rename to ...
+ (GRUB_MOD_INIT (libusb)):...this
+ (grub_libusb_fini): rename to ..
+ (GRUB_MOD_FINI (libusb)):...this
+ * disk/usbms.c (grub_usbms_transfer): fix retry logic
+ * include/grub/disk.h (grub_raid_init): removed, it's useless
+ (grub_raid_fini): likewise
+ (grub_lvm_init): likewise
+ (grub_lvm_fini): likewise
+ * util/grub-emu.c (main): don't call grub_libusb_init, it's done
+ by grub_init_all
+
+2009-07-16 Vladimir Serbinenko <address@hidden>
+
Fix libusb
* Makefile.in (LIBUSB): new macro
Modified: trunk/grub2/disk/scsi.c
===================================================================
--- trunk/grub2/disk/scsi.c 2009-07-16 14:53:33 UTC (rev 2417)
+++ trunk/grub2/disk/scsi.c 2009-07-16 15:36:43 UTC (rev 2418)
@@ -248,6 +248,7 @@
{
if (p->open (name, scsi))
continue;
+
disk->id = (unsigned long) "scsi"; /* XXX */
disk->data = scsi;
scsi->dev = p;
@@ -266,7 +267,7 @@
{
grub_free (scsi);
grub_dprintf ("scsi", "inquiry failed\n");
- return grub_errno;
+ return err;
}
grub_dprintf ("scsi", "inquiry: devtype=0x%02x removable=%d\n",
@@ -292,7 +293,7 @@
{
grub_free (scsi);
grub_dprintf ("scsi", "READ CAPACITY failed\n");
- return grub_errno;
+ return err;
}
/* SCSI blocks can be something else than 512, although GRUB
Modified: trunk/grub2/disk/usbms.c
===================================================================
--- trunk/grub2/disk/usbms.c 2009-07-16 14:53:33 UTC (rev 2417)
+++ trunk/grub2/disk/usbms.c 2009-07-16 15:36:43 UTC (rev 2418)
@@ -222,11 +222,12 @@
struct grub_usbms_csw status;
static grub_uint32_t tag = 0;
grub_usb_err_t err = GRUB_USB_ERR_NONE;
- int retrycnt = 3;
+ int retrycnt = 3 + 1;
retry:
+ retrycnt--;
if (retrycnt == 0)
- return err;
+ return grub_error (GRUB_ERR_IO, "USB Mass Storage stalled");
/* Setup the request. */
grub_memset (&cbw, 0, sizeof (cbw));
@@ -305,9 +306,7 @@
grub_usb_clear_halt (dev->dev, dev->in->endp_addr);
grub_usb_clear_halt (dev->dev, dev->out->endp_addr);
- retrycnt--;
- if (retrycnt)
- goto retry;
+ goto retry;
}
if (status.status)
Modified: trunk/grub2/include/grub/disk.h
===================================================================
--- trunk/grub2/include/grub/disk.h 2009-07-16 14:53:33 UTC (rev 2417)
+++ trunk/grub2/include/grub/disk.h 2009-07-16 15:36:43 UTC (rev 2418)
@@ -173,11 +173,4 @@
extern grub_err_t (* EXPORT_VAR(grub_disk_ata_pass_through)) (grub_disk_t,
struct grub_disk_ata_pass_through_parms *);
-#ifdef GRUB_UTIL
-void grub_raid_init (void);
-void grub_raid_fini (void);
-void grub_lvm_init (void);
-void grub_lvm_fini (void);
-#endif
-
#endif /* ! GRUB_DISK_HEADER */
Modified: trunk/grub2/util/grub-emu.c
===================================================================
--- trunk/grub2/util/grub-emu.c 2009-07-16 14:53:33 UTC (rev 2417)
+++ trunk/grub2/util/grub-emu.c 2009-07-16 15:36:43 UTC (rev 2418)
@@ -208,10 +208,6 @@
/* XXX: This is a bit unportable. */
grub_util_biosdisk_init (dev_map);
-#if HAVE_USB_H
- grub_libusb_init ();
-#endif
-
grub_init_all ();
/* Make sure that there is a root device. */
Modified: trunk/grub2/util/usb.c
===================================================================
--- trunk/grub2/util/usb.c 2009-07-16 14:53:33 UTC (rev 2417)
+++ trunk/grub2/util/usb.c 2009-07-16 15:36:43 UTC (rev 2418)
@@ -51,6 +51,7 @@
for (usbdev = bus->devices; usbdev; usbdev = usbdev->next)
{
struct usb_device_descriptor *desc = &usbdev->descriptor;
+ grub_err_t err;
if (! desc->bcdUSB)
continue;
@@ -62,7 +63,12 @@
dev->data = usbdev;
/* Fill in all descriptors. */
- grub_usb_device_initialize (dev);
+ err = grub_usb_device_initialize (dev);
+ if (err)
+ {
+ grub_errno = GRUB_ERR_NONE;
+ continue;
+ }
/* Register the device. */
grub_usb_devs[last++] = dev;
@@ -72,27 +78,6 @@
return GRUB_USB_ERR_NONE;
}
-grub_err_t
-grub_libusb_init (void)
-{
- usb_init();
- usb_find_busses();
- usb_find_devices();
-
- if (grub_libusb_devices ())
- return grub_errno;
-
- grub_usb_controller_dev_register (&usb_controller);
-
- return 0;
-}
-
-grub_err_t
-grub_libusb_fini (void)
-{
- return 0;
-}
-
int
grub_usb_iterate (int (*hook) (grub_usb_device_t dev))
@@ -189,3 +174,22 @@
usb_close (devh);
return GRUB_USB_ERR_STALL;
}
+
+GRUB_MOD_INIT (libusb)
+{
+ usb_init();
+ usb_find_busses();
+ usb_find_devices();
+
+ if (grub_libusb_devices ())
+ return;
+
+ grub_usb_controller_dev_register (&usb_controller);
+
+ return;
+}
+
+GRUB_MOD_FINI (libusb)
+{
+ return;
+}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [2418] 2009-07-16 Vladimir Serbinenko <address@hidden>,
Vladimir Serbinenko <=