public inbox for linux-f2fs-devel@lists.sourceforge.net
 help / color / mirror / Atom feed
* [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
@ 2026-01-07  2:20 bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-07  2:30 ` [f2fs-dev] [Bug 220951] " bugzilla-daemon--- via Linux-f2fs-devel
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-07  2:20 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

            Bug ID: 220951
           Summary: swapfile activation bug causes data corruption when
                    swapfile < 2MB with fragmented extents
           Product: File System
           Version: 2.5
          Hardware: ARM
                OS: Linux
            Status: NEW
          Severity: high
          Priority: P3
         Component: f2fs
          Assignee: filesystem_f2fs@kernel-bugs.kernel.org
          Reporter: guoxiaolong2008@gmail.com
        Regression: No

When using stress-ng's swap stress test on F2FS filesystem with kernel 6.6+,
the system experiences data corruption leading to either:
1 dm-verity corruption errors and device reboot
2 F2FS node corruption errors and boot hangs

The issue occurs specifically when:
1 Using F2FS filesystem (ext4 is unaffected)
2 Swapfile size is less than F2FS section size (2MB)
3 Swapfile has fragmented physical layout (multiple non-contiguous extents)
4 Kernel version is 6.6+ (6.1 is unaffected)

The root cause is in check_swap_activate() function in fs/f2fs/data.c. When the
first extent of a small swapfile (< 2MB) is not aligned to section boundaries,
the function incorrectly treats it as the last extent, failing to map
subsequent extents. This results in incorrect swap_extent creation where only
the first extent is mapped, causing subsequent swap writes to overwrite wrong
physical locations (other files' data).

Steps to Reproduce
1 Setup a device with F2FS-formatted userdata partition
2 Compile stress-ng from https://github.com/ColinIanKing/stress-ng
3 Run swap stress test: (Android devices)
adb shell "cd /data/stressng; ./stress-ng-64 --metrics-brief --timeout 60
--swap 0"

Log:
1 Ftrace shows in kernel 6.6, only first extent is mapped during second
f2fs_map_blocks call in check_swap_activate():
stress-ng-swap-8990: f2fs_map_blocks: ino=11002, file offset=0, start
blkaddr=0x43143, len=0x1
(Only 4KB mapped, not the full swapfile)
2 in kernel 6.1, both extents are correctly mapped:
stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=0, start
blkaddr=0x13cd4, len=0x1
stress-ng-swap-5966: f2fs_map_blocks: ino=28011, file offset=1, start
blkaddr=0x60c84b, len=0xff

The problematic code is in check_swap_activate():
if ((pblock - SM_I(sbi)->main_blkaddr) % blks_per_sec ||
    nr_pblocks % blks_per_sec ||
    !f2fs_valid_pinned_area(sbi, pblock)) {
    bool last_extent = false;

    not_aligned++;

    nr_pblocks = roundup(nr_pblocks, blks_per_sec);
    if (cur_lblock + nr_pblocks > sis->max)
        nr_pblocks -= blks_per_sec;

    /* this extent is last one */
    if (!nr_pblocks) {
        nr_pblocks = last_lblock - cur_lblock;
        last_extent = true;
    }

    ret = f2fs_migrate_blocks(inode, cur_lblock, nr_pblocks);
    if (ret) {
        if (ret == -ENOENT)
            ret = -EINVAL;
        goto out;
    }

    if (!last_extent)
        goto retry;
}

When the first extent is unaligned and roundup(nr_pblocks, blks_per_sec)
exceeds sis->max, we subtract blks_per_sec resulting in nr_pblocks = 0. The
code then incorrectly assumes this is the last extent, sets nr_pblocks =
last_lblock - cur_lblock (entire swapfile), and performs migration. After
migration, it doesn't retry mapping, so subsequent extents are never processed.

Only one swap_extent is created starting at the first extent's physical block.
Subsequent swap writes use incorrect sector calculations, overwriting other
files' data.

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [f2fs-dev] [Bug 220951] swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
  2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
@ 2026-01-07  2:30 ` bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-12 10:25 ` bugzilla-daemon--- via Linux-f2fs-devel
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-07  2:30 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

guoxiaolong2008@gmail.com changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Kernel Version|                            |6.6

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [f2fs-dev] [Bug 220951] swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
  2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-07  2:30 ` [f2fs-dev] [Bug 220951] " bugzilla-daemon--- via Linux-f2fs-devel
@ 2026-01-12 10:25 ` bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-13  6:03 ` bugzilla-daemon--- via Linux-f2fs-devel
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-12 10:25 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

Chao Yu (chao@kernel.org) changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |ASSIGNED
                 CC|                            |chao@kernel.org

--- Comment #1 from Chao Yu (chao@kernel.org) ---
Xiaolong,

Thanks for your report and analysis!

I think your analysis is correct, based on that, I made a fix, could you please
have a try?

f2fs: fix to avoid mapping wrong physical block for swapfile

https://git.kernel.org/pub/scm/linux/kernel/git/chao/linux.git/commit/?h=bugfix/common&id=ac3dbe269a28f2d75ae963b3c6066a5259348ed2

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [f2fs-dev] [Bug 220951] swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
  2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-07  2:30 ` [f2fs-dev] [Bug 220951] " bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-12 10:25 ` bugzilla-daemon--- via Linux-f2fs-devel
@ 2026-01-13  6:03 ` bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-13  6:15 ` bugzilla-daemon--- via Linux-f2fs-devel
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-13  6:03 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

--- Comment #2 from guoxiaolong2008@gmail.com ---
Hi Chao Yu:
Thanks for your fix, I verified the solution and it does work.

stress-ng-swap-7946    [007] .....   346.972372: f2fs_map_blocks: dev =
(254,47), ino = 16800, file offset = 0, start blkaddr = 0x77d0d, len = 0x1,
flags = 2, seg_type = 8, may_create = 0, multidevice = 0, flag = 6, err = 0
  stress-ng-swap-7946    [007] .....   346.972376: f2fs_map_blocks: dev =
(254,47), ino = 16800, file offset = 1, start blkaddr = 0x1f6801, len = 0xff,
flags = 2, seg_type = 8, may_create = 0, multidevice = 0, flag = 6, err = 0

  stress-ng-swap-7946    [007] .....   346.972378: f2fs_map_blocks: dev =
(254,47), ino = 16800, file offset = 0, start blkaddr = 0x77d0d, len = 0x1,
flags = 2, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0
  stress-ng-swap-7946    [007] .....   346.974392: f2fs_map_blocks: dev =
(254,47), ino = 16800, file offset = 0, start blkaddr = 0x1f6a00, len = 0x100,
flags = 2, seg_type = 8, may_create = 0, multidevice = 0, flag = 1, err = 0

The swapfile can be mapped correctly. 

Thanks.

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [f2fs-dev] [Bug 220951] swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
  2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
                   ` (2 preceding siblings ...)
  2026-01-13  6:03 ` bugzilla-daemon--- via Linux-f2fs-devel
@ 2026-01-13  6:15 ` bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-13  6:17 ` bugzilla-daemon--- via Linux-f2fs-devel
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-13  6:15 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

--- Comment #3 from Chao Yu (chao@kernel.org) ---
Xiaolong,

Thanks for your verfication on the patch! Let me upstream the patch.

Thanks,

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [f2fs-dev] [Bug 220951] swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
  2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
                   ` (3 preceding siblings ...)
  2026-01-13  6:15 ` bugzilla-daemon--- via Linux-f2fs-devel
@ 2026-01-13  6:17 ` bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-14 15:49 ` bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-20  9:20 ` bugzilla-daemon--- via Linux-f2fs-devel
  6 siblings, 0 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-13  6:17 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

--- Comment #4 from Chao Yu (chao@kernel.org) ---
Will add Reported-and-Tested-by tag of you in the patch, let me know if you
have any concern.

Thanks,

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [f2fs-dev] [Bug 220951] swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
  2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
                   ` (4 preceding siblings ...)
  2026-01-13  6:17 ` bugzilla-daemon--- via Linux-f2fs-devel
@ 2026-01-14 15:49 ` bugzilla-daemon--- via Linux-f2fs-devel
  2026-01-20  9:20 ` bugzilla-daemon--- via Linux-f2fs-devel
  6 siblings, 0 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-14 15:49 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

--- Comment #5 from guoxiaolong2008@gmail.com ---
Hi Chao Yu:
I have no concerns for it
Thanks for your support.

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [f2fs-dev] [Bug 220951] swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents
  2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
                   ` (5 preceding siblings ...)
  2026-01-14 15:49 ` bugzilla-daemon--- via Linux-f2fs-devel
@ 2026-01-20  9:20 ` bugzilla-daemon--- via Linux-f2fs-devel
  6 siblings, 0 replies; 8+ messages in thread
From: bugzilla-daemon--- via Linux-f2fs-devel @ 2026-01-20  9:20 UTC (permalink / raw)
  To: linux-f2fs-devel

https://bugzilla.kernel.org/show_bug.cgi?id=220951

Artem S. Tashkinov (aros@gmx.com) changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|ASSIGNED                    |RESOLVED
         Resolution|---                         |CODE_FIX

-- 
You may reply to this email to add a comment.

You are receiving this mail because:
You are watching the assignee of the bug.

_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-01-20  9:20 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-01-07  2:20 [f2fs-dev] [Bug 220951] New: swapfile activation bug causes data corruption when swapfile < 2MB with fragmented extents bugzilla-daemon--- via Linux-f2fs-devel
2026-01-07  2:30 ` [f2fs-dev] [Bug 220951] " bugzilla-daemon--- via Linux-f2fs-devel
2026-01-12 10:25 ` bugzilla-daemon--- via Linux-f2fs-devel
2026-01-13  6:03 ` bugzilla-daemon--- via Linux-f2fs-devel
2026-01-13  6:15 ` bugzilla-daemon--- via Linux-f2fs-devel
2026-01-13  6:17 ` bugzilla-daemon--- via Linux-f2fs-devel
2026-01-14 15:49 ` bugzilla-daemon--- via Linux-f2fs-devel
2026-01-20  9:20 ` bugzilla-daemon--- via Linux-f2fs-devel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox