From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============7892668385397082704==" MIME-Version: 1.0 From: kbuild test robot To: kbuild-all@lists.01.org Subject: Re: [PATCH RFC v4 31/42] kmsan: hooks for copy_to_user() and friends Date: Tue, 24 Dec 2019 12:50:58 +0800 Message-ID: <201912241209.EnGLw5ed%lkp@intel.com> In-Reply-To: <20191220184955.223741-32-glider@google.com> List-Id: --===============7892668385397082704== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Hi, [FYI, it's a private test report for your RFC patch.] [auto build test WARNING on linus/master] [also build test WARNING on v5.5-rc3] [cannot apply to tip/x86/core tip/x86/mm efi/next next-20191220] [if your patch is applied to the wrong git tree, please drop us a note to h= elp improve the system. BTW, we also suggest to use '--base' option to specify = the base tree in git format-patch, please see https://stackoverflow.com/a/37406= 982] url: https://github.com/0day-ci/linux/commits/glider-google-com/Add-Kern= elMemorySanitizer-infrastructure/20191224-024330 base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git = 46cf053efec6a3a5f343fead837777efe8252a46 config: xtensa-common_defconfig (attached as .config) compiler: xtensa-linux-gcc (GCC) 7.5.0 reproduce: wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/= make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree GCC_VERSION=3D7.5.0 make.cross ARCH=3Dxtensa = If you fix the issue, kindly add following tag Reported-by: kbuild test robot Note: it may well be a FALSE warning. FWIW you are at least aware of it now. http://gcc.gnu.org/wiki/Better_Uninitialized_Warnings All warnings (new ones prefixed by >>): drivers/char/hw_random/core.c: In function 'rng_dev_read': >> drivers/char/hw_random/core.c:251:7: warning: 'res' may be used uninitia= lized in this function [-Wmaybe-uninitialized] if (copy_to_user(buf + ret, rng_buffer + data_avail, ^ -- In file included from include/linux/crypto.h:21:0, from include/crypto/hash.h:11, from include/linux/uio.h:10, from include/linux/socket.h:8, from include/linux/compat.h:15, from include/linux/ethtool.h:17, from net//core/ethtool.c:14: include/linux/uaccess.h: In function '_copy_to_user': include/linux/uaccess.h:155:9: warning: 'res' may be used uninitialized = in this function [-Wmaybe-uninitialized] return res; ^~~ net//core/ethtool.c: In function 'ethtool_get_per_queue_coalesce': >> net//core/ethtool.c:2362:6: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &coalesce, sizeof(coalesce))) ^ net//core/ethtool.c: In function 'ethtool_get_value': net//core/ethtool.c:2015:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &edata, sizeof(edata))) ^ net//core/ethtool.c: In function 'ethtool_get_channels': net//core/ethtool.c:1675:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &channels, sizeof(channels))) ^ net//core/ethtool.c: In function 'ethtool_get_coalesce': net//core/ethtool.c:1610:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &coalesce, sizeof(coalesce))) ^ net//core/ethtool.c: In function 'store_link_ksettings_for_user.constpro= p': net//core/ethtool.c:603:5: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(to, &link_usettings, sizeof(link_usettings))) ^ net//core/ethtool.c: In function 'ethtool_get_drvinfo': net//core/ethtool.c:810:5: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &info, sizeof(info))) ^ net//core/ethtool.c: In function 'ethtool_get_settings': net//core/ethtool.c:727:5: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &cmd, sizeof(cmd))) ^ net//core/ethtool.c: In function 'ethtool_get_any_eeprom': net//core/ethtool.c:1533:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &eeprom, sizeof(eeprom))) ^ net//core/ethtool.c:1522:6: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(userbuf, data, eeprom.len)) { ^ net//core/ethtool.c: In function 'ethtool_set_rxnfc': net//core/ethtool.c:896:33: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (cmd =3D=3D ETHTOOL_SRXCLSRLINS && ~~~~~~~~~~~~~~~~~~~~~~~~~~~^~ copy_to_user(useraddr, &info, info_size)) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ net//core/ethtool.c: In function 'ethtool_get_rxfh': net//core/ethtool.c:1211:12: warning: 'res' may be used uninitialized in= this function [-Wmaybe-uninitialized] } else if (copy_to_user(useraddr + ^ net//core/ethtool.c:1208:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr + offsetof(struct ethtool_rxfh, hfunc), ^ net//core/ethtool.c:1180:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &rxfh, sizeof(rxfh))) ^ net//core/ethtool.c: In function 'ethtool_get_rxfh_indir': net//core/ethtool.c:1071:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr + ^ net//core/ethtool.c:1052:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr + offsetof(struct ethtool_rxfh_indir, size), ^ net//core/ethtool.c: In function 'ethtool_set_rxfh': net//core/ethtool.c:1318:5: warning: 'res' may be used uninitialized in = this function [-Wmaybe-uninitialized] if (copy_to_user(useraddr + offsetof(struct ethtool_rxfh, rss_context), ^ net//core/ethtool.c: In function 'ethtool_get_sset_info': net//core/ethtool.c:861:5: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, info_buf, idx * sizeof(u32))) ^ net//core/ethtool.c:857:5: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &info, sizeof(info))) ^ net//core/ethtool.c: In function 'ethtool_get_rxnfc': net//core/ethtool.c:963:6: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, rule_buf, ^ net//core/ethtool.c:958:5: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &info, info_size)) ^ net//core/ethtool.c: In function 'dev_ethtool': net//core/ethtool.c:168:5: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &cmd, sizeof(cmd))) ^ In file included from include/linux/crypto.h:21:0, from include/crypto/hash.h:11, from include/linux/uio.h:10, from include/linux/socket.h:8, from include/linux/compat.h:15, from include/linux/ethtool.h:17, from net//core/ethtool.c:14: include/linux/uaccess.h:147:16: note: 'res' was declared here unsigned long res; ^~~ net//core/ethtool.c:639:6: warning: 'res' may be used uninitialized in t= his function [-Wmaybe-uninitialized] if (copy_to_user(useraddr, &link_ksettings.base, ^ In file included from include/linux/crypto.h:21:0, from include/crypto/hash.h:11, from include/linux/uio.h:10, from include/linux/socket.h:8, from include/linux/compat.h:15, from include/linux/ethtool.h:17, from net//core/ethtool.c:14: include/linux/uaccess.h:147:16: note: 'res' was declared here unsigned long res; vim +/res +251 drivers/char/hw_random/core.c 9996508b335306 Ian Molton 2009-12-01 204 = 844dd05fec172d Michael Buesch 2006-06-26 205 static ssize_t rng_dev_read= (struct file *filp, char __user *buf, 844dd05fec172d Michael Buesch 2006-06-26 206 size_t size, loff_t = *offp) 844dd05fec172d Michael Buesch 2006-06-26 207 { 844dd05fec172d Michael Buesch 2006-06-26 208 ssize_t ret =3D 0; 984e976f5382ff Patrick McHardy 2007-11-21 209 int err =3D 0; 9996508b335306 Ian Molton 2009-12-01 210 int bytes_read, len; 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 211 struct hwrng *rng; 844dd05fec172d Michael Buesch 2006-06-26 212 = 844dd05fec172d Michael Buesch 2006-06-26 213 while (size) { 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 214 rng =3D get_current_rng(); 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 215 if (IS_ERR(rng)) { 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 216 err =3D PTR_ERR(rng); 844dd05fec172d Michael Buesch 2006-06-26 217 goto out; 9996508b335306 Ian Molton 2009-12-01 218 } 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 219 if (!rng) { 844dd05fec172d Michael Buesch 2006-06-26 220 err =3D -ENODEV; 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 221 goto out; 844dd05fec172d Michael Buesch 2006-06-26 222 } 984e976f5382ff Patrick McHardy 2007-11-21 223 = 1ab87298cb59b6 Jiri Slaby 2015-11-27 224 if (mutex_lock_interrupti= ble(&reading_mutex)) { 1ab87298cb59b6 Jiri Slaby 2015-11-27 225 err =3D -ERESTARTSYS; 1ab87298cb59b6 Jiri Slaby 2015-11-27 226 goto out_put; 1ab87298cb59b6 Jiri Slaby 2015-11-27 227 } 9996508b335306 Ian Molton 2009-12-01 228 if (!data_avail) { 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 229 bytes_read =3D rng_get_d= ata(rng, rng_buffer, f7f154f1246ccc Rusty Russell 2013-03-05 230 rng_buffer_size(), 9996508b335306 Ian Molton 2009-12-01 231 !(filp->f_flags & O_NON= BLOCK)); 893f1128664478 Ralph Wuerthner 2008-04-17 232 if (bytes_read < 0) { 893f1128664478 Ralph Wuerthner 2008-04-17 233 err =3D bytes_read; 9372b35e11149c Rusty Russell 2014-12-08 234 goto out_unlock_reading; 9996508b335306 Ian Molton 2009-12-01 235 } 9996508b335306 Ian Molton 2009-12-01 236 data_avail =3D bytes_rea= d; 893f1128664478 Ralph Wuerthner 2008-04-17 237 } 844dd05fec172d Michael Buesch 2006-06-26 238 = 9996508b335306 Ian Molton 2009-12-01 239 if (!data_avail) { 9996508b335306 Ian Molton 2009-12-01 240 if (filp->f_flags & O_NO= NBLOCK) { 9996508b335306 Ian Molton 2009-12-01 241 err =3D -EAGAIN; 9372b35e11149c Rusty Russell 2014-12-08 242 goto out_unlock_reading; 9996508b335306 Ian Molton 2009-12-01 243 } 9996508b335306 Ian Molton 2009-12-01 244 } else { 9996508b335306 Ian Molton 2009-12-01 245 len =3D data_avail; 9996508b335306 Ian Molton 2009-12-01 246 if (len > size) 9996508b335306 Ian Molton 2009-12-01 247 len =3D size; 9996508b335306 Ian Molton 2009-12-01 248 = 9996508b335306 Ian Molton 2009-12-01 249 data_avail -=3D len; 9996508b335306 Ian Molton 2009-12-01 250 = 9996508b335306 Ian Molton 2009-12-01 @251 if (copy_to_user(buf + r= et, rng_buffer + data_avail, 9996508b335306 Ian Molton 2009-12-01 252 len)) { 844dd05fec172d Michael Buesch 2006-06-26 253 err =3D -EFAULT; 9372b35e11149c Rusty Russell 2014-12-08 254 goto out_unlock_reading; 9996508b335306 Ian Molton 2009-12-01 255 } 9996508b335306 Ian Molton 2009-12-01 256 = 9996508b335306 Ian Molton 2009-12-01 257 size -=3D len; 9996508b335306 Ian Molton 2009-12-01 258 ret +=3D len; 844dd05fec172d Michael Buesch 2006-06-26 259 } 844dd05fec172d Michael Buesch 2006-06-26 260 = 9372b35e11149c Rusty Russell 2014-12-08 261 mutex_unlock(&reading_mut= ex); 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 262 put_rng(rng); 9996508b335306 Ian Molton 2009-12-01 263 = 844dd05fec172d Michael Buesch 2006-06-26 264 if (need_resched()) 844dd05fec172d Michael Buesch 2006-06-26 265 schedule_timeout_interru= ptible(1); 9996508b335306 Ian Molton 2009-12-01 266 = 9996508b335306 Ian Molton 2009-12-01 267 if (signal_pending(curren= t)) { 844dd05fec172d Michael Buesch 2006-06-26 268 err =3D -ERESTARTSYS; 844dd05fec172d Michael Buesch 2006-06-26 269 goto out; 844dd05fec172d Michael Buesch 2006-06-26 270 } 9996508b335306 Ian Molton 2009-12-01 271 } 844dd05fec172d Michael Buesch 2006-06-26 272 out: 844dd05fec172d Michael Buesch 2006-06-26 273 return ret ? : err; 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 274 = 9372b35e11149c Rusty Russell 2014-12-08 275 out_unlock_reading: 9372b35e11149c Rusty Russell 2014-12-08 276 mutex_unlock(&reading_mute= x); 1ab87298cb59b6 Jiri Slaby 2015-11-27 277 out_put: 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 278 put_rng(rng); 3a2c0ba5ad00c0 Rusty Russell 2014-12-08 279 goto out; 844dd05fec172d Michael Buesch 2006-06-26 280 } 844dd05fec172d Michael Buesch 2006-06-26 281 = :::::: The code at line 251 was first introduced by commit :::::: 9996508b3353063f2d6c48c1a28a84543d72d70b hwrng: core - Replace u32 i= n driver API with byte array :::::: TO: Ian Molton :::::: CC: Herbert Xu --- 0-DAY kernel test infrastructure Open Source Technology Cen= ter https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org Intel Corpor= ation --===============7892668385397082704== Content-Type: application/gzip MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="config.gz" 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 Z6IAAA== --===============7892668385397082704==--