* [PATCH 0/2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls
@ 2026-02-10 22:23 Ethan Ferguson
2026-02-10 22:23 ` [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl Ethan Ferguson
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Ethan Ferguson @ 2026-02-10 22:23 UTC (permalink / raw)
To: hirofumi; +Cc: linux-fsdevel, linux-kernel, Ethan Ferguson
Add support for reading / writing to the volume label of a FAT filesystem
via the FS_IOC_GETFSLABEL and FS_IOC_SETFSLABEL ioctls.
Volume label changes are persisted in the volume label dentry in the root
directory as well as the bios parameter block.
Some notes about possile deficiencies with this patch:
1. If there is no current volume label directory entry present, one is not
created.
2. Changes to the volume label are not checked for validity against the
current codepage.
Ethan Ferguson (2):
fat: Add FS_IOC_GETFSLABEL ioctl
fat: Add FS_IOC_SETFSLABEL ioctl
fs/fat/dir.c | 22 ++++++++++++++++++++++
fs/fat/fat.h | 2 ++
fs/fat/file.c | 28 ++++++++++++++++++++++++++++
fs/fat/inode.c | 26 ++++++++++++++++++++++++--
4 files changed, 76 insertions(+), 2 deletions(-)
base-commit: 9f2693489ef8558240d9e80bfad103650daed0af
--
2.53.0
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl
2026-02-10 22:23 [PATCH 0/2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls Ethan Ferguson
@ 2026-02-10 22:23 ` Ethan Ferguson
2026-02-11 10:57 ` Dan Carpenter
2026-02-10 22:23 ` [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl Ethan Ferguson
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Ethan Ferguson @ 2026-02-10 22:23 UTC (permalink / raw)
To: hirofumi; +Cc: linux-fsdevel, linux-kernel, Ethan Ferguson
Add support for reading the volume label of a FAT filesystem via the
FS_IOC_GETFSLABEL ioctl.
Signed-off-by: Ethan Ferguson <ethan.ferguson@zetier.com>
---
fs/fat/fat.h | 1 +
fs/fat/file.c | 9 +++++++++
fs/fat/inode.c | 11 +++++++++--
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/fs/fat/fat.h b/fs/fat/fat.h
index d3e426de5f01..db9c854ddef8 100644
--- a/fs/fat/fat.h
+++ b/fs/fat/fat.h
@@ -89,6 +89,7 @@ struct msdos_sb_info {
int dir_per_block; /* dir entries per block */
int dir_per_block_bits; /* log2(dir_per_block) */
unsigned int vol_id; /*volume ID*/
+ char vol_label[MSDOS_NAME]; /* volume label */
int fatent_shift;
const struct fatent_operations *fatent_ops;
diff --git a/fs/fat/file.c b/fs/fat/file.c
index 4fc49a614fb8..c55a99009a9c 100644
--- a/fs/fat/file.c
+++ b/fs/fat/file.c
@@ -153,6 +153,13 @@ static int fat_ioctl_fitrim(struct inode *inode, unsigned long arg)
return 0;
}
+static int fat_ioctl_get_volume_label(struct inode *inode, char __user *arg)
+{
+ struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
+
+ return copy_to_user(arg, sbi->vol_label, MSDOS_NAME);
+}
+
long fat_generic_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
struct inode *inode = file_inode(filp);
@@ -165,6 +172,8 @@ long fat_generic_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
return fat_ioctl_set_attributes(filp, user_attr);
case FAT_IOCTL_GET_VOLUME_ID:
return fat_ioctl_get_volume_id(inode, user_attr);
+ case FS_IOC_GETFSLABEL:
+ return fat_ioctl_get_volume_label(inode, (char __user *) arg);
case FITRIM:
return fat_ioctl_fitrim(inode, arg);
default:
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index 0b6009cd1844..f6bd3f079e74 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -53,12 +53,14 @@ struct fat_bios_param_block {
u8 fat16_state;
u32 fat16_vol_id;
+ u8 fat16_vol_label[MSDOS_NAME];
u32 fat32_length;
u32 fat32_root_cluster;
u16 fat32_info_sector;
u8 fat32_state;
u32 fat32_vol_id;
+ u8 fat32_vol_label[MSDOS_NAME];
};
static int fat_default_codepage = CONFIG_FAT_DEFAULT_CODEPAGE;
@@ -1406,12 +1408,14 @@ static int fat_read_bpb(struct super_block *sb, struct fat_boot_sector *b,
bpb->fat16_state = b->fat16.state;
bpb->fat16_vol_id = get_unaligned_le32(b->fat16.vol_id);
+ memcpy(bpb->fat16_vol_label, b->fat16.vol_label, MSDOS_NAME);
bpb->fat32_length = le32_to_cpu(b->fat32.length);
bpb->fat32_root_cluster = le32_to_cpu(b->fat32.root_cluster);
bpb->fat32_info_sector = le16_to_cpu(b->fat32.info_sector);
bpb->fat32_state = b->fat32.state;
bpb->fat32_vol_id = get_unaligned_le32(b->fat32.vol_id);
+ memcpy(bpb->fat32_vol_label, b->fat32.vol_label, MSDOS_NAME);
/* Validate this looks like a FAT filesystem BPB */
if (!bpb->fat_reserved) {
@@ -1708,10 +1712,13 @@ int fat_fill_super(struct super_block *sb, struct fs_context *fc,
}
/* interpret volume ID as a little endian 32 bit integer */
- if (is_fat32(sbi))
+ if (is_fat32(sbi)) {
sbi->vol_id = bpb.fat32_vol_id;
- else /* fat 16 or 12 */
+ memcpy(sbi->vol_label, bpb.fat32_vol_label, MSDOS_NAME);
+ } else { /* fat 16 or 12 */
sbi->vol_id = bpb.fat16_vol_id;
+ memcpy(sbi->vol_label, bpb.fat16_vol_label, MSDOS_NAME);
+ }
__le32 vol_id_le = cpu_to_le32(sbi->vol_id);
super_set_uuid(sb, (void *) &vol_id_le, sizeof(vol_id_le));
--
2.53.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl
2026-02-10 22:23 [PATCH 0/2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls Ethan Ferguson
2026-02-10 22:23 ` [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl Ethan Ferguson
@ 2026-02-10 22:23 ` Ethan Ferguson
2026-02-11 2:26 ` kernel test robot
2026-02-11 9:21 ` [syzbot ci] Re: fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls syzbot ci
2026-02-11 13:25 ` [PATCH 0/2] " OGAWA Hirofumi
3 siblings, 1 reply; 8+ messages in thread
From: Ethan Ferguson @ 2026-02-10 22:23 UTC (permalink / raw)
To: hirofumi; +Cc: linux-fsdevel, linux-kernel, Ethan Ferguson
Add support for writing to the volume label of a FAT filesystem via the
FS_IOC_SETFSLABEL ioctl.
Signed-off-by: Ethan Ferguson <ethan.ferguson@zetier.com>
---
fs/fat/dir.c | 22 ++++++++++++++++++++++
fs/fat/fat.h | 1 +
fs/fat/file.c | 19 +++++++++++++++++++
fs/fat/inode.c | 15 +++++++++++++++
4 files changed, 57 insertions(+)
diff --git a/fs/fat/dir.c b/fs/fat/dir.c
index 92b091783966..13e87f4c6bf3 100644
--- a/fs/fat/dir.c
+++ b/fs/fat/dir.c
@@ -1423,3 +1423,25 @@ int fat_add_entries(struct inode *dir, void *slots, int nr_slots,
return err;
}
EXPORT_SYMBOL_GPL(fat_add_entries);
+
+int fat_rename_volume_label_dentry(struct super_block *sb, char *vol_label)
+{
+ struct inode *root_inode = sb->s_root->d_inode;
+ struct buffer_head *bh;
+ struct msdos_dir_entry *de;
+ loff_t cpos = 0;
+
+ while (1) {
+ if (fat_get_entry(root_inode, &cpos, &bh, &de) == -1)
+ return -ENOENT;
+
+ if (de->attr == ATTR_VOLUME) {
+ memcpy(de->name, vol_label, MSDOS_NAME);
+ mark_inode_dirty(root_inode);
+ return 0;
+ }
+
+ brelse(bh);
+ }
+}
+EXPORT_SYMBOL_GPL(fat_rename_volume_label_dentry);
diff --git a/fs/fat/fat.h b/fs/fat/fat.h
index db9c854ddef8..5f1536c21adf 100644
--- a/fs/fat/fat.h
+++ b/fs/fat/fat.h
@@ -341,6 +341,7 @@ extern int fat_alloc_new_dir(struct inode *dir, struct timespec64 *ts);
extern int fat_add_entries(struct inode *dir, void *slots, int nr_slots,
struct fat_slot_info *sinfo);
extern int fat_remove_entries(struct inode *dir, struct fat_slot_info *sinfo);
+extern int fat_rename_volume_label_dentry(struct super_block *sb, char *vol_label);
/* fat/fatent.c */
struct fat_entry {
diff --git a/fs/fat/file.c b/fs/fat/file.c
index c55a99009a9c..2475a8f58596 100644
--- a/fs/fat/file.c
+++ b/fs/fat/file.c
@@ -160,6 +160,23 @@ static int fat_ioctl_get_volume_label(struct inode *inode, char __user *arg)
return copy_to_user(arg, sbi->vol_label, MSDOS_NAME);
}
+static int fat_ioctl_set_volume_label(struct inode *inode, char __user *arg)
+{
+ struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
+ char new_vol_label[MSDOS_NAME];
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
+ if (copy_from_user(new_vol_label, arg, MSDOS_NAME))
+ return -EFAULT;
+
+ fat_rename_volume_label_dentry(inode->i_sb, new_vol_label);
+
+ memcpy(sbi->vol_label, new_vol_label, MSDOS_NAME);
+ return 0;
+}
+
long fat_generic_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
{
struct inode *inode = file_inode(filp);
@@ -174,6 +191,8 @@ long fat_generic_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
return fat_ioctl_get_volume_id(inode, user_attr);
case FS_IOC_GETFSLABEL:
return fat_ioctl_get_volume_label(inode, (char __user *) arg);
+ case FS_IOC_SETFSLABEL:
+ return fat_ioctl_set_volume_label(inode, (char __user *) arg);
case FITRIM:
return fat_ioctl_fitrim(inode, arg);
default:
diff --git a/fs/fat/inode.c b/fs/fat/inode.c
index f6bd3f079e74..b40abb2b0010 100644
--- a/fs/fat/inode.c
+++ b/fs/fat/inode.c
@@ -736,6 +736,21 @@ static void delayed_free(struct rcu_head *p)
static void fat_put_super(struct super_block *sb)
{
struct msdos_sb_info *sbi = MSDOS_SB(sb);
+ struct buffer_head *bh = NULL;
+ struct fat_boot_sector *bs;
+
+ bh = sb_bread(sb, 0);
+ if (bh == NULL)
+ fat_msg(sb, KERN_ERR, "unable to read boot sector");
+ else if (!sb_rdonly(sb)) {
+ bs = (struct fat_boot_sector *)bh->b_data;
+ if (is_fat32(sbi))
+ memcpy(bs->fat32.vol_label, sbi->vol_label, MSDOS_NAME);
+ else
+ memcpy(bs->fat16.vol_label, sbi->vol_label, MSDOS_NAME);
+ mark_buffer_dirty(bh);
+ }
+ brelse(bh);
fat_set_state(sb, 0, 0);
--
2.53.0
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl
2026-02-10 22:23 ` [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl Ethan Ferguson
@ 2026-02-11 2:26 ` kernel test robot
0 siblings, 0 replies; 8+ messages in thread
From: kernel test robot @ 2026-02-11 2:26 UTC (permalink / raw)
To: Ethan Ferguson, hirofumi
Cc: oe-kbuild-all, linux-fsdevel, linux-kernel, Ethan Ferguson
Hi Ethan,
kernel test robot noticed the following build warnings:
[auto build test WARNING on 9f2693489ef8558240d9e80bfad103650daed0af]
url: https://github.com/intel-lab-lkp/linux/commits/Ethan-Ferguson/fat-Add-FS_IOC_GETFSLABEL-ioctl/20260211-062606
base: 9f2693489ef8558240d9e80bfad103650daed0af
patch link: https://lore.kernel.org/r/20260210222310.357755-3-ethan.ferguson%40zetier.com
patch subject: [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl
config: parisc-defconfig (https://download.01.org/0day-ci/archive/20260211/202602111002.F4q2b5Gx-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 15.2.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260211/202602111002.F4q2b5Gx-lkp@intel.com/reproduce)
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
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202602111002.F4q2b5Gx-lkp@intel.com/
All warnings (new ones prefixed by >>):
In function 'fat_get_entry',
inlined from 'fat_rename_volume_label_dentry' at fs/fat/dir.c:1435:7:
>> fs/fat/dir.c:121:12: warning: 'bh' is used uninitialized [-Wuninitialized]
121 | if (*bh && *de &&
| ^
fs/fat/dir.c: In function 'fat_rename_volume_label_dentry':
fs/fat/dir.c:1430:29: note: 'bh' was declared here
1430 | struct buffer_head *bh;
| ^~
vim +/bh +121 fs/fat/dir.c
^1da177e4c3f41 Linus Torvalds 2005-04-16 115
^1da177e4c3f41 Linus Torvalds 2005-04-16 116 static inline int fat_get_entry(struct inode *dir, loff_t *pos,
^1da177e4c3f41 Linus Torvalds 2005-04-16 117 struct buffer_head **bh,
^1da177e4c3f41 Linus Torvalds 2005-04-16 118 struct msdos_dir_entry **de)
^1da177e4c3f41 Linus Torvalds 2005-04-16 119 {
^1da177e4c3f41 Linus Torvalds 2005-04-16 120 /* Fast stuff first */
^1da177e4c3f41 Linus Torvalds 2005-04-16 @121 if (*bh && *de &&
f08b4988f229fb Cruz Julian Bishop 2012-10-04 122 (*de - (struct msdos_dir_entry *)(*bh)->b_data) <
f08b4988f229fb Cruz Julian Bishop 2012-10-04 123 MSDOS_SB(dir->i_sb)->dir_per_block - 1) {
^1da177e4c3f41 Linus Torvalds 2005-04-16 124 *pos += sizeof(struct msdos_dir_entry);
^1da177e4c3f41 Linus Torvalds 2005-04-16 125 (*de)++;
^1da177e4c3f41 Linus Torvalds 2005-04-16 126 return 0;
^1da177e4c3f41 Linus Torvalds 2005-04-16 127 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 128 return fat__get_entry(dir, pos, bh, de);
^1da177e4c3f41 Linus Torvalds 2005-04-16 129 }
^1da177e4c3f41 Linus Torvalds 2005-04-16 130
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 8+ messages in thread
* [syzbot ci] Re: fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls
2026-02-10 22:23 [PATCH 0/2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls Ethan Ferguson
2026-02-10 22:23 ` [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl Ethan Ferguson
2026-02-10 22:23 ` [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl Ethan Ferguson
@ 2026-02-11 9:21 ` syzbot ci
2026-02-11 13:25 ` [PATCH 0/2] " OGAWA Hirofumi
3 siblings, 0 replies; 8+ messages in thread
From: syzbot ci @ 2026-02-11 9:21 UTC (permalink / raw)
To: ethan.ferguson, hirofumi, linux-fsdevel, linux-kernel
Cc: syzbot, syzkaller-bugs
syzbot ci has tested the following series
[v1] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls
https://lore.kernel.org/all/20260210222310.357755-1-ethan.ferguson@zetier.com
* [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl
* [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl
and found the following issue:
WARNING in __brelse
Full report is available here:
https://ci.syzbot.org/series/2497ea10-8eee-4346-a692-2f79990b4572
***
WARNING in __brelse
tree: bpf
URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf.git
base: 9f2693489ef8558240d9e80bfad103650daed0af
arch: amd64
compiler: Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50), Debian LLD 21.1.8
config: https://ci.syzbot.org/builds/1d8ee174-a672-4f80-98f2-369e5475eb4f/config
C repro: https://ci.syzbot.org/findings/4c8d33e8-6c68-4ab8-ab0c-7be7952f7dcf/c_repro
syz repro: https://ci.syzbot.org/findings/4c8d33e8-6c68-4ab8-ab0c-7be7952f7dcf/syz_repro
loop0: detected capacity change from 0 to 8192
------------[ cut here ]------------
VFS: brelse: Trying to free free buffer
WARNING: fs/buffer.c:1237 at __brelse+0x6a/0x90 fs/buffer.c:1237, CPU#1: syz.0.17/5957
Modules linked in:
CPU: 1 UID: 0 PID: 5957 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
RIP: 0010:__brelse+0x6a/0x90 fs/buffer.c:1237
Code: 75 72 ff 85 ed 74 17 e8 c4 70 72 ff 48 89 df be 04 00 00 00 e8 27 c3 da ff f0 ff 0b eb 11 e8 ad 70 72 ff 48 8d 3d d6 ff a2 0d <67> 48 0f b9 3a 5b 5d c3 cc cc cc cc cc 89 d9 80 e1 07 80 c1 03 38
RSP: 0018:ffffc90003f07b48 EFLAGS: 00010293
RAX: ffffffff825206a3 RBX: ffff8881b6fd5d10 RCX: ffff888177b557c0
RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffffffff8ff50680
RBP: 0000000000000000 R08: ffff8881b6fd5d13 R09: 1ffff11036dfaba2
R10: dffffc0000000000 R11: ffffed1036dfaba3 R12: ffffc90003f07b78
R13: ffffc90003f07b70 R14: ffff8881bba28db0 R15: ffffc90003f07b68
FS: 0000555560eae500(0000) GS:ffff8882a96f5000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000200000000080 CR3: 000000010b660000 CR4: 00000000000006f0
Call Trace:
<TASK>
brelse include/linux/buffer_head.h:324 [inline]
fat_rename_volume_label_dentry+0x11f/0x1c0 fs/fat/dir.c:1444
fat_ioctl_set_volume_label fs/fat/file.c:174 [inline]
fat_generic_ioctl+0x751/0xfe0 fs/fat/file.c:195
fat_dir_ioctl+0x166/0x320 fs/fat/dir.c:816
vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:597 [inline]
__se_sys_ioctl+0xfc/0x170 fs/ioctl.c:583
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fce15b9bf79
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffe48117898 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007fce15e15fa0 RCX: 00007fce15b9bf79
RDX: 00002000000004c0 RSI: 0000000041009432 RDI: 0000000000000004
RBP: 00007fce15c327e0 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007fce15e15fac R14: 00007fce15e15fa0 R15: 00007fce15e15fa0
</TASK>
----------------
Code disassembly (best guess), 1 bytes skipped:
0: 72 ff jb 0x1
2: 85 ed test %ebp,%ebp
4: 74 17 je 0x1d
6: e8 c4 70 72 ff call 0xff7270cf
b: 48 89 df mov %rbx,%rdi
e: be 04 00 00 00 mov $0x4,%esi
13: e8 27 c3 da ff call 0xffdac33f
18: f0 ff 0b lock decl (%rbx)
1b: eb 11 jmp 0x2e
1d: e8 ad 70 72 ff call 0xff7270cf
22: 48 8d 3d d6 ff a2 0d lea 0xda2ffd6(%rip),%rdi # 0xda2ffff
* 29: 67 48 0f b9 3a ud1 (%edx),%rdi <-- trapping instruction
2e: 5b pop %rbx
2f: 5d pop %rbp
30: c3 ret
31: cc int3
32: cc int3
33: cc int3
34: cc int3
35: cc int3
36: 89 d9 mov %ebx,%ecx
38: 80 e1 07 and $0x7,%cl
3b: 80 c1 03 add $0x3,%cl
3e: 38 .byte 0x38
***
If these findings have caused you to resend the series or submit a
separate fix, please add the following tag to your commit message:
Tested-by: syzbot@syzkaller.appspotmail.com
---
This report is generated by a bot. It may contain errors.
syzbot ci engineers can be reached at syzkaller@googlegroups.com.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl
2026-02-10 22:23 ` [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl Ethan Ferguson
@ 2026-02-11 10:57 ` Dan Carpenter
0 siblings, 0 replies; 8+ messages in thread
From: Dan Carpenter @ 2026-02-11 10:57 UTC (permalink / raw)
To: oe-kbuild, Ethan Ferguson, hirofumi
Cc: lkp, oe-kbuild-all, linux-fsdevel, linux-kernel, Ethan Ferguson
Hi Ethan,
kernel test robot noticed the following build warnings:
url: https://github.com/intel-lab-lkp/linux/commits/Ethan-Ferguson/fat-Add-FS_IOC_GETFSLABEL-ioctl/20260211-062606
base: 9f2693489ef8558240d9e80bfad103650daed0af
patch link: https://lore.kernel.org/r/20260210222310.357755-2-ethan.ferguson%40zetier.com
patch subject: [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl
config: riscv-randconfig-r071-20260211 (https://download.01.org/0day-ci/archive/20260211/202602111747.QIBXIwpw-lkp@intel.com/config)
compiler: riscv64-linux-gcc (GCC) 9.5.0
smatch version: v0.5.0-8994-gd50c5a4c
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
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202602111747.QIBXIwpw-lkp@intel.com/
smatch warnings:
fs/fat/file.c:160 fat_ioctl_get_volume_label() warn: maybe return -EFAULT instead of the bytes remaining?
vim +160 fs/fat/file.c
5fc1746d68b8fb Ethan Ferguson 2026-02-10 156 static int fat_ioctl_get_volume_label(struct inode *inode, char __user *arg)
5fc1746d68b8fb Ethan Ferguson 2026-02-10 157 {
5fc1746d68b8fb Ethan Ferguson 2026-02-10 158 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb);
5fc1746d68b8fb Ethan Ferguson 2026-02-10 159
5fc1746d68b8fb Ethan Ferguson 2026-02-10 @160 return copy_to_user(arg, sbi->vol_label, MSDOS_NAME);
This should be:
if (copy_to_user(arg, sbi->vol_label, MSDOS_NAME))
return -EFAULT;
return 0;
5fc1746d68b8fb Ethan Ferguson 2026-02-10 161 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls
2026-02-10 22:23 [PATCH 0/2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls Ethan Ferguson
` (2 preceding siblings ...)
2026-02-11 9:21 ` [syzbot ci] Re: fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls syzbot ci
@ 2026-02-11 13:25 ` OGAWA Hirofumi
3 siblings, 0 replies; 8+ messages in thread
From: OGAWA Hirofumi @ 2026-02-11 13:25 UTC (permalink / raw)
To: Ethan Ferguson; +Cc: linux-fsdevel, linux-kernel
Ethan Ferguson <ethan.ferguson@zetier.com> writes:
> Add support for reading / writing to the volume label of a FAT filesystem
> via the FS_IOC_GETFSLABEL and FS_IOC_SETFSLABEL ioctls.
>
> Volume label changes are persisted in the volume label dentry in the root
> directory as well as the bios parameter block.
>
> Some notes about possile deficiencies with this patch:
> 1. If there is no current volume label directory entry present, one is not
> created.
> 2. Changes to the volume label are not checked for validity against the
> current codepage.
As you know, those will be required to implement. Additionally it looks
like missing proper locking.
Thanks.
> Ethan Ferguson (2):
> fat: Add FS_IOC_GETFSLABEL ioctl
> fat: Add FS_IOC_SETFSLABEL ioctl
>
> fs/fat/dir.c | 22 ++++++++++++++++++++++
> fs/fat/fat.h | 2 ++
> fs/fat/file.c | 28 ++++++++++++++++++++++++++++
> fs/fat/inode.c | 26 ++++++++++++++++++++++++--
> 4 files changed, 76 insertions(+), 2 deletions(-)
>
>
> base-commit: 9f2693489ef8558240d9e80bfad103650daed0af
--
OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [syzbot ci] Re: fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls
2026-02-17 23:06 [PATCH v2 " Ethan Ferguson
@ 2026-02-18 8:46 ` syzbot ci
0 siblings, 0 replies; 8+ messages in thread
From: syzbot ci @ 2026-02-18 8:46 UTC (permalink / raw)
To: ethan.ferguson, hirofumi, linux-fsdevel, linux-kernel
Cc: syzbot, syzkaller-bugs
syzbot ci has tested the following series
[v2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls
https://lore.kernel.org/all/20260217230628.719475-1-ethan.ferguson@zetier.com
* [PATCH v2 1/2] fat: Add FS_IOC_GETFSLABEL ioctl
* [PATCH v2 2/2] fat: Add FS_IOC_SETFSLABEL ioctl
and found the following issue:
KASAN: stack-out-of-bounds Write in msdos_format_name
Full report is available here:
https://ci.syzbot.org/series/da73a18c-15c6-438b-8ee3-f34978d4930c
***
KASAN: stack-out-of-bounds Write in msdos_format_name
tree: bpf-next
URL: https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git
base: 9f2693489ef8558240d9e80bfad103650daed0af
arch: amd64
compiler: Debian clang version 21.1.8 (++20251221033036+2078da43e25a-1~exp1~20251221153213.50), Debian LLD 21.1.8
config: https://ci.syzbot.org/builds/972e08c3-3f0c-4dc8-b311-d7aec3efb56b/config
C repro: https://ci.syzbot.org/findings/f100bebc-8929-4992-996b-73c5de2585ba/c_repro
syz repro: https://ci.syzbot.org/findings/f100bebc-8929-4992-996b-73c5de2585ba/syz_repro
loop0: rw=8912896, sector=1192, nr_sectors = 4 limit=256
syz.0.17: attempt to access beyond end of device
loop0: rw=8388608, sector=1192, nr_sectors = 4 limit=256
==================================================================
BUG: KASAN: stack-out-of-bounds in msdos_format_name+0x5fe/0xd90 fs/fat/namei_msdos.c:69
Write of size 1 at addr ffffc90003a27dcb by task syz.0.17/5956
CPU: 0 UID: 0 PID: 5956 Comm: syz.0.17 Not tainted syzkaller #0 PREEMPT(full)
Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014
Call Trace:
<TASK>
dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
print_address_description mm/kasan/report.c:378 [inline]
print_report+0xba/0x230 mm/kasan/report.c:482
kasan_report+0x117/0x150 mm/kasan/report.c:595
msdos_format_name+0x5fe/0xd90 fs/fat/namei_msdos.c:69
fat_convert_volume_label_str fs/fat/file.c:193 [inline]
fat_ioctl_set_volume_label fs/fat/file.c:215 [inline]
fat_generic_ioctl+0xebd/0x12a0 fs/fat/file.c:246
vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:597 [inline]
__se_sys_ioctl+0xfc/0x170 fs/ioctl.c:583
do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
do_syscall_64+0xe2/0xf80 arch/x86/entry/syscall_64.c:94
entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7fa55ed9bf79
Code: ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 e8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007ffe3b0c1748 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007fa55f015fa0 RCX: 00007fa55ed9bf79
RDX: 0000200000000240 RSI: 0000000041009432 RDI: 0000000000000004
RBP: 00007fa55ee327e0 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 00007fa55f015fac R14: 00007fa55f015fa0 R15: 00007fa55f015fa0
</TASK>
The buggy address belongs to stack of task syz.0.17/5956
and is located at offset 427 in frame:
fat_generic_ioctl+0x0/0x12a0
This frame has 4 objects:
[32, 56) 'range.i'
[96, 352) 'from_user.i'
[416, 427) 'new_vol_label.i'
[448, 528) 'ia.i'
The buggy address belongs to a 8-page vmalloc region starting at 0xffffc90003a20000 allocated at copy_process+0x508/0x3980 kernel/fork.c:2052
The buggy address belongs to the physical page:
page: refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1750f7
memcg:ffff888111b31502
flags: 0x57ff00000000000(node=1|zone=2|lastcpupid=0x7ff)
raw: 057ff00000000000 0000000000000000 dead000000000122 0000000000000000
raw: 0000000000000000 0000000000000000 00000001ffffffff ffff888111b31502
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 0, migratetype Unmovable, gfp_mask 0x29c2(GFP_NOWAIT|__GFP_HIGHMEM|__GFP_IO|__GFP_FS|__GFP_ZERO), pid 41, tgid 41 (kworker/u10:2), ts 69338575178, free_ts 66424269276
set_page_owner include/linux/page_owner.h:32 [inline]
post_alloc_hook+0x228/0x280 mm/page_alloc.c:1884
prep_new_page mm/page_alloc.c:1892 [inline]
get_page_from_freelist+0x24dc/0x2580 mm/page_alloc.c:3945
__alloc_frozen_pages_noprof+0x18d/0x380 mm/page_alloc.c:5240
alloc_pages_mpol+0x232/0x4a0 mm/mempolicy.c:2486
alloc_frozen_pages_noprof mm/mempolicy.c:2557 [inline]
alloc_pages_noprof+0xa8/0x190 mm/mempolicy.c:2577
vm_area_alloc_pages mm/vmalloc.c:3649 [inline]
__vmalloc_area_node mm/vmalloc.c:3863 [inline]
__vmalloc_node_range_noprof+0x79b/0x1730 mm/vmalloc.c:4051
__vmalloc_node_noprof+0xc2/0x100 mm/vmalloc.c:4111
alloc_thread_stack_node kernel/fork.c:354 [inline]
dup_task_struct+0x228/0x9a0 kernel/fork.c:923
copy_process+0x508/0x3980 kernel/fork.c:2052
kernel_clone+0x248/0x870 kernel/fork.c:2651
user_mode_thread+0x110/0x180 kernel/fork.c:2727
call_usermodehelper_exec_sync kernel/umh.c:132 [inline]
call_usermodehelper_exec_work+0x9c/0x230 kernel/umh.c:163
process_one_work kernel/workqueue.c:3257 [inline]
process_scheduled_works+0xaec/0x17a0 kernel/workqueue.c:3340
worker_thread+0xda6/0x1360 kernel/workqueue.c:3421
kthread+0x726/0x8b0 kernel/kthread.c:463
ret_from_fork+0x51b/0xa40 arch/x86/kernel/process.c:158
page last free pid 5918 tgid 5918 stack trace:
reset_page_owner include/linux/page_owner.h:25 [inline]
free_pages_prepare mm/page_alloc.c:1433 [inline]
__free_frozen_pages+0xbf8/0xd70 mm/page_alloc.c:2973
discard_slab mm/slub.c:3346 [inline]
__put_partials+0x146/0x170 mm/slub.c:3886
__slab_free+0x294/0x320 mm/slub.c:5956
qlink_free mm/kasan/quarantine.c:163 [inline]
qlist_free_all+0x97/0x100 mm/kasan/quarantine.c:179
kasan_quarantine_reduce+0x148/0x160 mm/kasan/quarantine.c:286
__kasan_slab_alloc+0x22/0x80 mm/kasan/common.c:350
kasan_slab_alloc include/linux/kasan.h:253 [inline]
slab_post_alloc_hook mm/slub.c:4953 [inline]
slab_alloc_node mm/slub.c:5263 [inline]
__kmalloc_cache_noprof+0x36f/0x6e0 mm/slub.c:5775
kmalloc_noprof include/linux/slab.h:957 [inline]
kzalloc_noprof include/linux/slab.h:1094 [inline]
ref_tracker_alloc+0x161/0x4d0 lib/ref_tracker.c:271
__netdev_tracker_alloc include/linux/netdevice.h:4400 [inline]
netdev_hold include/linux/netdevice.h:4429 [inline]
netdev_queue_add_kobject net/core/net-sysfs.c:1994 [inline]
netdev_queue_update_kobjects+0x1d1/0x6c0 net/core/net-sysfs.c:2056
register_queue_kobjects net/core/net-sysfs.c:2119 [inline]
netdev_register_kobject+0x258/0x310 net/core/net-sysfs.c:2362
register_netdevice+0x12a0/0x1cd0 net/core/dev.c:11406
register_netdev+0x40/0x60 net/core/dev.c:11522
loopback_net_init+0x75/0x150 drivers/net/loopback.c:218
ops_init+0x35c/0x5c0 net/core/net_namespace.c:137
setup_net+0x118/0x340 net/core/net_namespace.c:446
copy_net_ns+0x50e/0x730 net/core/net_namespace.c:581
Memory state around the buggy address:
ffffc90003a27c80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffffc90003a27d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffffc90003a27d80: f2 f2 f2 f2 f2 f2 f2 f2 00 03 f2 f2 f8 f8 f8 f8
^
ffffc90003a27e00: f8 f8 f8 f8 f8 f8 f3 f3 f3 f3 f3 f3 00 00 00 00
ffffc90003a27e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
==================================================================
***
If these findings have caused you to resend the series or submit a
separate fix, please add the following tag to your commit message:
Tested-by: syzbot@syzkaller.appspotmail.com
---
This report is generated by a bot. It may contain errors.
syzbot ci engineers can be reached at syzkaller@googlegroups.com.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2026-02-18 8:46 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-10 22:23 [PATCH 0/2] fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls Ethan Ferguson
2026-02-10 22:23 ` [PATCH 1/2] fat: Add FS_IOC_GETFSLABEL ioctl Ethan Ferguson
2026-02-11 10:57 ` Dan Carpenter
2026-02-10 22:23 ` [PATCH 2/2] fat: Add FS_IOC_SETFSLABEL ioctl Ethan Ferguson
2026-02-11 2:26 ` kernel test robot
2026-02-11 9:21 ` [syzbot ci] Re: fat: Add FS_IOC_GETFSLABEL / FS_IOC_SETFSLABEL ioctls syzbot ci
2026-02-11 13:25 ` [PATCH 0/2] " OGAWA Hirofumi
-- strict thread matches above, loose matches on Subject: below --
2026-02-17 23:06 [PATCH v2 " Ethan Ferguson
2026-02-18 8:46 ` [syzbot ci] " syzbot ci
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox