[Bug 285922] recoverdisk(1) Floating point exception

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 06 Apr 2025 19:27:04 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=285922

            Bug ID: 285922
           Summary: recoverdisk(1) Floating point exception
           Product: Base System
           Version: CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: bin
          Assignee: bugs@FreeBSD.org
          Reporter: kwhite.uottawa@gmail.com

I get a "Floating point exception" when running recoverdisk(1) on a disk that
does not have a stripesize.  e.g.:

# recoverdisk /dev/da0
Floating point exception

# diskinfo -v /dev/da0
/dev/da0
        512             # sectorsize
        62914560000     # mediasize in bytes (59G)
        122880000       # mediasize in sectors
        0               # stripesize
        0               # stripeoffset
        7648            # Cylinders according to firmware.
        255             # Heads according to firmware.
        63              # Sectors according to firmware.
        Generic Flash Disk      # Disk descr.
        16D4D655        # Disk ident.
        umass-sim0      # Attachment
        No              # TRIM/UNMAP support
        Unknown         # Rotation rate in RPM
        Not_Zoned       # Zone Mode

Possible fix, check that stripesize is greater than zero before using it as
sectorsize:

# git -C /usr/src diff sbin/recoverdisk
diff --git a/sbin/recoverdisk/recoverdisk.c b/sbin/recoverdisk/recoverdisk.c
index 446266c36d50..4b106d571f2d 100644
--- a/sbin/recoverdisk/recoverdisk.c
+++ b/sbin/recoverdisk/recoverdisk.c
@@ -482,7 +482,7 @@ main(int argc, char * const argv[])
                        err(1, "DIOCGSECTORSIZE failed");

                error = ioctl(fdr, DIOCGSTRIPESIZE, &stripesize);
-               if (error == 0 && stripesize < sectorsize)
+               if (error == 0 && stripesize > 0 && stripesize < sectorsize)
                        sectorsize = stripesize;

                minsize = sectorsize;

-- 
You are receiving this mail because:
You are the assignee for the bug.