In drivers/net/ethernet/adaptec/starfire.c at line 653, ioaddr is declared as a (signed) long. This should instead be declared as an unsigned long, as memory addresses cannot really be negative. This allows ioremap() to correctly remap the address in a >32 bit context.
Impact: Adaptec ethernet hardware utilizing the starfire driver fails to initialize with 4.x series kernels and 3.x pae kernels.
Steps to reproduce:
Attempt to load current starfire module on a system with this hardware installed:
modprobe -v starfire
Actual Results:
Output from dmesg when loading current starfire module on system with this hardware equipped:
[ 1109.362648] ioremap: invalid physical address fffffffffe480000
[ 1109.362657] starfire 0000:08:04.0: cannot Remap 0x80000 @ 0xfe480000, aborting
Proposed patch:
Modify line 653 to declare ioaddr as an unsigned long int.
653 unsigned long ioaddr;
Expected Results:
Output from dmesg when loading modified starfire module on system with this hardware equipped:
[ 1237.456827] eth2: Adaptec Starfire 6915 at f8a00000, 00:00:d1:ef:f6:d1, IRQ 25.
[ 1237.488583] starfire 0000:08:04.0 eth23: renamed from eth2
[ 1237.655434] eth23: MII PHY found at address 1, status 0x7809 advertising 0x01e1.
[ 1237.655441] eth23: scatter-gather and hardware TCP cksumming enabled.
In drivers/ net/ethernet/ adaptec/ starfire. c at line 653, ioaddr is declared as a (signed) long. This should instead be declared as an unsigned long, as memory addresses cannot really be negative. This allows ioremap() to correctly remap the address in a >32 bit context.
See additional bug details in https:/ /bugs.launchpad .net/ubuntu/ +source/ linux/+ bug/1717259
Impact: Adaptec ethernet hardware utilizing the starfire driver fails to initialize with 4.x series kernels and 3.x pae kernels.
Steps to reproduce:
Attempt to load current starfire module on a system with this hardware installed:
modprobe -v starfire
Actual Results:
Output from dmesg when loading current starfire module on system with this hardware equipped:
[ 1109.362648] ioremap: invalid physical address fffffffffe480000
[ 1109.362657] starfire 0000:08:04.0: cannot Remap 0x80000 @ 0xfe480000, aborting
Proposed patch:
Modify line 653 to declare ioaddr as an unsigned long int.
653 unsigned long ioaddr;
Expected Results:
Output from dmesg when loading modified starfire module on system with this hardware equipped:
[ 1237.456827] eth2: Adaptec Starfire 6915 at f8a00000, 00:00:d1:ef:f6:d1, IRQ 25.
[ 1237.488583] starfire 0000:08:04.0 eth23: renamed from eth2
[ 1237.655434] eth23: MII PHY found at address 1, status 0x7809 advertising 0x01e1.
[ 1237.655441] eth23: scatter-gather and hardware TCP cksumming enabled.