Fix sparse warnings and get rid of casts that hide misuse of __user pointers. There were two real bugs here: * ioctl was copying uninitialized stack om NETXEN_NIC_NAME * ioctl was dereferencing a user pointer in nettxen_nic_cmd_clear_stats.
IMHO the ioctl usage in this driver is going to be more maintenance burden than useful. and should be removed. Signed-off-by: Stephen Hemminger <[EMAIL PROTECTED]> --- drivers/net/netxen/netxen_nic.h | 5 + drivers/net/netxen/netxen_nic_hdr.h | 128 +++++++++++++++++---------------- drivers/net/netxen/netxen_nic_init.c | 38 +++++----- drivers/net/netxen/netxen_nic_ioctl.h | 2 - drivers/net/netxen/netxen_nic_main.c | 34 +++------ 5 files changed, 99 insertions(+), 108 deletions(-) diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h index d925053..f66ebe3 100644 --- a/drivers/net/netxen/netxen_nic.h +++ b/drivers/net/netxen/netxen_nic.h @@ -916,9 +916,8 @@ void netxen_tso_check(struct netxen_adap struct cmd_desc_type0 *desc, struct sk_buff *skb); int netxen_nic_hw_resources(struct netxen_adapter *adapter); void netxen_nic_clear_stats(struct netxen_adapter *adapter); -int -netxen_nic_do_ioctl(struct netxen_adapter *adapter, void *u_data, - struct netxen_port *port); +int netxen_nic_do_ioctl(struct netxen_adapter *adapter, void __user *u_data, + struct netxen_port *port); int netxen_nic_rx_has_work(struct netxen_adapter *adapter); int netxen_nic_tx_has_work(struct netxen_adapter *adapter); void netxen_watchdog_task(unsigned long v); diff --git a/drivers/net/netxen/netxen_nic_hdr.h b/drivers/net/netxen/netxen_nic_hdr.h index 72c6ec4..2461afc 100644 --- a/drivers/net/netxen/netxen_nic_hdr.h +++ b/drivers/net/netxen/netxen_nic_hdr.h @@ -228,139 +228,139 @@ enum { /* This field defines CRB adr [31:20] of the agents */ #define NETXEN_HW_CRB_HUB_AGT_ADR_MN \ - ((NETXEN_HW_H0_CH_HUB_ADR << 7) | NETXEN_HW_MN_CRB_AGT_ADR) + (((u32)NETXEN_HW_H0_CH_HUB_ADR << 7) | NETXEN_HW_MN_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PH \ - ((NETXEN_HW_H0_CH_HUB_ADR << 7) | NETXEN_HW_PH_CRB_AGT_ADR) + (((u32)NETXEN_HW_H0_CH_HUB_ADR << 7) | NETXEN_HW_PH_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_MS \ - ((NETXEN_HW_H0_CH_HUB_ADR << 7) | NETXEN_HW_MS_CRB_AGT_ADR) + (((u32)NETXEN_HW_H0_CH_HUB_ADR << 7) | NETXEN_HW_MS_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PS \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_PS_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_PS_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SS \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SS_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SS_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX3 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX3_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX3_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_QMS \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_QMS_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_QMS_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQS0 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQS1 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQS2 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS2_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS2_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQS3 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS3_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SQGS3_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_C2C0 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_C2C0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_C2C0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_C2C1 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_C2C1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_C2C1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX2 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX2_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX2_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX4 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX4_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX4_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX7 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX7_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX7_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX9 \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX9_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_RPMX9_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SMB \ - ((NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SMB_CRB_AGT_ADR) + (((u32)NETXEN_HW_H1_CH_HUB_ADR << 7) | NETXEN_HW_SMB_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_NIU \ - ((NETXEN_HW_H2_CH_HUB_ADR << 7) | NETXEN_HW_NIU_CRB_AGT_ADR) + (((u32)NETXEN_HW_H2_CH_HUB_ADR << 7) | NETXEN_HW_NIU_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_I2C0 \ - ((NETXEN_HW_H2_CH_HUB_ADR << 7) | NETXEN_HW_I2C0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H2_CH_HUB_ADR << 7) | NETXEN_HW_I2C0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_I2C1 \ - ((NETXEN_HW_H2_CH_HUB_ADR << 7) | NETXEN_HW_I2C1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H2_CH_HUB_ADR << 7) | NETXEN_HW_I2C1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SRE \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SRE_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SRE_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_EG \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_EG_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_EG_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX0 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_QMN \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_QM_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_QM_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQN0 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQN1 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQN2 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG2_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG2_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SQN3 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG3_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_SQG3_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX1 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX5 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX5_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX5_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX6 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX6_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX6_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_RPMX8 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX8_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_RPMX8_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_CAS0 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_CAS1 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_CAS2 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS2_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS2_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_CAS3 \ - ((NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS3_CRB_AGT_ADR) + (((u32)NETXEN_HW_H3_CH_HUB_ADR << 7) | NETXEN_HW_CAS3_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGNI \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGNI_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGNI_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGND \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGND_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGND_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGN0 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGN1 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGN2 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN2_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN2_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGN3 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN3_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGN3_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGNC \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGNC_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGNC_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGR0 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGR1 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGR2 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR2_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR2_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGR3 \ - ((NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR3_CRB_AGT_ADR) + (((u32)NETXEN_HW_H4_CH_HUB_ADR << 7) | NETXEN_HW_PEGR3_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGSI \ - ((NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGSI_CRB_AGT_ADR) + (((u32)NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGSI_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGSD \ - ((NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGSD_CRB_AGT_ADR) + (((u32)NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGSD_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGS0 \ - ((NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGS1 \ - ((NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGS2 \ - ((NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS2_CRB_AGT_ADR) + (((u32)NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS2_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGS3 \ - ((NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS3_CRB_AGT_ADR) + (((u32)NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGS3_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_PGSC \ - ((NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGSC_CRB_AGT_ADR) + (((u32)NETXEN_HW_H5_CH_HUB_ADR << 7) | NETXEN_HW_PEGSC_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_CAM \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_NCM_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_NCM_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_TIMR \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_TMR_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_TMR_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_XDMA \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_XDMA_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_XDMA_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_SN \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_SN_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_SN_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_I2Q \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_I2Q_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_I2Q_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_ROMUSB \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_ROMUSB_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_ROMUSB_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_OCM0 \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_OCM0_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_OCM0_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_OCM1 \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_OCM1_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_OCM1_CRB_AGT_ADR) #define NETXEN_HW_CRB_HUB_AGT_ADR_LPC \ - ((NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_LPC_CRB_AGT_ADR) + (((u32)NETXEN_HW_H6_CH_HUB_ADR << 7) | NETXEN_HW_LPC_CRB_AGT_ADR) /* * MAX_RCV_CTX : The number of receive contexts that are available on diff --git a/drivers/net/netxen/netxen_nic_init.c b/drivers/net/netxen/netxen_nic_init.c index 0dca029..042766e 100644 --- a/drivers/net/netxen/netxen_nic_init.c +++ b/drivers/net/netxen/netxen_nic_init.c @@ -49,7 +49,7 @@ #define NETXEN_ADDR_ERROR ((unsigned lon #define crb_addr_transform(name) \ crb_addr_xform[NETXEN_HW_PX_MAP_CRB_##name] = \ - NETXEN_HW_CRB_HUB_AGT_ADR_##name << 20 + NETXEN_HW_CRB_HUB_AGT_ADR_##name << 20 #define NETXEN_NIC_XDMA_RESET 0x8000ff @@ -1168,18 +1168,15 @@ netxen_nic_clear_statistics(struct netxe } int -netxen_nic_do_ioctl(struct netxen_adapter *adapter, void *u_data, +netxen_nic_do_ioctl(struct netxen_adapter *adapter, void __user *u_data, struct netxen_port *port) { struct netxen_nic_ioctl_data data; - struct netxen_nic_ioctl_data *up_data; int retval = 0; struct netxen_statistics netxen_stats; - up_data = (void *)u_data; - DPRINTK(INFO, "doing ioctl for %p\n", adapter); - if (copy_from_user(&data, (void __user *)up_data, sizeof(data))) { + if (copy_from_user(&data, u_data, sizeof(data))) { /* evil user tried to crash the kernel */ DPRINTK(ERR, "bad copy from userland: %d\n", (int)sizeof(data)); retval = -EFAULT; @@ -1199,8 +1196,9 @@ netxen_nic_do_ioctl(struct netxen_adapte if ((retval = netxen_nic_hw_read_wx(adapter, data.off, &(data.u), data.size))) goto error_out; - if (copy_to_user - ((void __user *)&(up_data->u), &(data.u), data.size)) { + + if (copy_to_user(u_data + offsetof(typeof(data), u), + &(data.u), data.size)) { DPRINTK(ERR, "bad copy to userland: %d\n", (int)sizeof(data)); retval = -EFAULT; @@ -1232,8 +1230,9 @@ netxen_nic_do_ioctl(struct netxen_adapte (u32 *) & (data.u)); break; } - if (copy_to_user - ((void __user *)&(up_data->u), &(data.u), data.size)) { + + if (copy_to_user(u_data + offsetof(typeof(data), u), + &(data.u), data.size)) { DPRINTK(ERR, "bad copy to userland: %d\n", (int)sizeof(data)); retval = -EFAULT; @@ -1264,26 +1263,24 @@ netxen_nic_do_ioctl(struct netxen_adapte case netxen_nic_cmd_get_stats: data.rv = netxen_nic_fill_statistics(adapter, port, &netxen_stats); - if (copy_to_user - ((void __user *)(up_data->ptr), (void *)&netxen_stats, - sizeof(struct netxen_statistics))) { + + if (copy_to_user(data.ptr, &netxen_stats, + sizeof(struct netxen_statistics))) { DPRINTK(ERR, "bad copy to userland: %d\n", (int)sizeof(netxen_stats)); retval = -EFAULT; goto error_out; } - up_data->rv = data.rv; break; case netxen_nic_cmd_clear_stats: data.rv = netxen_nic_clear_statistics(adapter, port); - up_data->rv = data.rv; break; case netxen_nic_cmd_get_version: - if (copy_to_user - ((void __user *)&(up_data->u), NETXEN_NIC_LINUX_VERSIONID, - sizeof(NETXEN_NIC_LINUX_VERSIONID))) { + if (copy_to_user(u_data + offsetof(typeof(data), u), + NETXEN_NIC_LINUX_VERSIONID, + sizeof(NETXEN_NIC_LINUX_VERSIONID))) { DPRINTK(ERR, "bad copy to userland: %d\n", (int)sizeof(data)); retval = -EFAULT; @@ -1296,7 +1293,10 @@ netxen_nic_do_ioctl(struct netxen_adapte retval = -EOPNOTSUPP; goto error_out; } - put_user(data.rv, (u16 __user *) (&(up_data->rv))); + + put_user(data.rv, + &(((struct netxen_nic_ioctl_data __user *)u_data)->rv)); + DPRINTK(INFO, "done ioctl for %p well.\n", adapter); error_out: diff --git a/drivers/net/netxen/netxen_nic_ioctl.h b/drivers/net/netxen/netxen_nic_ioctl.h index 23e53ad..cefccf1 100644 --- a/drivers/net/netxen/netxen_nic_ioctl.h +++ b/drivers/net/netxen/netxen_nic_ioctl.h @@ -58,7 +58,7 @@ struct netxen_nic_ioctl_data { u32 size; u32 rv; char u[64]; - void *ptr; + void __user *ptr; }; struct netxen_statistics { diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 1cb662d..827336f 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c @@ -105,10 +105,7 @@ netxen_nic_probe(struct pci_dev *pdev, c struct net_device *netdev = NULL; struct netxen_adapter *adapter = NULL; struct netxen_port *port = NULL; - u8 *mem_ptr0 = NULL; - u8 *mem_ptr1 = NULL; - u8 *mem_ptr2 = NULL; - + u8 __iomem *mem_ptr0, *mem_ptr1, *mem_ptr2; unsigned long mem_base, mem_len; int pci_using_dac, i, err; int ring; @@ -152,7 +149,7 @@ netxen_nic_probe(struct pci_dev *pdev, c mem_ptr2 = ioremap(mem_base + THIRD_PAGE_GROUP_START, THIRD_PAGE_GROUP_SIZE); - if ((mem_ptr0 == 0UL) || (mem_ptr1 == 0UL) || (mem_ptr2 == 0UL)) { + if (!mem_ptr0 || !mem_ptr1 || !mem_ptr2) { DPRINTK(1, ERR, "Cannot remap adapter memory aborting.:" "0 -> %p, 1 -> %p, 2 -> %p\n", @@ -1099,38 +1096,33 @@ #endif static int netxen_nic_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd) { - int err = 0; - unsigned long nr_bytes = 0; struct netxen_port *port = netdev_priv(netdev); struct netxen_adapter *adapter = port->adapter; - char dev_name[NETXEN_NIC_NAME_LEN]; DPRINTK(INFO, "doing ioctl for %s\n", netdev->name); switch (cmd) { case NETXEN_NIC_CMD: - err = netxen_nic_do_ioctl(adapter, (void *)ifr->ifr_data, port); + return netxen_nic_do_ioctl(adapter, ifr->ifr_data, port); break; case NETXEN_NIC_NAME: DPRINTK(INFO, "ioctl cmd for NetXen\n"); if (ifr->ifr_data) { - sprintf(dev_name, "%s-%d", NETXEN_NIC_NAME_RSP, - port->portnum); - nr_bytes = copy_to_user((char *)ifr->ifr_data, dev_name, - NETXEN_NIC_NAME_LEN); - if (nr_bytes) - err = -EIO; - + char dev_name[NETXEN_NIC_NAME_LEN]; + memset(dev_name, 0, NETXEN_NIC_NAME_LEN); + snprintf(dev_name, NETXEN_NIC_NAME_LEN, + "%s-%d", NETXEN_NIC_NAME_RSP, port->portnum); + + if (copy_to_user(ifr->ifr_data, dev_name, + NETXEN_NIC_NAME_LEN)) + return -EFAULT; } - break; + return 0; default: DPRINTK(INFO, "ioctl cmd %x not supported\n", cmd); - err = -EOPNOTSUPP; - break; + return -EOPNOTSUPP; } - - return err; } static struct pci_driver netxen_driver = { -- 1.4.1 - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html