Hi Geert, [+ Adrian] On 6/26/23 01:24, Geert Uytterhoeven wrote: > On Mon, 26 Jun 2023, Geert Uytterhoeven wrote: >> JFYI, when comparing v6.4[1] to v6.4-rc7[3], the summaries are: >> - build errors: +1/-0 > > + /kisskb/src/drivers/net/wireless/cisco/airo.c: error: 'status_rid.currentXmitRate' is used uninitialized [-Werror=uninitialized]: => 6163:45 I cannot reproduce this build error. (I don't doubt the problem, just having a problem making it happen for me.) I have tried it with gcc-11.1.0, gcc-11.3.0, and gcc-13.1.0. I'm surprised that this is the only instance that gcc found/warned about. I have a patch for this one instance, but there are 40+ instances of readStatusRid() readConfigRid() readSsidRid() readStatsRid() readCapabilityRid() that don't check the return status of the function calls. I suppose that a patch can quieten the compiler error/warning, but given the 40+ other problems, it won't make the driver any noticeably better IMO. And the there is the general problem of not being able to build sh* cleanly any way. (See all of the other build issues in http://kisskb.ellerman.id.au/kisskb/buildresult/14948832/ .) Adrian, what toolchain do you use for arch/sh/ builds? > sh4-gcc11/sh-allmodconfig > seen before > > This is actually a real issue, and it's been here since basically forever. > > drivers/net/wireless/cisco/airo.c: > > static int airo_get_rate(struct net_device *dev, > struct iw_request_info *info, > union iwreq_data *wrqu, > char *extra) > { > struct iw_param *vwrq = &wrqu->bitrate; > struct airo_info *local = dev->ml_priv; > StatusRid status_rid; /* Card status info */ > > readStatusRid(local, &status_rid, 1); > > ==> vwrq->value = le16_to_cpu(status_rid.currentXmitRate) * 500000; > ... > } > > static int readStatusRid(struct airo_info *ai, StatusRid *statr, int lock) > { > return PC4500_readrid(ai, RID_STATUS, statr, sizeof(*statr), lock); > } > > static int PC4500_readrid(struct airo_info *ai, u16 rid, void *pBuf, int len, int lock) > { > u16 status; > int rc = SUCCESS; > > if (lock) { > if (down_interruptible(&ai->sem)) > return ERROR; > > pBuf output buffer contents not initialized. > > } > ... > } > > >> [1] http://kisskb.ellerman.id.au/kisskb/branch/linus/head/6995e2de6891c724bfeb2db33d7b87775f913ad1/ (all 160 configs) >> [3] http://kisskb.ellerman.id.au/kisskb/branch/linus/head/45a3e24f65e90a047bef86f927ebdc4c710edaa1/ (all 160 configs) I appreciate the synopsis. Here's a patch. WDYT? Thanks. --- From: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> Subject: [PATCH] wifi: airo: avoid uninitialized warning in airo_get_rate() Quieten a gcc (11.3.0) build error or warning by checking the function call status and returning -EIO if the function call failed. This is similar to what several other wireless drivers do for the SIOCGIWRATE ioctl call. drivers/net/wireless/cisco/airo.c: error: 'status_rid.currentXmitRate' is used uninitialized [-Werror=uninitialized] Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2") Signed-off-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> Reported-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> Link: lore.kernel.org/r/39abf2c7-24a-f167-91da-ed4c5435d1c4@xxxxxxxxxxxxxx Cc: Kalle Valo <kvalo@xxxxxxxxxx> Cc: linux-wireless@xxxxxxxxxxxxxxx --- drivers/net/wireless/cisco/airo.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff -- a/drivers/net/wireless/cisco/airo.c b/drivers/net/wireless/cisco/airo.c --- a/drivers/net/wireless/cisco/airo.c +++ b/drivers/net/wireless/cisco/airo.c @@ -6157,8 +6157,11 @@ static int airo_get_rate(struct net_devi struct iw_param *vwrq = &wrqu->bitrate; struct airo_info *local = dev->ml_priv; StatusRid status_rid; /* Card status info */ + int ret; - readStatusRid(local, &status_rid, 1); + ret = readStatusRid(local, &status_rid, 1); + if (ret) + return -EIO; vwrq->value = le16_to_cpu(status_rid.currentXmitRate) * 500000; /* If more than one rate, set auto */