+ Richard for real this time. On Tue, May 21, 2019 at 3:53 PM Nick Desaulniers <ndesaulniers@xxxxxxxxxx> wrote: > > On Tue, May 21, 2019 at 10:42 AM Nathan Chancellor > <natechancellor@xxxxxxxxx> wrote: > > > > Clang warns: > > > > drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:2663:47: warning: > > address of array 'param->u.wpa_ie.data' will always evaluate to 'true' > > [-Wpointer-bool-conversion] > > (param->u.wpa_ie.len && !param->u.wpa_ie.data)) > > ~~~~~~~~~~~~~~~~~^~~~ > > > > This was exposed by commit deabe03523a7 ("Staging: rtl8192u: ieee80211: > > Use !x in place of NULL comparisons") because we disable the warning > > that would have pointed out the comparison against NULL is also false: > > > > drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c:2663:46: warning: > > comparison of array 'param->u.wpa_ie.data' equal to a null pointer is > > always false [-Wtautological-pointer-compare] > > (param->u.wpa_ie.len && param->u.wpa_ie.data == NULL)) > > ~~~~~~~~~~~~~~~~^~~~ ~~~~ > > > > Remove it so clang no longer warns. > > > > Link: https://github.com/ClangBuiltLinux/linux/issues/487 > > Signed-off-by: Nathan Chancellor <natechancellor@xxxxxxxxx> > > --- > > drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c | 3 +-- > > 1 file changed, 1 insertion(+), 2 deletions(-) > > > > diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c > > index f38f9d8b78bb..e0da0900a4f7 100644 > > --- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c > > +++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c > > @@ -2659,8 +2659,7 @@ static int ieee80211_wpa_set_wpa_ie(struct ieee80211_device *ieee, > > { > > u8 *buf; > > > > - if (param->u.wpa_ie.len > MAX_WPA_IE_LEN || > > - (param->u.wpa_ie.len && !param->u.wpa_ie.data)) > > Right so, the types in this expression: > > param: struct ieee_param* > param->u: *anonymous union* > param->u.wpa_ie: *anonymous struct* > param->u.wpa_ie.len: u32 > param->u.wpa_ie.data: u8 [0] > as defined in drivers/staging/rtl8192u/ieee80211/ieee80211.h#L295 > https://github.com/ClangBuiltLinux/linux/blob/9c7db5004280767566e91a33445bf93aa479ef02/drivers/staging/rtl8192u/ieee80211/ieee80211.h#L295-L322 > > so this is a tricky case, because in general array members can never > themselves be NULL, and usually I trust -Wpointer-bool-conversion, but > this is a special case because of the flexible array member: > https://en.wikipedia.org/wiki/Flexible_array_member. (It seems that > having the 0 in the length explicitly was pre-c99 GNU extension: > https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html). I wonder if > -Wtautological-pointer-compare applies to Flexible Array Members or > not (Richard, do you know)? In general, you'd be setting > param->u.wpa_ie to the return value of a dynamic memory allocation, > not param->u.wpa_ie.data, so this check is fishy to me. > > > + if (param->u.wpa_ie.len > MAX_WPA_IE_LEN) > > return -EINVAL; > > > > if (param->u.wpa_ie.len) { > > -- > > 2.22.0.rc1 > > > > > -- > Thanks, > ~Nick Desaulniers -- Thanks, ~Nick Desaulniers _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel