svn commit: r217538 - in head/sys/dev: buslogic cs

Bruce Evans brde at optusnet.com.au
Tue Jan 18 17:00:48 UTC 2011


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


More information about the svn-src-head mailing list