]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ntfs3: add FS_IOC_SETFSLABEL ioctl
authorEthan Ferguson <ethan.ferguson@zetier.com>
Thu, 28 Aug 2025 20:37:16 +0000 (16:37 -0400)
committerKonstantin Komarov <almaz.alexandrovich@paragon-software.com>
Wed, 10 Sep 2025 09:01:38 +0000 (11:01 +0200)
Add support for the FS_IOC_SETFSLABEL ioctl.

Signed-off-by: Ethan Ferguson <ethan.ferguson@zetier.com>
Signed-off-by: Konstantin Komarov <almaz.alexandrovich@paragon-software.com>
fs/ntfs3/file.c

index 0a1e9f16ffaf0092937c85243c874f047f061be5..4c90ec2fa2eae0adea8a656c14cdc08f83852cbb 100644 (file)
@@ -57,6 +57,22 @@ static int ntfs_ioctl_get_volume_label(struct ntfs_sb_info *sbi, u8 __user *buf)
        return 0;
 }
 
+static int ntfs_ioctl_set_volume_label(struct ntfs_sb_info *sbi, u8 __user *buf)
+{
+       u8 user[FSLABEL_MAX] = {0};
+       int len;
+
+       if (!capable(CAP_SYS_ADMIN))
+               return -EPERM;
+
+       if (copy_from_user(user, buf, FSLABEL_MAX))
+               return -EFAULT;
+
+       len = strnlen(user, FSLABEL_MAX);
+
+       return ntfs_set_label(sbi, user, len);
+}
+
 /*
  * ntfs_ioctl - file_operations::unlocked_ioctl
  */
@@ -74,6 +90,8 @@ long ntfs_ioctl(struct file *filp, u32 cmd, unsigned long arg)
                return ntfs_ioctl_fitrim(sbi, arg);
        case FS_IOC_GETFSLABEL:
                return ntfs_ioctl_get_volume_label(sbi, (u8 __user *)arg);
+       case FS_IOC_SETFSLABEL:
+               return ntfs_ioctl_set_volume_label(sbi, (u8 __user *)arg);
        }
        return -ENOTTY; /* Inappropriate ioctl for device. */
 }