diff --git a/smartmontools/os_freebsd.cpp b/smartmontools/os_freebsd.cpp
index cc6a42a31c4807b770423f25d8462c698917e821..fbabb2e7e5932c35193137ee08b489f79a28fa47 100644
--- a/smartmontools/os_freebsd.cpp
+++ b/smartmontools/os_freebsd.cpp
@@ -1708,7 +1708,7 @@ scsi_device * freebsd_smart_interface::get_scsi_device(const char * name, const
 }
 
 static int 
-cam_get_umassno(char * devname) {
+cam_get_umassno(const char * devname) {
   struct cam_device *cam_dev;
   union ccb ccb;
   int bus=-1;
@@ -2176,14 +2176,12 @@ static int usbdevlist(int busno,unsigned short & vendor_id,
 static bool get_usb_id(const char * path, unsigned short & vendor_id,
   unsigned short & product_id, unsigned short & version)
 {
-  if (strlen(path) < 5)
-    return false;
-  int bus = cam_get_umassno((char *)path+5);
+  int bus = cam_get_umassno(path);
+
   if (bus == -1) 
     return false;
-
-  usbdevlist(bus,vendor_id,
-    product_id, version);
+  // getting product/vendor for the device on bus
+  usbdevlist(bus,vendor_id, product_id, version);
   return true;
 }