* [akpm-mm:mm-unstable 226/293] fs/proc/kcore.c:493:31: warning: shift count is negative
@ 2023-03-23 16:30 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2023-03-23 16:30 UTC (permalink / raw)
To: Mike Rapoport (IBM)
Cc: llvm, oe-kbuild-all, Andrew Morton, Linux Memory Management List,
David Hildenbrand
Hi Mike,
FYI, the error/warning was bisected to this commit, please ignore it if it's irrelevant.
tree: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-unstable
head: 51551d71edbc998fd8c8afa7312db3d270f5998e
commit: 04719438eb2394584e4d164d70330e81dd325eac [226/293] mips: drop ranges for definition of ARCH_FORCE_MAX_ORDER
config: mips-randconfig-r012-20230322 (https://download.01.org/0day-ci/archive/20230324/202303240008.ZQ1TVBpS-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project 67409911353323ca5edf2049ef0df54132fa1ca7)
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
# install mips cross compiling tool for clang build
# apt-get install binutils-mipsel-linux-gnu
# https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git/commit/?id=04719438eb2394584e4d164d70330e81dd325eac
git remote add akpm-mm https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git
git fetch --no-tags akpm-mm mm-unstable
git checkout 04719438eb2394584e4d164d70330e81dd325eac
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=mips SHELL=/bin/bash fs/proc/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Link: https://lore.kernel.org/oe-kbuild-all/202303240008.ZQ1TVBpS-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> fs/proc/kcore.c:493:31: warning: shift count is negative [-Wshift-count-negative]
if (page_offline_frozen++ % MAX_ORDER_NR_PAGES == 0) {
^~~~~~~~~~~~~~~~~~
include/linux/mmzone.h:33:31: note: expanded from macro 'MAX_ORDER_NR_PAGES'
#define MAX_ORDER_NR_PAGES (1 << MAX_ORDER)
^ ~~~~~~~~~
>> fs/proc/kcore.c:493:29: warning: remainder by zero is undefined [-Wdivision-by-zero]
if (page_offline_frozen++ % MAX_ORDER_NR_PAGES == 0) {
^ ~~~~~~~~~~~~~~~~~~
2 warnings generated.
vim +493 fs/proc/kcore.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 309
37e949bd5293dd Omar Sandoval 2018-08-21 310 static ssize_t
37e949bd5293dd Omar Sandoval 2018-08-21 311 read_kcore(struct file *file, char __user *buffer, size_t buflen, loff_t *fpos)
^1da177e4c3f41 Linus Torvalds 2005-04-16 312 {
37e949bd5293dd Omar Sandoval 2018-08-21 313 char *buf = file->private_data;
37e949bd5293dd Omar Sandoval 2018-08-21 314 size_t phdrs_offset, notes_offset, data_offset;
c6d9eee2a68619 David Hildenbrand 2021-06-30 315 size_t page_offline_frozen = 1;
37e949bd5293dd Omar Sandoval 2018-08-21 316 size_t phdrs_len, notes_len;
37e949bd5293dd Omar Sandoval 2018-08-21 317 struct kcore_list *m;
37e949bd5293dd Omar Sandoval 2018-08-21 318 size_t tsz;
37e949bd5293dd Omar Sandoval 2018-08-21 319 int nphdr;
37e949bd5293dd Omar Sandoval 2018-08-21 320 unsigned long start;
37e949bd5293dd Omar Sandoval 2018-08-21 321 size_t orig_buflen = buflen;
37e949bd5293dd Omar Sandoval 2018-08-21 322 int ret = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 323
37e949bd5293dd Omar Sandoval 2018-08-21 324 down_read(&kclist_lock);
c6d9eee2a68619 David Hildenbrand 2021-06-30 325 /*
c6d9eee2a68619 David Hildenbrand 2021-06-30 326 * Don't race against drivers that set PageOffline() and expect no
c6d9eee2a68619 David Hildenbrand 2021-06-30 327 * further page access.
c6d9eee2a68619 David Hildenbrand 2021-06-30 328 */
c6d9eee2a68619 David Hildenbrand 2021-06-30 329 page_offline_freeze();
^1da177e4c3f41 Linus Torvalds 2005-04-16 330
37e949bd5293dd Omar Sandoval 2018-08-21 331 get_kcore_size(&nphdr, &phdrs_len, ¬es_len, &data_offset);
37e949bd5293dd Omar Sandoval 2018-08-21 332 phdrs_offset = sizeof(struct elfhdr);
37e949bd5293dd Omar Sandoval 2018-08-21 333 notes_offset = phdrs_offset + phdrs_len;
37e949bd5293dd Omar Sandoval 2018-08-21 334
37e949bd5293dd Omar Sandoval 2018-08-21 335 /* ELF file header. */
37e949bd5293dd Omar Sandoval 2018-08-21 336 if (buflen && *fpos < sizeof(struct elfhdr)) {
37e949bd5293dd Omar Sandoval 2018-08-21 337 struct elfhdr ehdr = {
37e949bd5293dd Omar Sandoval 2018-08-21 338 .e_ident = {
37e949bd5293dd Omar Sandoval 2018-08-21 339 [EI_MAG0] = ELFMAG0,
37e949bd5293dd Omar Sandoval 2018-08-21 340 [EI_MAG1] = ELFMAG1,
37e949bd5293dd Omar Sandoval 2018-08-21 341 [EI_MAG2] = ELFMAG2,
37e949bd5293dd Omar Sandoval 2018-08-21 342 [EI_MAG3] = ELFMAG3,
37e949bd5293dd Omar Sandoval 2018-08-21 343 [EI_CLASS] = ELF_CLASS,
37e949bd5293dd Omar Sandoval 2018-08-21 344 [EI_DATA] = ELF_DATA,
37e949bd5293dd Omar Sandoval 2018-08-21 345 [EI_VERSION] = EV_CURRENT,
37e949bd5293dd Omar Sandoval 2018-08-21 346 [EI_OSABI] = ELF_OSABI,
37e949bd5293dd Omar Sandoval 2018-08-21 347 },
37e949bd5293dd Omar Sandoval 2018-08-21 348 .e_type = ET_CORE,
37e949bd5293dd Omar Sandoval 2018-08-21 349 .e_machine = ELF_ARCH,
37e949bd5293dd Omar Sandoval 2018-08-21 350 .e_version = EV_CURRENT,
37e949bd5293dd Omar Sandoval 2018-08-21 351 .e_phoff = sizeof(struct elfhdr),
37e949bd5293dd Omar Sandoval 2018-08-21 352 .e_flags = ELF_CORE_EFLAGS,
37e949bd5293dd Omar Sandoval 2018-08-21 353 .e_ehsize = sizeof(struct elfhdr),
37e949bd5293dd Omar Sandoval 2018-08-21 354 .e_phentsize = sizeof(struct elf_phdr),
37e949bd5293dd Omar Sandoval 2018-08-21 355 .e_phnum = nphdr,
37e949bd5293dd Omar Sandoval 2018-08-21 356 };
^1da177e4c3f41 Linus Torvalds 2005-04-16 357
37e949bd5293dd Omar Sandoval 2018-08-21 358 tsz = min_t(size_t, buflen, sizeof(struct elfhdr) - *fpos);
37e949bd5293dd Omar Sandoval 2018-08-21 359 if (copy_to_user(buffer, (char *)&ehdr + *fpos, tsz)) {
37e949bd5293dd Omar Sandoval 2018-08-21 360 ret = -EFAULT;
37e949bd5293dd Omar Sandoval 2018-08-21 361 goto out;
37e949bd5293dd Omar Sandoval 2018-08-21 362 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 363
37e949bd5293dd Omar Sandoval 2018-08-21 364 buffer += tsz;
37e949bd5293dd Omar Sandoval 2018-08-21 365 buflen -= tsz;
37e949bd5293dd Omar Sandoval 2018-08-21 366 *fpos += tsz;
37e949bd5293dd Omar Sandoval 2018-08-21 367 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 368
37e949bd5293dd Omar Sandoval 2018-08-21 369 /* ELF program headers. */
37e949bd5293dd Omar Sandoval 2018-08-21 370 if (buflen && *fpos < phdrs_offset + phdrs_len) {
37e949bd5293dd Omar Sandoval 2018-08-21 371 struct elf_phdr *phdrs, *phdr;
^1da177e4c3f41 Linus Torvalds 2005-04-16 372
37e949bd5293dd Omar Sandoval 2018-08-21 373 phdrs = kzalloc(phdrs_len, GFP_KERNEL);
37e949bd5293dd Omar Sandoval 2018-08-21 374 if (!phdrs) {
37e949bd5293dd Omar Sandoval 2018-08-21 375 ret = -ENOMEM;
37e949bd5293dd Omar Sandoval 2018-08-21 376 goto out;
37e949bd5293dd Omar Sandoval 2018-08-21 377 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 378
37e949bd5293dd Omar Sandoval 2018-08-21 379 phdrs[0].p_type = PT_NOTE;
37e949bd5293dd Omar Sandoval 2018-08-21 380 phdrs[0].p_offset = notes_offset;
37e949bd5293dd Omar Sandoval 2018-08-21 381 phdrs[0].p_filesz = notes_len;
^1da177e4c3f41 Linus Torvalds 2005-04-16 382
37e949bd5293dd Omar Sandoval 2018-08-21 383 phdr = &phdrs[1];
2ef43ec772551e KAMEZAWA Hiroyuki 2009-09-22 384 list_for_each_entry(m, &kclist_head, list) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 385 phdr->p_type = PT_LOAD;
^1da177e4c3f41 Linus Torvalds 2005-04-16 386 phdr->p_flags = PF_R | PF_W | PF_X;
37e949bd5293dd Omar Sandoval 2018-08-21 387 phdr->p_offset = kc_vaddr_to_offset(m->addr) + data_offset;
^1da177e4c3f41 Linus Torvalds 2005-04-16 388 phdr->p_vaddr = (size_t)m->addr;
3c36b419b111e2 David Hildenbrand 2021-06-30 389 if (m->type == KCORE_RAM)
464920104bf7ad Pratyush Anand 2017-02-27 390 phdr->p_paddr = __pa(m->addr);
df865e8337c397 James Morse 2018-08-21 391 else if (m->type == KCORE_TEXT)
df865e8337c397 James Morse 2018-08-21 392 phdr->p_paddr = __pa_symbol(m->addr);
464920104bf7ad Pratyush Anand 2017-02-27 393 else
464920104bf7ad Pratyush Anand 2017-02-27 394 phdr->p_paddr = (elf_addr_t)-1;
^1da177e4c3f41 Linus Torvalds 2005-04-16 395 phdr->p_filesz = phdr->p_memsz = m->size;
^1da177e4c3f41 Linus Torvalds 2005-04-16 396 phdr->p_align = PAGE_SIZE;
37e949bd5293dd Omar Sandoval 2018-08-21 397 phdr++;
^1da177e4c3f41 Linus Torvalds 2005-04-16 398 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 399
37e949bd5293dd Omar Sandoval 2018-08-21 400 tsz = min_t(size_t, buflen, phdrs_offset + phdrs_len - *fpos);
37e949bd5293dd Omar Sandoval 2018-08-21 401 if (copy_to_user(buffer, (char *)phdrs + *fpos - phdrs_offset,
37e949bd5293dd Omar Sandoval 2018-08-21 402 tsz)) {
37e949bd5293dd Omar Sandoval 2018-08-21 403 kfree(phdrs);
37e949bd5293dd Omar Sandoval 2018-08-21 404 ret = -EFAULT;
3673fb08db7334 Omar Sandoval 2018-08-21 405 goto out;
37e949bd5293dd Omar Sandoval 2018-08-21 406 }
37e949bd5293dd Omar Sandoval 2018-08-21 407 kfree(phdrs);
37e949bd5293dd Omar Sandoval 2018-08-21 408
37e949bd5293dd Omar Sandoval 2018-08-21 409 buffer += tsz;
37e949bd5293dd Omar Sandoval 2018-08-21 410 buflen -= tsz;
37e949bd5293dd Omar Sandoval 2018-08-21 411 *fpos += tsz;
37e949bd5293dd Omar Sandoval 2018-08-21 412 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 413
37e949bd5293dd Omar Sandoval 2018-08-21 414 /* ELF note segment. */
37e949bd5293dd Omar Sandoval 2018-08-21 415 if (buflen && *fpos < notes_offset + notes_len) {
37e949bd5293dd Omar Sandoval 2018-08-21 416 struct elf_prstatus prstatus = {};
37e949bd5293dd Omar Sandoval 2018-08-21 417 struct elf_prpsinfo prpsinfo = {
37e949bd5293dd Omar Sandoval 2018-08-21 418 .pr_sname = 'R',
37e949bd5293dd Omar Sandoval 2018-08-21 419 .pr_fname = "vmlinux",
37e949bd5293dd Omar Sandoval 2018-08-21 420 };
37e949bd5293dd Omar Sandoval 2018-08-21 421 char *notes;
37e949bd5293dd Omar Sandoval 2018-08-21 422 size_t i = 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 423
37e949bd5293dd Omar Sandoval 2018-08-21 424 strlcpy(prpsinfo.pr_psargs, saved_command_line,
37e949bd5293dd Omar Sandoval 2018-08-21 425 sizeof(prpsinfo.pr_psargs));
^1da177e4c3f41 Linus Torvalds 2005-04-16 426
37e949bd5293dd Omar Sandoval 2018-08-21 427 notes = kzalloc(notes_len, GFP_KERNEL);
37e949bd5293dd Omar Sandoval 2018-08-21 428 if (!notes) {
3673fb08db7334 Omar Sandoval 2018-08-21 429 ret = -ENOMEM;
3673fb08db7334 Omar Sandoval 2018-08-21 430 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 431 }
37e949bd5293dd Omar Sandoval 2018-08-21 432
37e949bd5293dd Omar Sandoval 2018-08-21 433 append_kcore_note(notes, &i, CORE_STR, NT_PRSTATUS, &prstatus,
37e949bd5293dd Omar Sandoval 2018-08-21 434 sizeof(prstatus));
37e949bd5293dd Omar Sandoval 2018-08-21 435 append_kcore_note(notes, &i, CORE_STR, NT_PRPSINFO, &prpsinfo,
37e949bd5293dd Omar Sandoval 2018-08-21 436 sizeof(prpsinfo));
37e949bd5293dd Omar Sandoval 2018-08-21 437 append_kcore_note(notes, &i, CORE_STR, NT_TASKSTRUCT, current,
37e949bd5293dd Omar Sandoval 2018-08-21 438 arch_task_struct_size);
23c85094fe1895 Omar Sandoval 2018-08-21 439 /*
23c85094fe1895 Omar Sandoval 2018-08-21 440 * vmcoreinfo_size is mostly constant after init time, but it
23c85094fe1895 Omar Sandoval 2018-08-21 441 * can be changed by crash_save_vmcoreinfo(). Racing here with a
23c85094fe1895 Omar Sandoval 2018-08-21 442 * panic on another CPU before the machine goes down is insanely
23c85094fe1895 Omar Sandoval 2018-08-21 443 * unlikely, but it's better to not leave potential buffer
23c85094fe1895 Omar Sandoval 2018-08-21 444 * overflows lying around, regardless.
23c85094fe1895 Omar Sandoval 2018-08-21 445 */
23c85094fe1895 Omar Sandoval 2018-08-21 446 append_kcore_note(notes, &i, VMCOREINFO_NOTE_NAME, 0,
23c85094fe1895 Omar Sandoval 2018-08-21 447 vmcoreinfo_data,
23c85094fe1895 Omar Sandoval 2018-08-21 448 min(vmcoreinfo_size, notes_len - i));
37e949bd5293dd Omar Sandoval 2018-08-21 449
37e949bd5293dd Omar Sandoval 2018-08-21 450 tsz = min_t(size_t, buflen, notes_offset + notes_len - *fpos);
37e949bd5293dd Omar Sandoval 2018-08-21 451 if (copy_to_user(buffer, notes + *fpos - notes_offset, tsz)) {
37e949bd5293dd Omar Sandoval 2018-08-21 452 kfree(notes);
3673fb08db7334 Omar Sandoval 2018-08-21 453 ret = -EFAULT;
3673fb08db7334 Omar Sandoval 2018-08-21 454 goto out;
^1da177e4c3f41 Linus Torvalds 2005-04-16 455 }
37e949bd5293dd Omar Sandoval 2018-08-21 456 kfree(notes);
37e949bd5293dd Omar Sandoval 2018-08-21 457
37e949bd5293dd Omar Sandoval 2018-08-21 458 buffer += tsz;
^1da177e4c3f41 Linus Torvalds 2005-04-16 459 buflen -= tsz;
^1da177e4c3f41 Linus Torvalds 2005-04-16 460 *fpos += tsz;
3673fb08db7334 Omar Sandoval 2018-08-21 461 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 462
^1da177e4c3f41 Linus Torvalds 2005-04-16 463 /*
^1da177e4c3f41 Linus Torvalds 2005-04-16 464 * Check to see if our file offset matches with any of
^1da177e4c3f41 Linus Torvalds 2005-04-16 465 * the addresses in the elf_phdr on our list.
^1da177e4c3f41 Linus Torvalds 2005-04-16 466 */
37e949bd5293dd Omar Sandoval 2018-08-21 467 start = kc_offset_to_vaddr(*fpos - data_offset);
^1da177e4c3f41 Linus Torvalds 2005-04-16 468 if ((tsz = (PAGE_SIZE - (start & ~PAGE_MASK))) > buflen)
^1da177e4c3f41 Linus Torvalds 2005-04-16 469 tsz = buflen;
^1da177e4c3f41 Linus Torvalds 2005-04-16 470
bf991c2231117d Omar Sandoval 2018-08-21 471 m = NULL;
^1da177e4c3f41 Linus Torvalds 2005-04-16 472 while (buflen) {
0daa322b8ff94d David Hildenbrand 2021-06-30 473 struct page *page;
0daa322b8ff94d David Hildenbrand 2021-06-30 474 unsigned long pfn;
0daa322b8ff94d David Hildenbrand 2021-06-30 475
bf991c2231117d Omar Sandoval 2018-08-21 476 /*
bf991c2231117d Omar Sandoval 2018-08-21 477 * If this is the first iteration or the address is not within
bf991c2231117d Omar Sandoval 2018-08-21 478 * the previous entry, search for a matching entry.
bf991c2231117d Omar Sandoval 2018-08-21 479 */
bf991c2231117d Omar Sandoval 2018-08-21 480 if (!m || start < m->addr || start >= m->addr + m->size) {
04d168c6d42d17 Jakob Koschel 2022-04-29 481 struct kcore_list *iter;
04d168c6d42d17 Jakob Koschel 2022-04-29 482
04d168c6d42d17 Jakob Koschel 2022-04-29 483 m = NULL;
04d168c6d42d17 Jakob Koschel 2022-04-29 484 list_for_each_entry(iter, &kclist_head, list) {
04d168c6d42d17 Jakob Koschel 2022-04-29 485 if (start >= iter->addr &&
04d168c6d42d17 Jakob Koschel 2022-04-29 486 start < iter->addr + iter->size) {
04d168c6d42d17 Jakob Koschel 2022-04-29 487 m = iter;
^1da177e4c3f41 Linus Torvalds 2005-04-16 488 break;
^1da177e4c3f41 Linus Torvalds 2005-04-16 489 }
bf991c2231117d Omar Sandoval 2018-08-21 490 }
04d168c6d42d17 Jakob Koschel 2022-04-29 491 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 492
c6d9eee2a68619 David Hildenbrand 2021-06-30 @493 if (page_offline_frozen++ % MAX_ORDER_NR_PAGES == 0) {
c6d9eee2a68619 David Hildenbrand 2021-06-30 494 page_offline_thaw();
c6d9eee2a68619 David Hildenbrand 2021-06-30 495 cond_resched();
c6d9eee2a68619 David Hildenbrand 2021-06-30 496 page_offline_freeze();
c6d9eee2a68619 David Hildenbrand 2021-06-30 497 }
c6d9eee2a68619 David Hildenbrand 2021-06-30 498
04d168c6d42d17 Jakob Koschel 2022-04-29 499 if (!m) {
3673fb08db7334 Omar Sandoval 2018-08-21 500 if (clear_user(buffer, tsz)) {
3673fb08db7334 Omar Sandoval 2018-08-21 501 ret = -EFAULT;
3673fb08db7334 Omar Sandoval 2018-08-21 502 goto out;
3673fb08db7334 Omar Sandoval 2018-08-21 503 }
2711032c64a9c1 David Hildenbrand 2021-06-30 504 goto skip;
ffc8599aa9763f Kairui Song 2019-03-08 505 }
2711032c64a9c1 David Hildenbrand 2021-06-30 506
2711032c64a9c1 David Hildenbrand 2021-06-30 507 switch (m->type) {
2711032c64a9c1 David Hildenbrand 2021-06-30 508 case KCORE_VMALLOC:
f5beeb1851ea6f Jiri Olsa 2016-09-08 509 vread(buf, (char *)start, tsz);
73d7c33e81aed9 KAMEZAWA Hiroyuki 2009-09-21 510 /* we have to zero-fill user buffer even if no read */
3673fb08db7334 Omar Sandoval 2018-08-21 511 if (copy_to_user(buffer, buf, tsz)) {
3673fb08db7334 Omar Sandoval 2018-08-21 512 ret = -EFAULT;
3673fb08db7334 Omar Sandoval 2018-08-21 513 goto out;
3673fb08db7334 Omar Sandoval 2018-08-21 514 }
2711032c64a9c1 David Hildenbrand 2021-06-30 515 break;
2711032c64a9c1 David Hildenbrand 2021-06-30 516 case KCORE_USER:
595dd46ebfc10b Jia Zhang 2018-02-12 517 /* User page is handled prior to normal kernel page: */
3673fb08db7334 Omar Sandoval 2018-08-21 518 if (copy_to_user(buffer, (char *)start, tsz)) {
3673fb08db7334 Omar Sandoval 2018-08-21 519 ret = -EFAULT;
3673fb08db7334 Omar Sandoval 2018-08-21 520 goto out;
3673fb08db7334 Omar Sandoval 2018-08-21 521 }
2711032c64a9c1 David Hildenbrand 2021-06-30 522 break;
2711032c64a9c1 David Hildenbrand 2021-06-30 523 case KCORE_RAM:
0daa322b8ff94d David Hildenbrand 2021-06-30 524 pfn = __pa(start) >> PAGE_SHIFT;
0daa322b8ff94d David Hildenbrand 2021-06-30 525 page = pfn_to_online_page(pfn);
0daa322b8ff94d David Hildenbrand 2021-06-30 526
0daa322b8ff94d David Hildenbrand 2021-06-30 527 /*
0daa322b8ff94d David Hildenbrand 2021-06-30 528 * Don't read offline sections, logically offline pages
0daa322b8ff94d David Hildenbrand 2021-06-30 529 * (e.g., inflated in a balloon), hwpoisoned pages,
0daa322b8ff94d David Hildenbrand 2021-06-30 530 * and explicitly excluded physical ranges.
0daa322b8ff94d David Hildenbrand 2021-06-30 531 */
0daa322b8ff94d David Hildenbrand 2021-06-30 532 if (!page || PageOffline(page) ||
0daa322b8ff94d David Hildenbrand 2021-06-30 533 is_page_hwpoison(page) || !pfn_is_ram(pfn)) {
2711032c64a9c1 David Hildenbrand 2021-06-30 534 if (clear_user(buffer, tsz)) {
2711032c64a9c1 David Hildenbrand 2021-06-30 535 ret = -EFAULT;
2711032c64a9c1 David Hildenbrand 2021-06-30 536 goto out;
2711032c64a9c1 David Hildenbrand 2021-06-30 537 }
2711032c64a9c1 David Hildenbrand 2021-06-30 538 break;
2711032c64a9c1 David Hildenbrand 2021-06-30 539 }
2711032c64a9c1 David Hildenbrand 2021-06-30 540 fallthrough;
2711032c64a9c1 David Hildenbrand 2021-06-30 541 case KCORE_VMEMMAP:
2711032c64a9c1 David Hildenbrand 2021-06-30 542 case KCORE_TEXT:
df04abfd181acc Jiri Olsa 2016-09-08 543 /*
df04abfd181acc Jiri Olsa 2016-09-08 544 * Using bounce buffer to bypass the
df04abfd181acc Jiri Olsa 2016-09-08 545 * hardened user copy kernel text checks.
df04abfd181acc Jiri Olsa 2016-09-08 546 */
e025ab842ec352 Kefeng Wang 2022-10-18 547 if (copy_from_kernel_nofault(buf, (void *)start, tsz)) {
3673fb08db7334 Omar Sandoval 2018-08-21 548 if (clear_user(buffer, tsz)) {
3673fb08db7334 Omar Sandoval 2018-08-21 549 ret = -EFAULT;
3673fb08db7334 Omar Sandoval 2018-08-21 550 goto out;
3673fb08db7334 Omar Sandoval 2018-08-21 551 }
d0290bc20d4739 Heiko Carstens 2018-02-06 552 } else {
3673fb08db7334 Omar Sandoval 2018-08-21 553 if (copy_to_user(buffer, buf, tsz)) {
3673fb08db7334 Omar Sandoval 2018-08-21 554 ret = -EFAULT;
3673fb08db7334 Omar Sandoval 2018-08-21 555 goto out;
3673fb08db7334 Omar Sandoval 2018-08-21 556 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 557 }
2711032c64a9c1 David Hildenbrand 2021-06-30 558 break;
2711032c64a9c1 David Hildenbrand 2021-06-30 559 default:
2711032c64a9c1 David Hildenbrand 2021-06-30 560 pr_warn_once("Unhandled KCORE type: %d\n", m->type);
2711032c64a9c1 David Hildenbrand 2021-06-30 561 if (clear_user(buffer, tsz)) {
2711032c64a9c1 David Hildenbrand 2021-06-30 562 ret = -EFAULT;
2711032c64a9c1 David Hildenbrand 2021-06-30 563 goto out;
2711032c64a9c1 David Hildenbrand 2021-06-30 564 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 565 }
2711032c64a9c1 David Hildenbrand 2021-06-30 566 skip:
^1da177e4c3f41 Linus Torvalds 2005-04-16 567 buflen -= tsz;
^1da177e4c3f41 Linus Torvalds 2005-04-16 568 *fpos += tsz;
^1da177e4c3f41 Linus Torvalds 2005-04-16 569 buffer += tsz;
^1da177e4c3f41 Linus Torvalds 2005-04-16 570 start += tsz;
^1da177e4c3f41 Linus Torvalds 2005-04-16 571 tsz = (buflen > PAGE_SIZE ? PAGE_SIZE : buflen);
^1da177e4c3f41 Linus Torvalds 2005-04-16 572 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 573
3673fb08db7334 Omar Sandoval 2018-08-21 574 out:
c6d9eee2a68619 David Hildenbrand 2021-06-30 575 page_offline_thaw();
3673fb08db7334 Omar Sandoval 2018-08-21 576 up_read(&kclist_lock);
3673fb08db7334 Omar Sandoval 2018-08-21 577 if (ret)
3673fb08db7334 Omar Sandoval 2018-08-21 578 return ret;
3673fb08db7334 Omar Sandoval 2018-08-21 579 return orig_buflen - buflen;
^1da177e4c3f41 Linus Torvalds 2005-04-16 580 }
97ce5d6dcb07c4 Alexey Dobriyan 2008-10-06 581
:::::: The code at line 493 was first introduced by commit
:::::: c6d9eee2a68619b5ba1c25e406a9403f33b56902 fs/proc/kcore: use page_offline_(freeze|thaw)
:::::: TO: David Hildenbrand <david@redhat.com>
:::::: CC: Linus Torvalds <torvalds@linux-foundation.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2023-03-23 16:30 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-23 16:30 [akpm-mm:mm-unstable 226/293] fs/proc/kcore.c:493:31: warning: shift count is negative kernel test robot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).