From: Julia Lawall <julia.lawall@inria.fr>
To: Namjae Jeon <linkinjeon@kernel.org>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
Amir Goldstein <amir73il@gmail.com>,
Christoph Hellwig <hch@lst.de>
Subject: fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460 (fwd)
Date: Fri, 6 Nov 2026 11:22:54 +0100 (CET) [thread overview]
Message-ID: <598c2f18-21f3-d252-98da-e9288356c480@inria.fr> (raw)
---------- Forwarded message ----------
Date: Fri, 06 Nov 2026 07:59:12 +0100
From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com, Julia Lawall <julia.lawall@inria.fr>
Subject: fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this
memory at line 460
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: Namjae Jeon <linkinjeon@kernel.org>
CC: Amir Goldstein <amir73il@gmail.com>
CC: Christoph Hellwig <hch@lst.de>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: f66469d9905b39d2c260a15d7d6db450f4db67c1
commit: 47503f989736d6c4c9f8bfca1c28d267473ccd4b ntfs: add Kconfig and Makefile
date: 9 months ago
:::::: branch date: 5 hours ago
:::::: commit date: 9 months ago
config: loongarch-randconfig-r2105-20261104 (https://download.01.org/0day-ci/archive/20261106/202611060717.0Na5FqQR-lkp@intel.com/config)
compiler: clang version 24.0.0git (https://github.com/llvm/llvm-project e2e3d6c39cfebec9eace23629a5a103df2c79ba6)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Fixes: 47503f989736 ("ntfs: add Kconfig and Makefile")
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202611060717.0Na5FqQR-lkp@intel.com/
cocci warnings: (new ones prefixed by >>)
>> fs/ntfs/iomap.c:481:14-15: WARNING kmalloc is used to allocate this memory at line 460
vim +481 fs/ntfs/iomap.c
b041ca562526b3c Namjae Jeon 2026-02-13 378
b041ca562526b3c Namjae Jeon 2026-02-13 379 static int ntfs_write_simple_iomap_begin_non_resident(struct inode *inode, loff_t offset,
b041ca562526b3c Namjae Jeon 2026-02-13 380 loff_t length, struct iomap *iomap)
b041ca562526b3c Namjae Jeon 2026-02-13 381 {
b041ca562526b3c Namjae Jeon 2026-02-13 382 struct ntfs_inode *ni = NTFS_I(inode);
b041ca562526b3c Namjae Jeon 2026-02-13 383 struct ntfs_volume *vol = ni->vol;
b041ca562526b3c Namjae Jeon 2026-02-13 384 loff_t vcn_ofs, rl_length;
b041ca562526b3c Namjae Jeon 2026-02-13 385 struct runlist_element *rl, *rlc;
b041ca562526b3c Namjae Jeon 2026-02-13 386 bool is_retry = false;
b041ca562526b3c Namjae Jeon 2026-02-13 387 int err;
b041ca562526b3c Namjae Jeon 2026-02-13 388 s64 vcn, lcn;
b041ca562526b3c Namjae Jeon 2026-02-13 389 s64 max_clu_count =
b041ca562526b3c Namjae Jeon 2026-02-13 390 ntfs_bytes_to_cluster(vol, round_up(length, vol->cluster_size));
b041ca562526b3c Namjae Jeon 2026-02-13 391
b041ca562526b3c Namjae Jeon 2026-02-13 392 vcn = ntfs_bytes_to_cluster(vol, offset);
b041ca562526b3c Namjae Jeon 2026-02-13 393 vcn_ofs = ntfs_bytes_to_cluster_off(vol, offset);
b041ca562526b3c Namjae Jeon 2026-02-13 394
b041ca562526b3c Namjae Jeon 2026-02-13 395 down_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 396 rl = ni->runlist.rl;
b041ca562526b3c Namjae Jeon 2026-02-13 397 if (!rl) {
b041ca562526b3c Namjae Jeon 2026-02-13 398 up_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 399 err = ntfs_map_runlist(ni, vcn);
b041ca562526b3c Namjae Jeon 2026-02-13 400 if (err) {
b041ca562526b3c Namjae Jeon 2026-02-13 401 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 402 return -ENOENT;
b041ca562526b3c Namjae Jeon 2026-02-13 403 }
b041ca562526b3c Namjae Jeon 2026-02-13 404 down_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 405 rl = ni->runlist.rl;
b041ca562526b3c Namjae Jeon 2026-02-13 406 }
b041ca562526b3c Namjae Jeon 2026-02-13 407 up_read(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 408
b041ca562526b3c Namjae Jeon 2026-02-13 409 down_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 410 remap_rl:
b041ca562526b3c Namjae Jeon 2026-02-13 411 /* Seek to element containing target vcn. */
b041ca562526b3c Namjae Jeon 2026-02-13 412 rl = __ntfs_attr_find_vcn_nolock(&ni->runlist, vcn);
b041ca562526b3c Namjae Jeon 2026-02-13 413 if (IS_ERR(rl)) {
b041ca562526b3c Namjae Jeon 2026-02-13 414 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 415 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 416 return -EIO;
b041ca562526b3c Namjae Jeon 2026-02-13 417 }
b041ca562526b3c Namjae Jeon 2026-02-13 418 lcn = ntfs_rl_vcn_to_lcn(rl, vcn);
b041ca562526b3c Namjae Jeon 2026-02-13 419
b041ca562526b3c Namjae Jeon 2026-02-13 420 if (lcn <= LCN_RL_NOT_MAPPED && is_retry == false) {
b041ca562526b3c Namjae Jeon 2026-02-13 421 is_retry = true;
b041ca562526b3c Namjae Jeon 2026-02-13 422 if (!ntfs_map_runlist_nolock(ni, vcn, NULL)) {
b041ca562526b3c Namjae Jeon 2026-02-13 423 rl = ni->runlist.rl;
b041ca562526b3c Namjae Jeon 2026-02-13 424 goto remap_rl;
b041ca562526b3c Namjae Jeon 2026-02-13 425 }
b041ca562526b3c Namjae Jeon 2026-02-13 426 }
b041ca562526b3c Namjae Jeon 2026-02-13 427
b041ca562526b3c Namjae Jeon 2026-02-13 428 max_clu_count = min(max_clu_count, rl->length - (vcn - rl->vcn));
b041ca562526b3c Namjae Jeon 2026-02-13 429 if (max_clu_count == 0) {
b041ca562526b3c Namjae Jeon 2026-02-13 430 ntfs_error(inode->i_sb,
b041ca562526b3c Namjae Jeon 2026-02-13 431 "runlist(vcn : %lld, length : %lld) is corrupted\n",
b041ca562526b3c Namjae Jeon 2026-02-13 432 rl->vcn, rl->length);
b041ca562526b3c Namjae Jeon 2026-02-13 433 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 434 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 435 return -EIO;
b041ca562526b3c Namjae Jeon 2026-02-13 436 }
b041ca562526b3c Namjae Jeon 2026-02-13 437
b041ca562526b3c Namjae Jeon 2026-02-13 438 iomap->bdev = inode->i_sb->s_bdev;
b041ca562526b3c Namjae Jeon 2026-02-13 439 iomap->offset = offset;
b041ca562526b3c Namjae Jeon 2026-02-13 440
b041ca562526b3c Namjae Jeon 2026-02-13 441 if (lcn <= LCN_DELALLOC) {
b041ca562526b3c Namjae Jeon 2026-02-13 442 if (lcn < LCN_DELALLOC) {
b041ca562526b3c Namjae Jeon 2026-02-13 443 max_clu_count =
b041ca562526b3c Namjae Jeon 2026-02-13 444 ntfs_available_clusters_count(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 445 if (max_clu_count < 0) {
b041ca562526b3c Namjae Jeon 2026-02-13 446 err = max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 447 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 448 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 449 return err;
b041ca562526b3c Namjae Jeon 2026-02-13 450 }
b041ca562526b3c Namjae Jeon 2026-02-13 451 }
b041ca562526b3c Namjae Jeon 2026-02-13 452
b041ca562526b3c Namjae Jeon 2026-02-13 453 iomap->type = IOMAP_DELALLOC;
b041ca562526b3c Namjae Jeon 2026-02-13 454 iomap->addr = IOMAP_NULL_ADDR;
b041ca562526b3c Namjae Jeon 2026-02-13 455
b041ca562526b3c Namjae Jeon 2026-02-13 456 if (lcn <= LCN_HOLE) {
b041ca562526b3c Namjae Jeon 2026-02-13 457 size_t new_rl_count;
b041ca562526b3c Namjae Jeon 2026-02-13 458
b041ca562526b3c Namjae Jeon 2026-02-13 459 rlc = kmalloc(sizeof(struct runlist_element) * 2,
b041ca562526b3c Namjae Jeon 2026-02-13 @460 GFP_NOFS);
b041ca562526b3c Namjae Jeon 2026-02-13 461 if (!rlc) {
b041ca562526b3c Namjae Jeon 2026-02-13 462 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 463 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 464 return -ENOMEM;
b041ca562526b3c Namjae Jeon 2026-02-13 465 }
b041ca562526b3c Namjae Jeon 2026-02-13 466
b041ca562526b3c Namjae Jeon 2026-02-13 467 rlc->vcn = vcn;
b041ca562526b3c Namjae Jeon 2026-02-13 468 rlc->lcn = LCN_DELALLOC;
b041ca562526b3c Namjae Jeon 2026-02-13 469 rlc->length = max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 470
b041ca562526b3c Namjae Jeon 2026-02-13 471 rlc[1].vcn = vcn + max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 472 rlc[1].lcn = LCN_RL_NOT_MAPPED;
b041ca562526b3c Namjae Jeon 2026-02-13 473 rlc[1].length = 0;
b041ca562526b3c Namjae Jeon 2026-02-13 474
b041ca562526b3c Namjae Jeon 2026-02-13 475 rl = ntfs_runlists_merge(&ni->runlist, rlc, 0,
b041ca562526b3c Namjae Jeon 2026-02-13 476 &new_rl_count);
b041ca562526b3c Namjae Jeon 2026-02-13 477 if (IS_ERR(rl)) {
b041ca562526b3c Namjae Jeon 2026-02-13 478 ntfs_error(vol->sb, "Failed to merge runlists");
b041ca562526b3c Namjae Jeon 2026-02-13 479 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 480 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 @481 kvfree(rlc);
b041ca562526b3c Namjae Jeon 2026-02-13 482 return PTR_ERR(rl);
b041ca562526b3c Namjae Jeon 2026-02-13 483 }
b041ca562526b3c Namjae Jeon 2026-02-13 484
b041ca562526b3c Namjae Jeon 2026-02-13 485 ni->runlist.rl = rl;
b041ca562526b3c Namjae Jeon 2026-02-13 486 ni->runlist.count = new_rl_count;
b041ca562526b3c Namjae Jeon 2026-02-13 487 ni->i_dealloc_clusters += max_clu_count;
b041ca562526b3c Namjae Jeon 2026-02-13 488 }
b041ca562526b3c Namjae Jeon 2026-02-13 489 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 490 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 491
b041ca562526b3c Namjae Jeon 2026-02-13 492 if (lcn < LCN_DELALLOC)
b041ca562526b3c Namjae Jeon 2026-02-13 493 ntfs_hold_dirty_clusters(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 494
b041ca562526b3c Namjae Jeon 2026-02-13 495 rl_length = ntfs_cluster_to_bytes(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 496 if (length > rl_length - vcn_ofs)
b041ca562526b3c Namjae Jeon 2026-02-13 497 iomap->length = rl_length - vcn_ofs;
b041ca562526b3c Namjae Jeon 2026-02-13 498 else
b041ca562526b3c Namjae Jeon 2026-02-13 499 iomap->length = length;
b041ca562526b3c Namjae Jeon 2026-02-13 500
b041ca562526b3c Namjae Jeon 2026-02-13 501 iomap->flags = IOMAP_F_NEW;
b041ca562526b3c Namjae Jeon 2026-02-13 502 if (lcn <= LCN_HOLE) {
b041ca562526b3c Namjae Jeon 2026-02-13 503 loff_t end = offset + length;
b041ca562526b3c Namjae Jeon 2026-02-13 504
b041ca562526b3c Namjae Jeon 2026-02-13 505 if (vcn_ofs || ((vol->cluster_size > iomap->length) &&
b041ca562526b3c Namjae Jeon 2026-02-13 506 end < ni->initialized_size)) {
b041ca562526b3c Namjae Jeon 2026-02-13 507 loff_t z_start, z_end;
b041ca562526b3c Namjae Jeon 2026-02-13 508
b041ca562526b3c Namjae Jeon 2026-02-13 509 z_start = vcn << vol->cluster_size_bits;
b041ca562526b3c Namjae Jeon 2026-02-13 510 z_end = min_t(loff_t, z_start + vol->cluster_size,
b041ca562526b3c Namjae Jeon 2026-02-13 511 i_size_read(inode));
b041ca562526b3c Namjae Jeon 2026-02-13 512 if (z_end > z_start)
b041ca562526b3c Namjae Jeon 2026-02-13 513 err = ntfs_zero_range(inode,
b041ca562526b3c Namjae Jeon 2026-02-13 514 z_start,
b041ca562526b3c Namjae Jeon 2026-02-13 515 z_end - z_start);
b041ca562526b3c Namjae Jeon 2026-02-13 516 }
b041ca562526b3c Namjae Jeon 2026-02-13 517 if ((!err || err == -EPERM) &&
b041ca562526b3c Namjae Jeon 2026-02-13 518 max_clu_count > 1 &&
b041ca562526b3c Namjae Jeon 2026-02-13 519 (iomap->length & vol->cluster_size_mask &&
b041ca562526b3c Namjae Jeon 2026-02-13 520 end < ni->initialized_size)) {
b041ca562526b3c Namjae Jeon 2026-02-13 521 loff_t z_start, z_end;
b041ca562526b3c Namjae Jeon 2026-02-13 522
b041ca562526b3c Namjae Jeon 2026-02-13 523 z_start = (vcn + max_clu_count - 1) <<
b041ca562526b3c Namjae Jeon 2026-02-13 524 vol->cluster_size_bits;
b041ca562526b3c Namjae Jeon 2026-02-13 525 z_end = min_t(loff_t, z_start + vol->cluster_size,
b041ca562526b3c Namjae Jeon 2026-02-13 526 i_size_read(inode));
b041ca562526b3c Namjae Jeon 2026-02-13 527 if (z_end > z_start)
b041ca562526b3c Namjae Jeon 2026-02-13 528 err = ntfs_zero_range(inode,
b041ca562526b3c Namjae Jeon 2026-02-13 529 z_start,
b041ca562526b3c Namjae Jeon 2026-02-13 530 z_end - z_start);
b041ca562526b3c Namjae Jeon 2026-02-13 531 }
b041ca562526b3c Namjae Jeon 2026-02-13 532
b041ca562526b3c Namjae Jeon 2026-02-13 533 if (err == -EPERM)
b041ca562526b3c Namjae Jeon 2026-02-13 534 err = 0;
b041ca562526b3c Namjae Jeon 2026-02-13 535 if (err) {
b041ca562526b3c Namjae Jeon 2026-02-13 536 ntfs_release_dirty_clusters(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 537 return err;
b041ca562526b3c Namjae Jeon 2026-02-13 538 }
b041ca562526b3c Namjae Jeon 2026-02-13 539 }
b041ca562526b3c Namjae Jeon 2026-02-13 540 } else {
b041ca562526b3c Namjae Jeon 2026-02-13 541 up_write(&ni->runlist.lock);
b041ca562526b3c Namjae Jeon 2026-02-13 542 mutex_unlock(&ni->mrec_lock);
b041ca562526b3c Namjae Jeon 2026-02-13 543
b041ca562526b3c Namjae Jeon 2026-02-13 544 iomap->type = IOMAP_MAPPED;
b041ca562526b3c Namjae Jeon 2026-02-13 545 iomap->addr = ntfs_cluster_to_bytes(vol, lcn) + vcn_ofs;
b041ca562526b3c Namjae Jeon 2026-02-13 546
b041ca562526b3c Namjae Jeon 2026-02-13 547 rl_length = ntfs_cluster_to_bytes(vol, max_clu_count);
b041ca562526b3c Namjae Jeon 2026-02-13 548 if (length > rl_length - vcn_ofs)
b041ca562526b3c Namjae Jeon 2026-02-13 549 iomap->length = rl_length - vcn_ofs;
b041ca562526b3c Namjae Jeon 2026-02-13 550 else
b041ca562526b3c Namjae Jeon 2026-02-13 551 iomap->length = length;
b041ca562526b3c Namjae Jeon 2026-02-13 552 }
b041ca562526b3c Namjae Jeon 2026-02-13 553
b041ca562526b3c Namjae Jeon 2026-02-13 554 return 0;
b041ca562526b3c Namjae Jeon 2026-02-13 555 }
b041ca562526b3c Namjae Jeon 2026-02-13 556
:::::: The code at line 481 was first introduced by commit
:::::: b041ca562526b3c4a71b41b80ba5e520eac636ad ntfs: update iomap and address space operations
:::::: TO: Namjae Jeon <linkinjeon@kernel.org>
:::::: CC: Namjae Jeon <linkinjeon@kernel.org>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2026-11-06 10:23 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 10:22 Julia Lawall [this message]
2026-11-06 11:16 ` Namjae Jeon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=598c2f18-21f3-d252-98da-e9288356c480@inria.fr \
--to=julia.lawall@inria.fr \
--cc=amir73il@gmail.com \
--cc=hch@lst.de \
--cc=linkinjeon@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=oe-kbuild-all@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®