On Tue, 18 Jan 2011, John Baldwin wrote:

Log:
 Remove some always-true comparisons.

 Submitted by:  clang via rdivacky

Modified: head/sys/dev/buslogic/bt.c
==============================================================================
--- head/sys/dev/buslogic/bt.c  Tue Jan 18 14:58:44 2011        (r217537)
+++ head/sys/dev/buslogic/bt.c  Tue Jan 18 15:23:16 2011        (r217538)
@@ -975,7 +975,7 @@ bt_find_probe_range(int ioport, int *por
int
bt_iop_from_bio(isa_compat_io_t bio_index)
{
-       if (bio_index >= 0 && bio_index < BT_NUM_ISAPORTS)
+       if (bio_index < BT_NUM_ISAPORTS)
                return (bt_board_ports[bio_index]);
        return (-1);
}

So, what guarantees that isa_compat_io_t is unsigned and will remain so?
Indexes should be ints, unless you want a sign morass.

Modified: head/sys/dev/cs/if_cs.c
==============================================================================
--- head/sys/dev/cs/if_cs.c     Tue Jan 18 14:58:44 2011        (r217537)
+++ head/sys/dev/cs/if_cs.c     Tue Jan 18 15:23:16 2011        (r217538)
@@ -364,7 +364,7 @@ cs_cs89x0_probe(device_t dev)

        if (!error && !(sc->flags & CS_NO_IRQ)) {
                if (chip_type == CS8900) {
-                       if (irq >= 0 || irq < 16)
+                       if (irq < 16)
                                irq = cs8900_irq2eeint[irq];
                        else
                                irq = 255;


Here `irq' is declared locally as u_long, so it can easily seen to be
unsigned.  u_long is bogus, but is unfortunately required by
bus_get_resource()' API to fetch the initial value of `irq'.  The irq
is only checked to be in range and even bus_get_resource()'s return value
are not checked until long after the call.

Bruce
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to