summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSamuel Thibault <samuel.thibault@ens-lyon.org>2025-07-02 00:13:17 +0200
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2025-07-02 00:13:17 +0200
commit21ca63a9ea91d929a00217fc9496ee89ff89114a (patch)
tree2a53291b84ad2c9c2f99a753935215fc415ec555
parentd9bc703f2aa6345bd409e1b333cbfc20644c3e3b (diff)
rumpusbdisk: Protect against a running rumpusbdisk.static
-rw-r--r--rumpdisk/block-rump.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/rumpdisk/block-rump.c b/rumpdisk/block-rump.c
index 5a943dcb..d2fc0f1c 100644
--- a/rumpdisk/block-rump.c
+++ b/rumpdisk/block-rump.c
@@ -156,11 +156,11 @@ rumpdisk_device_init (void)
{
mach_port_t device_master;
-#ifdef _RUMP_SATA
if (! get_privileged_ports (&master_host, &device_master))
{
device_t device;
+#ifdef _RUMP_SATA
#if 0
if (! device_open (device_master, D_READ, "hd0", &device)
|| ! device_open (device_master, D_READ, "hd1", &device)
@@ -189,10 +189,25 @@ rumpdisk_device_init (void)
disabled = 1;
return;
}
+#else
+
+ if (! device_open (device_master, D_READ, "ud0", &device)
+ || ! device_open (device_master, D_READ, "ud1", &device)
+ || ! device_open (device_master, D_READ, "ud2", &device)
+ || ! device_open (device_master, D_READ, "ud3", &device))
+ {
+ device_close (device);
+ mach_port_deallocate (mach_task_self (), device);
+ mach_port_deallocate (mach_task_self (), device_master);
+ fprintf(stderr, "Kernel is already driving a USB device, skipping probing " RUMP_TYPE_STRING " disks\n");
+ fflush(stderr);
+ disabled = 1;
+ return;
+ }
+#endif
mach_port_deallocate (mach_task_self (), device_master);
}
-#endif
rump_init ();
}