* bug list: assigning negative values to unsigned variables @ 2010-01-27 10:40 Dan Carpenter 2010-01-27 10:57 ` Julia Lawall 0 siblings, 1 reply; 7+ messages in thread From: Dan Carpenter @ 2010-01-27 10:40 UTC (permalink / raw) To: kernel-janitors; +Cc: linux-kernel Fixing the places which assign negative values to unsigned variables is a good janitor task. This list is from smatch: grep -w "fit into 0" warns.txt | grep -v "\-1" | tee err-list regards, dan carpenter drivers/bluetooth/btmrvl_main.c +74 btmrvl_process_event(9) warn: value -22 can't fit into 0 'ret' drivers/bluetooth/btmrvl_main.c +123 btmrvl_process_event(58) warn: value -22 can't fit into 0 'ret' drivers/bluetooth/btmrvl_main.c +136 btmrvl_process_event(71) warn: value -22 can't fit into 0 'ret' drivers/char/mwave/smapi.c +69 smapi_request(12) warn: value -5 can't fit into 0 'usSmapiOK' drivers/net/ixgbe/ixgbe_dcb_nl.c +439 ixgbe_dcbnl_getcap(29) warn: value -22 can't fit into 0 'rval' drivers/net/ixgbe/ixgbe_dcb_nl.c +443 ixgbe_dcbnl_getcap(33) warn: value -22 can't fit into 0 'rval' drivers/net/ixgbe/ixgbe_dcb_nl.c +463 ixgbe_dcbnl_getnumtcs(14) warn: value -22 can't fit into 0 'rval' drivers/net/ixgbe/ixgbe_dcb_nl.c +467 ixgbe_dcbnl_getnumtcs(18) warn: value -22 can't fit into 0 'rval' drivers/net/wireless/b43legacy/phy.c +1205 b43legacy_phy_lo_b_measure(60) warn: value -772 can't fit into 0 'fval' drivers/net/wireless/b43legacy/phy.c +1632 b43legacy_phy_lo_g_measure(143) warn: value -3 can't fit into 0 'tmp' drivers/net/wireless/hostap/hostap_ioctl.c +1020 prism2_ioctl_giwrange(66) warn: value -60 can't fit into 0 'range->avg_qual.level' drivers/net/wireless/hostap/hostap_ioctl.c +1021 prism2_ioctl_giwrange(67) warn: value -95 can't fit into 0 'range->avg_qual.noise' drivers/net/wireless/ipw2x00/ipw2100.c +6901 ipw2100_wx_get_range(37) warn: value -78 can't fit into 0 'range->avg_qual.level' drivers/net/wireless/libertas/wext.c +875 lbs_get_wireless_stats(34) warn: value -96 can't fit into 0 'priv->wstats.qual.noise' drivers/net/wireless/prism54/isl_ioctl.c +452 prism54_get_range(33) warn: value -80 can't fit into 0 'range->avg_qual.level' drivers/net/bnx2x_link.c +3189 bnx2x_sfp_module_detection(21) warn: value -22 can't fit into 0 'rc' drivers/net/bnx2x_link.c +4548 bnx2x_ext_phy_init(911) warn: value -22 can't fit into 0 'rc' drivers/net/bnx2x_link.c +4553 bnx2x_ext_phy_init(916) warn: value -22 can't fit into 0 'rc' drivers/net/bnx2x_link.c +5556 bnx2x_get_ext_phy_fw_version(53) warn: value -22 can't fit into 0 'status' drivers/net/bnx2x_link.c +5854 bnx2x_set_led(59) warn: value -22 can't fit into 0 'rc' drivers/staging/rt2860/sta_ioctl.c +564 rt_ioctl_giwrange(60) warn: value -60 can't fit into 0 'range->avg_qual.level' drivers/staging/rt2860/sta_ioctl.c +565 rt_ioctl_giwrange(61) warn: value -95 can't fit into 0 'range->avg_qual.noise' drivers/staging/rt2870/../rt2860/sta_ioctl.c +564 rt_ioctl_giwrange(60) warn: value -60 can't fit into 0 'range->avg_qual.level' drivers/staging/rt2870/../rt2860/sta_ioctl.c +565 rt_ioctl_giwrange(61) warn: value -95 can't fit into 0 'range->avg_qual.noise' drivers/staging/rtl8187se/r8180_wx.c +275 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' drivers/staging/rtl8187se/r8180_wx.c +280 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' drivers/staging/rtl8192e/r8192E_wx.c +445 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' drivers/staging/rtl8192e/r8192E_wx.c +450 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' drivers/staging/rtl8192su/r8192U_wx.c +434 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' drivers/staging/rtl8192su/r8192U_wx.c +439 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' drivers/staging/rtl8192u/r8192U_wx.c +420 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' drivers/staging/rtl8192u/r8192U_wx.c +425 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' drivers/usb/serial/iuu_phoenix.c +565 iuu_clk(125) warn: value -2 can't fit into 0 '*(priv->buf+Count++)' ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: bug list: assigning negative values to unsigned variables 2010-01-27 10:40 bug list: assigning negative values to unsigned variables Dan Carpenter @ 2010-01-27 10:57 ` Julia Lawall 2010-01-27 11:09 ` Bernd Petrovitsch 2010-01-27 11:13 ` Dan Carpenter 0 siblings, 2 replies; 7+ messages in thread From: Julia Lawall @ 2010-01-27 10:57 UTC (permalink / raw) To: Dan Carpenter; +Cc: kernel-janitors, linux-kernel On Wed, 27 Jan 2010, Dan Carpenter wrote: > Fixing the places which assign negative values to unsigned variables is a good janitor task. I had the impression that assignment to -1 was done sometimes as a portable way to initialize the variable to 0xffff (for any number of f's). So perhaps it is not so trivial to fix. julia > This list is from smatch: grep -w "fit into 0" warns.txt | grep -v "\-1" | tee err-list > > regards, > dan carpenter > > drivers/bluetooth/btmrvl_main.c +74 btmrvl_process_event(9) warn: value -22 can't fit into 0 'ret' > drivers/bluetooth/btmrvl_main.c +123 btmrvl_process_event(58) warn: value -22 can't fit into 0 'ret' > drivers/bluetooth/btmrvl_main.c +136 btmrvl_process_event(71) warn: value -22 can't fit into 0 'ret' > drivers/char/mwave/smapi.c +69 smapi_request(12) warn: value -5 can't fit into 0 'usSmapiOK' > drivers/net/ixgbe/ixgbe_dcb_nl.c +439 ixgbe_dcbnl_getcap(29) warn: value -22 can't fit into 0 'rval' > drivers/net/ixgbe/ixgbe_dcb_nl.c +443 ixgbe_dcbnl_getcap(33) warn: value -22 can't fit into 0 'rval' > drivers/net/ixgbe/ixgbe_dcb_nl.c +463 ixgbe_dcbnl_getnumtcs(14) warn: value -22 can't fit into 0 'rval' > drivers/net/ixgbe/ixgbe_dcb_nl.c +467 ixgbe_dcbnl_getnumtcs(18) warn: value -22 can't fit into 0 'rval' > drivers/net/wireless/b43legacy/phy.c +1205 b43legacy_phy_lo_b_measure(60) warn: value -772 can't fit into 0 'fval' > drivers/net/wireless/b43legacy/phy.c +1632 b43legacy_phy_lo_g_measure(143) warn: value -3 can't fit into 0 'tmp' > drivers/net/wireless/hostap/hostap_ioctl.c +1020 prism2_ioctl_giwrange(66) warn: value -60 can't fit into 0 'range->avg_qual.level' > drivers/net/wireless/hostap/hostap_ioctl.c +1021 prism2_ioctl_giwrange(67) warn: value -95 can't fit into 0 'range->avg_qual.noise' > drivers/net/wireless/ipw2x00/ipw2100.c +6901 ipw2100_wx_get_range(37) warn: value -78 can't fit into 0 'range->avg_qual.level' > drivers/net/wireless/libertas/wext.c +875 lbs_get_wireless_stats(34) warn: value -96 can't fit into 0 'priv->wstats.qual.noise' > drivers/net/wireless/prism54/isl_ioctl.c +452 prism54_get_range(33) warn: value -80 can't fit into 0 'range->avg_qual.level' > drivers/net/bnx2x_link.c +3189 bnx2x_sfp_module_detection(21) warn: value -22 can't fit into 0 'rc' > drivers/net/bnx2x_link.c +4548 bnx2x_ext_phy_init(911) warn: value -22 can't fit into 0 'rc' > drivers/net/bnx2x_link.c +4553 bnx2x_ext_phy_init(916) warn: value -22 can't fit into 0 'rc' > drivers/net/bnx2x_link.c +5556 bnx2x_get_ext_phy_fw_version(53) warn: value -22 can't fit into 0 'status' > drivers/net/bnx2x_link.c +5854 bnx2x_set_led(59) warn: value -22 can't fit into 0 'rc' > drivers/staging/rt2860/sta_ioctl.c +564 rt_ioctl_giwrange(60) warn: value -60 can't fit into 0 'range->avg_qual.level' > drivers/staging/rt2860/sta_ioctl.c +565 rt_ioctl_giwrange(61) warn: value -95 can't fit into 0 'range->avg_qual.noise' > drivers/staging/rt2870/../rt2860/sta_ioctl.c +564 rt_ioctl_giwrange(60) warn: value -60 can't fit into 0 'range->avg_qual.level' > drivers/staging/rt2870/../rt2860/sta_ioctl.c +565 rt_ioctl_giwrange(61) warn: value -95 can't fit into 0 'range->avg_qual.noise' > drivers/staging/rtl8187se/r8180_wx.c +275 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' > drivers/staging/rtl8187se/r8180_wx.c +280 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' > drivers/staging/rtl8192e/r8192E_wx.c +445 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' > drivers/staging/rtl8192e/r8192E_wx.c +450 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' > drivers/staging/rtl8192su/r8192U_wx.c +434 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' > drivers/staging/rtl8192su/r8192U_wx.c +439 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' > drivers/staging/rtl8192u/r8192U_wx.c +420 rtl8180_wx_get_range(39) warn: value -98 can't fit into 0 'range->max_qual.noise' > drivers/staging/rtl8192u/r8192U_wx.c +425 rtl8180_wx_get_range(44) warn: value -78 can't fit into 0 'range->avg_qual.level' > drivers/usb/serial/iuu_phoenix.c +565 iuu_clk(125) warn: value -2 can't fit into 0 '*(priv->buf+Count++)' > -- > To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: bug list: assigning negative values to unsigned variables 2010-01-27 10:57 ` Julia Lawall @ 2010-01-27 11:09 ` Bernd Petrovitsch 2010-01-27 12:30 ` Julia Lawall 2010-01-27 11:13 ` Dan Carpenter 1 sibling, 1 reply; 7+ messages in thread From: Bernd Petrovitsch @ 2010-01-27 11:09 UTC (permalink / raw) To: Julia Lawall; +Cc: Dan Carpenter, kernel-janitors, linux-kernel On Mit, 2010-01-27 at 11:57 +0100, Julia Lawall wrote: > On Wed, 27 Jan 2010, Dan Carpenter wrote: > > > Fixing the places which assign negative values to unsigned variables is a good janitor task. > > I had the impression that assignment to -1 was done sometimes as a > portable way to initialize the variable to 0xffff (for any number of f's). > So perhaps it is not so trivial to fix. Any particular reason that ~0U, ~0UL, and ~0ULL shouldn't do the same (without relying on conversion from signed to unsigned)? Bernd -- Bernd Petrovitsch Email : bernd@petrovitsch.priv.at LUGA : http://www.luga.at ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: bug list: assigning negative values to unsigned variables 2010-01-27 11:09 ` Bernd Petrovitsch @ 2010-01-27 12:30 ` Julia Lawall 2010-01-27 14:12 ` Bernd Petrovitsch 0 siblings, 1 reply; 7+ messages in thread From: Julia Lawall @ 2010-01-27 12:30 UTC (permalink / raw) To: Bernd Petrovitsch; +Cc: Dan Carpenter, kernel-janitors, linux-kernel On Wed, 27 Jan 2010, Bernd Petrovitsch wrote: > On Mit, 2010-01-27 at 11:57 +0100, Julia Lawall wrote: > > On Wed, 27 Jan 2010, Dan Carpenter wrote: > > > > > Fixing the places which assign negative values to unsigned variables is a good janitor task. > > > > I had the impression that assignment to -1 was done sometimes as a > > portable way to initialize the variable to 0xffff (for any number of f's). > > So perhaps it is not so trivial to fix. > Any particular reason that ~0U, ~0UL, and ~0ULL shouldn't do the same > (without relying on conversion from signed to unsigned)? Then the constant specifies the type? julia ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: bug list: assigning negative values to unsigned variables 2010-01-27 12:30 ` Julia Lawall @ 2010-01-27 14:12 ` Bernd Petrovitsch 2010-01-27 14:44 ` Al Viro 0 siblings, 1 reply; 7+ messages in thread From: Bernd Petrovitsch @ 2010-01-27 14:12 UTC (permalink / raw) To: Julia Lawall; +Cc: Dan Carpenter, kernel-janitors, linux-kernel On Mit, 2010-01-27 at 13:30 +0100, Julia Lawall wrote: > On Wed, 27 Jan 2010, Bernd Petrovitsch wrote: > > On Mit, 2010-01-27 at 11:57 +0100, Julia Lawall wrote: > > > On Wed, 27 Jan 2010, Dan Carpenter wrote: > > > > > > > Fixing the places which assign negative values to unsigned variables is a good janitor task. > > > > > > I had the impression that assignment to -1 was done sometimes as a > > > portable way to initialize the variable to 0xffff (for any number of f's). Hmm, perhaps some experienced language lawyer can comment on the "portable". > > > So perhaps it is not so trivial to fix. > > Any particular reason that ~0U, ~0UL, and ~0ULL shouldn't do the same > > (without relying on conversion from signed to unsigned)? > > Then the constant specifies the type? Yes. And it is necessary as "~0U" assigned to a "unsigned long long int" won't give "~0ULL". Otherwise "0" would be a signed int and from then on (starting with "~0") we are in the C hell of type promotion/conversion from signed to unsigned and/or back - at least in theory. Bernd -- Bernd Petrovitsch Email : bernd@petrovitsch.priv.at LUGA : http://www.luga.at ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: bug list: assigning negative values to unsigned variables 2010-01-27 14:12 ` Bernd Petrovitsch @ 2010-01-27 14:44 ` Al Viro 0 siblings, 0 replies; 7+ messages in thread From: Al Viro @ 2010-01-27 14:44 UTC (permalink / raw) To: Bernd Petrovitsch Cc: Julia Lawall, Dan Carpenter, kernel-janitors, linux-kernel On Wed, Jan 27, 2010 at 03:12:49PM +0100, Bernd Petrovitsch wrote: > On Mit, 2010-01-27 at 13:30 +0100, Julia Lawall wrote: > > On Wed, 27 Jan 2010, Bernd Petrovitsch wrote: > > > On Mit, 2010-01-27 at 11:57 +0100, Julia Lawall wrote: > > > > On Wed, 27 Jan 2010, Dan Carpenter wrote: > > > > > > > > > Fixing the places which assign negative values to unsigned variables is a good janitor task. > > > > > > > > I had the impression that assignment to -1 was done sometimes as a > > > > portable way to initialize the variable to 0xffff (for any number of f's). > Hmm, perhaps some experienced language lawyer can comment on the > "portable". Doesn't take a lawyer; conversion to unsigned types *IS* portable and defined as arithmetics modulo 2^{width}. In particular, for any unsigned type T you are going to have the same results from (T)-1 and ~(T)0 (and (T)-1L, etc.). The value being converted is interpreted as an integer (i.e. the element of $\Bbb Z$) and then taken modulo 2^{width}, regardless of the type it had come from. So -1 is just fine and will result in 0xff....f of the right width. It's conversion to signed that is a mess if the value you are converting isn't already in range representable by the type you are converting to. Whether a specific example of conversion of negative to unsigned is a good idea stylistically is a different question, of course, but that should be taken on case-to-case basis. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: bug list: assigning negative values to unsigned variables 2010-01-27 10:57 ` Julia Lawall 2010-01-27 11:09 ` Bernd Petrovitsch @ 2010-01-27 11:13 ` Dan Carpenter 1 sibling, 0 replies; 7+ messages in thread From: Dan Carpenter @ 2010-01-27 11:13 UTC (permalink / raw) To: Julia Lawall; +Cc: kernel-janitors, linux-kernel On Wed, Jan 27, 2010 at 11:57:06AM +0100, Julia Lawall wrote: > On Wed, 27 Jan 2010, Dan Carpenter wrote: > > > Fixing the places which assign negative values to unsigned variables is a good janitor task. > > I had the impression that assignment to -1 was done sometimes as a > portable way to initialize the variable to 0xffff (for any number of f's). > So perhaps it is not so trivial to fix. > > julia > The grep removed those. > > This list is from smatch: grep -w "fit into 0" warns.txt | grep -v "\-1" | tee err-list Also it removed some other real bugs as well, which I have listed below. It should have been: grep -w "fit into 0" warns.txt | grep -vw "\-1" | tee err-list But you are right assigning -1 is idiomatic. I'll push a change tomorrow so the grep isn't needed. regards, dan carpenter drivers/net/bnx2x_link.c +864 bnx2x_cl45_write(38) warn: value -14 can't fit into 0 'rc' drivers/net/bnx2x_link.c +884 bnx2x_cl45_write(58) warn: value -14 can't fit into 0 'rc' drivers/net/bnx2x_link.c +934 bnx2x_cl45_read(40) warn: value -14 can't fit into 0 'rc' drivers/net/bnx2x_link.c +957 bnx2x_cl45_read(63) warn: value -14 can't fit into 0 'rc' drivers/pci/hotplug/ibmphp_hpc.c +391 pci_ctrl_write(2) warn: value -19 can't fit into 0 'rc' drivers/usb/serial/iuu_phoenix.c +573 iuu_clk(133) warn: value -124 can't fit into 0 '*(priv->buf+Count++)' net/llc/llc_station.c +691 llc_station_init(2) warn: value -105 can't fit into 0 'rc' net/wireless/wext-compat.c +175 cfg80211_wext_giwrange(34) warn: value -110 can't fit into 0 'range->max_qual.level' ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2010-01-27 14:44 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-01-27 10:40 bug list: assigning negative values to unsigned variables Dan Carpenter 2010-01-27 10:57 ` Julia Lawall 2010-01-27 11:09 ` Bernd Petrovitsch 2010-01-27 12:30 ` Julia Lawall 2010-01-27 14:12 ` Bernd Petrovitsch 2010-01-27 14:44 ` Al Viro 2010-01-27 11:13 ` Dan Carpenter
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox