Re: drivers/tty/vt/vt.c:1210:22: warning: comparison is always false due to limited range of data type

From: Nicolas Pitre
Date: Wed Jun 17 2020 - 12:15:19 EST


I don't know what to do with this. IMHO the warning is useless in this
particular case. It happens only on a few targets and depends on the
kernel config, etc.

If the condition is always false in some cases then so be it. The
compiler can optimize the unneeded code away I'm sure.

On Mon, 15 Jun 2020, kernel test robot wrote:

> Hi Nicolas,
>
> FYI, the error/warning still remains.
>
> tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
> head: f82e7b57b5fc48199e2f26ffafe2f96f7338ad3d
> commit: 2717769e204e83e65b8819c5e2ef3e5b6639b270 vt: don't hardcode the mem allocation upper bound
> date: 7 weeks ago
> :::::: branch date: 2 hours ago
> :::::: commit date: 7 weeks ago
> config: ia64-randconfig-r024-20200614 (attached as .config)
> compiler: ia64-linux-gcc (GCC) 9.3.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> git checkout 2717769e204e83e65b8819c5e2ef3e5b6639b270
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross ARCH=ia64
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@xxxxxxxxx>
>
> All warnings (new ones prefixed by >>, old ones prefixed by <<):
>
> drivers/tty/vt/vt.c: In function 'vc_do_resize':
> >> drivers/tty/vt/vt.c:1210:22: warning: comparison is always false due to limited range of data type [-Wtype-limits]
> 1210 | if (new_screen_size > KMALLOC_MAX_SIZE)
> | ^
>
> # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=2717769e204e83e65b8819c5e2ef3e5b6639b270
> git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> git remote update linus
> git checkout 2717769e204e83e65b8819c5e2ef3e5b6639b270
> vim +1210 drivers/tty/vt/vt.c
>
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1163
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1164 /**
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1165 * vc_do_resize - resizing method for the tty
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1166 * @tty: tty being resized
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1167 * @real_tty: real tty (different to tty if a pty/tty pair)
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1168 * @vc: virtual console private data
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1169 * @cols: columns
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1170 * @lines: lines
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1171 *
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1172 * Resize a virtual console, clipping according to the actual constraints.
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1173 * If the caller passes a tty structure then update the termios winsize
> 3ad2f3fbb96142 drivers/char/vt.c Daniel Mack 2010-02-03 1174 * information and perform any necessary signal handling.
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1175 *
> 6a1c0680cf3ba9 drivers/tty/vt/vt.c Peter Hurley 2013-06-15 1176 * Caller must hold the console semaphore. Takes the termios rwsem and
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1177 * ctrl_lock of the tty IFF a tty is passed.
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1178 */
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1179
> fc6f6238226e6d drivers/char/vt.c Alan Cox 2009-01-02 1180 static int vc_do_resize(struct tty_struct *tty, struct vc_data *vc,
> fc6f6238226e6d drivers/char/vt.c Alan Cox 2009-01-02 1181 unsigned int cols, unsigned int lines)
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1182 {
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1183 unsigned long old_origin, new_origin, new_scr_end, rlth, rrem, err = 0;
> 9e0ba741aabdf1 drivers/char/vt.c qiaochong 2010-08-09 1184 unsigned long end;
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1185 unsigned int old_rows, old_row_size, first_copied_row;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1186 unsigned int new_cols, new_rows, new_row_size, new_screen_size;
> 9e0ba741aabdf1 drivers/char/vt.c qiaochong 2010-08-09 1187 unsigned int user;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1188 unsigned short *newscreen;
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1189 struct uni_screen *new_uniscr = NULL;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1190
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1191 WARN_CONSOLE_UNLOCKED();
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1192
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1193 if (!vc)
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1194 return -ENXIO;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1195
> e400b6ec4ede4d drivers/char/vt.c Antonino A. Daplas 2007-10-16 1196 user = vc->vc_resize_user;
> e400b6ec4ede4d drivers/char/vt.c Antonino A. Daplas 2007-10-16 1197 vc->vc_resize_user = 0;
> e400b6ec4ede4d drivers/char/vt.c Antonino A. Daplas 2007-10-16 1198
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1199 if (cols > VC_RESIZE_MAXCOL || lines > VC_RESIZE_MAXROW)
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1200 return -EINVAL;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1201
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1202 new_cols = (cols ? cols : vc->vc_cols);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1203 new_rows = (lines ? lines : vc->vc_rows);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1204 new_row_size = new_cols << 1;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1205 new_screen_size = new_row_size * new_rows;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1206
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1207 if (new_cols == vc->vc_cols && new_rows == vc->vc_rows)
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1208 return 0;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1209
> 2717769e204e83 drivers/tty/vt/vt.c Nicolas Pitre 2020-03-28 @1210 if (new_screen_size > KMALLOC_MAX_SIZE)
> 32b2921e6a7461 drivers/tty/vt/vt.c Dmitry Vyukov 2016-10-14 1211 return -EINVAL;
> 21eff69aaaa0e7 drivers/tty/vt/vt.c Alexander Potapenko 2018-06-14 1212 newscreen = kzalloc(new_screen_size, GFP_USER);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1213 if (!newscreen)
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1214 return -ENOMEM;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1215
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1216 if (get_vc_uniscr(vc)) {
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1217 new_uniscr = vc_uniscr_alloc(new_cols, new_rows);
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1218 if (!new_uniscr) {
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1219 kfree(newscreen);
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1220 return -ENOMEM;
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1221 }
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1222 }
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1223
> dce05aa6eec977 drivers/tty/vt/vt.c Jiri Slaby 2020-02-19 1224 if (vc_is_sel(vc))
> 009e39ae44f419 drivers/tty/vt/vt.c Scot Doyle 2016-10-13 1225 clear_selection();
> 009e39ae44f419 drivers/tty/vt/vt.c Scot Doyle 2016-10-13 1226
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1227 old_rows = vc->vc_rows;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1228 old_row_size = vc->vc_size_row;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1229
> e400b6ec4ede4d drivers/char/vt.c Antonino A. Daplas 2007-10-16 1230 err = resize_screen(vc, new_cols, new_rows, user);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1231 if (err) {
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1232 kfree(newscreen);
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1233 kfree(new_uniscr);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1234 return err;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1235 }
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1236
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1237 vc->vc_rows = new_rows;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1238 vc->vc_cols = new_cols;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1239 vc->vc_size_row = new_row_size;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1240 vc->vc_screenbuf_size = new_screen_size;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1241
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1242 rlth = min(old_row_size, new_row_size);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1243 rrem = new_row_size - rlth;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1244 old_origin = vc->vc_origin;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1245 new_origin = (long) newscreen;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1246 new_scr_end = new_origin + new_screen_size;
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1247
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1248 if (vc->vc_y > new_rows) {
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1249 if (old_rows - vc->vc_y < new_rows) {
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1250 /*
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1251 * Cursor near the bottom, copy contents from the
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1252 * bottom of buffer
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1253 */
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1254 first_copied_row = (old_rows - new_rows);
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1255 } else {
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1256 /*
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1257 * Cursor is in no man's land, copy 1/2 screenful
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1258 * from the top and bottom of cursor position
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1259 */
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1260 first_copied_row = (vc->vc_y - new_rows/2);
> 9fc2b2d0cf7430 drivers/char/vt.c Francisco Jerez 2010-08-22 1261 }
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1262 old_origin += first_copied_row * old_row_size;
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1263 } else
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1264 first_copied_row = 0;
> 9fc2b2d0cf7430 drivers/char/vt.c Francisco Jerez 2010-08-22 1265 end = old_origin + old_row_size * min(old_rows, new_rows);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1266
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1267 vc_uniscr_copy_area(new_uniscr, new_cols, new_rows,
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1268 get_vc_uniscr(vc), rlth/2, first_copied_row,
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1269 min(old_rows, new_rows));
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1270 vc_uniscr_set(vc, new_uniscr);
> d8ae7242718738 drivers/tty/vt/vt.c Nicolas Pitre 2018-06-26 1271
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1272 update_attr(vc);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1273
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1274 while (old_origin < end) {
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1275 scr_memcpyw((unsigned short *) new_origin,
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1276 (unsigned short *) old_origin, rlth);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1277 if (rrem)
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1278 scr_memsetw((void *)(new_origin + rlth),
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1279 vc->vc_video_erase_char, rrem);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1280 old_origin += old_row_size;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1281 new_origin += new_row_size;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1282 }
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1283 if (new_scr_end > new_origin)
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1284 scr_memsetw((void *)new_origin, vc->vc_video_erase_char,
> 3b41dc1a3c7839 drivers/char/vt.c Antonino A. Daplas 2005-09-09 1285 new_scr_end - new_origin);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1286 kfree(vc->vc_screenbuf);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1287 vc->vc_screenbuf = newscreen;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1288 vc->vc_screenbuf_size = new_screen_size;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1289 set_origin(vc);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1290
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1291 /* do part of a reset_terminal() */
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1292 vc->vc_top = 0;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1293 vc->vc_bottom = vc->vc_rows;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1294 gotoxy(vc, vc->vc_x, vc->vc_y);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1295 save_cur(vc);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1296
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1297 if (tty) {
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1298 /* Rewrite the requested winsize data with the actual
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1299 resulting sizes */
> 8c9a9dd0fa3a26 drivers/char/vt.c Alan Cox 2008-08-15 1300 struct winsize ws;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1301 memset(&ws, 0, sizeof(ws));
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1302 ws.ws_row = vc->vc_rows;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1303 ws.ws_col = vc->vc_cols;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1304 ws.ws_ypixel = vc->vc_scan_lines;
> fc6f6238226e6d drivers/char/vt.c Alan Cox 2009-01-02 1305 tty_do_resize(tty, &ws);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1306 }
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1307
> 6ca8dfd78187d8 drivers/tty/vt/vt.c Jiri Slaby 2016-06-23 1308 if (con_is_visible(vc))
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1309 update_screen(vc);
> 8b92e87d39bfd0 drivers/char/vt.c Alan Cox 2009-09-19 1310 vt_event_post(VT_EVENT_RESIZE, vc->vc_num, vc->vc_num);
> 0c9b1965faddad drivers/tty/vt/vt.c Nicolas Pitre 2019-01-08 1311 notify_update(vc);
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1312 return err;
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1313 }
> ^1da177e4c3f41 drivers/char/vt.c Linus Torvalds 2005-04-16 1314
>
> ---
> 0-DAY CI Kernel Test Service, Intel Corporation
> https://lists.01.org/hyperkitty/list/kbuild-all@xxxxxxxxxxxx
>