lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <CAHc6FU5C3n2wyO91gcDVLGr643d1Y5e4xPmM1d9rw18A=fod9g@mail.gmail.com>
Date: Mon, 22 Sep 2025 23:35:42 +0200
From: Andreas Gruenbacher <agruenba@...hat.com>
To: Utkarsh Singh <utkarsh.singh.em@...il.com>
Cc: gfs2@...ts.linux.dev, linux-kernel@...r.kernel.org, 
	skhan@...uxfoundation.org, rpeterso@...hat.com, david.hunter.linux@...il.com
Subject: Re: [PATCH v2] gfs2/sysfs: Replace sprintf/snprintf with sysfs_emit()

On Mon, Sep 22, 2025 at 7:53 PM Utkarsh Singh
<utkarsh.singh.em@...il.com> wrote:
> Documentation/filesystems/sysfs.rst mentions that show() should only
> use sysfs_emit() or sysfs_emit_at() when formatting values returned
> to user space. This patch updates the GFS2 sysfs interface accordingly.
>
> It replaces uses of sprintf() and snprintf() in all *_show() functions
> with sysfs_emit() to align with current kernel sysfs API best practices.

I've applied that part. I'm not pushing this into the upcoming merge
window anymore, though.

> It also updates the GFS2_SHOW_UINT macro to use sysfs_emit() instead
> of snprintf().

Huh, what's that?

> Signed-off-by: Utkarsh Singh <utkarsh.singh.em@...il.com>
> ---
>  v1 --> v2: Code style cleanup and maintainer updates
>
>  fs/gfs2/sys.c | 32 ++++++++++++++++----------------
>  1 file changed, 16 insertions(+), 16 deletions(-)
>
> diff --git a/fs/gfs2/sys.c b/fs/gfs2/sys.c
> index c3c8842920d2..487fff098465 100644
> --- a/fs/gfs2/sys.c
> +++ b/fs/gfs2/sys.c
> @@ -59,7 +59,7 @@ static struct kset *gfs2_kset;
>
>  static ssize_t id_show(struct gfs2_sbd *sdp, char *buf)
>  {
> -       return snprintf(buf, PAGE_SIZE, "%u:%u\n",
> +       return sysfs_emit(buf, "%u:%u\n",
>                         MAJOR(sdp->sd_vfs->s_dev), MINOR(sdp->sd_vfs->s_dev));
>  }
>
> @@ -68,7 +68,7 @@ static ssize_t status_show(struct gfs2_sbd *sdp, char *buf)
>         unsigned long f = sdp->sd_flags;
>         ssize_t s;
>
> -       s = snprintf(buf, PAGE_SIZE,
> +       s = sysfs_emit(buf,
>                      "Journal Checked:          %d\n"
>                      "Journal Live:             %d\n"
>                      "Journal ID:               %d\n"
> @@ -140,7 +140,7 @@ static ssize_t status_show(struct gfs2_sbd *sdp, char *buf)
>
>  static ssize_t fsname_show(struct gfs2_sbd *sdp, char *buf)
>  {
> -       return snprintf(buf, PAGE_SIZE, "%s\n", sdp->sd_fsname);
> +       return sysfs_emit(buf, "%s\n", sdp->sd_fsname);
>  }
>
>  static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf)
> @@ -150,7 +150,7 @@ static ssize_t uuid_show(struct gfs2_sbd *sdp, char *buf)
>         buf[0] = '\0';
>         if (uuid_is_null(&s->s_uuid))
>                 return 0;
> -       return snprintf(buf, PAGE_SIZE, "%pUB\n", &s->s_uuid);
> +       return sysfs_emit(buf, "%pUB\n", &s->s_uuid);
>  }
>
>  static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf)
> @@ -158,7 +158,7 @@ static ssize_t freeze_show(struct gfs2_sbd *sdp, char *buf)
>         struct super_block *sb = sdp->sd_vfs;
>         int frozen = (sb->s_writers.frozen == SB_UNFROZEN) ? 0 : 1;
>
> -       return snprintf(buf, PAGE_SIZE, "%d\n", frozen);
> +       return sysfs_emit(buf, "%d\n", frozen);
>  }
>
>  static ssize_t freeze_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
> @@ -194,7 +194,7 @@ static ssize_t freeze_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
>  static ssize_t withdraw_show(struct gfs2_sbd *sdp, char *buf)
>  {
>         unsigned int b = gfs2_withdrawing_or_withdrawn(sdp);
> -       return snprintf(buf, PAGE_SIZE, "%u\n", b);
> +       return sysfs_emit(buf, "%u\n", b);
>  }
>
>  static ssize_t withdraw_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
> @@ -397,7 +397,7 @@ static struct kobj_type gfs2_ktype = {
>  static ssize_t proto_name_show(struct gfs2_sbd *sdp, char *buf)
>  {
>         const struct lm_lockops *ops = sdp->sd_lockstruct.ls_ops;
> -       return sprintf(buf, "%s\n", ops->lm_proto_name);
> +       return sysfs_emit(buf, "%s\n", ops->lm_proto_name);
>  }
>
>  static ssize_t block_show(struct gfs2_sbd *sdp, char *buf)
> @@ -408,7 +408,7 @@ static ssize_t block_show(struct gfs2_sbd *sdp, char *buf)
>
>         if (test_bit(DFL_BLOCK_LOCKS, &ls->ls_recover_flags))
>                 val = 1;
> -       ret = sprintf(buf, "%d\n", val);
> +       ret = sysfs_emit(buf, "%d\n", val);
>         return ret;
>  }
>
> @@ -437,7 +437,7 @@ static ssize_t wdack_show(struct gfs2_sbd *sdp, char *buf)
>  {
>         int val = completion_done(&sdp->sd_wdack) ? 1 : 0;
>
> -       return sprintf(buf, "%d\n", val);
> +       return sysfs_emit(buf, "%d\n", val);
>  }
>
>  static ssize_t wdack_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
> @@ -459,7 +459,7 @@ static ssize_t wdack_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
>  static ssize_t lkfirst_show(struct gfs2_sbd *sdp, char *buf)
>  {
>         struct lm_lockstruct *ls = &sdp->sd_lockstruct;
> -       return sprintf(buf, "%d\n", ls->ls_first);
> +       return sysfs_emit(buf, "%d\n", ls->ls_first);
>  }
>
>  static ssize_t lkfirst_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
> @@ -492,7 +492,7 @@ static ssize_t lkfirst_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
>  static ssize_t first_done_show(struct gfs2_sbd *sdp, char *buf)
>  {
>         struct lm_lockstruct *ls = &sdp->sd_lockstruct;
> -       return sprintf(buf, "%d\n", !!test_bit(DFL_FIRST_MOUNT_DONE, &ls->ls_recover_flags));
> +       return sysfs_emit(buf, "%d\n", !!test_bit(DFL_FIRST_MOUNT_DONE, &ls->ls_recover_flags));
>  }
>
>  int gfs2_recover_set(struct gfs2_sbd *sdp, unsigned jid)
> @@ -550,18 +550,18 @@ static ssize_t recover_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
>  static ssize_t recover_done_show(struct gfs2_sbd *sdp, char *buf)
>  {
>         struct lm_lockstruct *ls = &sdp->sd_lockstruct;
> -       return sprintf(buf, "%d\n", ls->ls_recover_jid_done);
> +       return sysfs_emit(buf, "%d\n", ls->ls_recover_jid_done);
>  }
>
>  static ssize_t recover_status_show(struct gfs2_sbd *sdp, char *buf)
>  {
>         struct lm_lockstruct *ls = &sdp->sd_lockstruct;
> -       return sprintf(buf, "%d\n", ls->ls_recover_jid_status);
> +       return sysfs_emit(buf, "%d\n", ls->ls_recover_jid_status);
>  }
>
>  static ssize_t jid_show(struct gfs2_sbd *sdp, char *buf)
>  {
> -       return sprintf(buf, "%d\n", sdp->sd_lockstruct.ls_jid);
> +       return sysfs_emit(buf, "%d\n", sdp->sd_lockstruct.ls_jid);
>  }
>
>  static ssize_t jid_store(struct gfs2_sbd *sdp, const char *buf, size_t len)
> @@ -626,7 +626,7 @@ static struct attribute *lock_module_attrs[] = {
>
>  static ssize_t quota_scale_show(struct gfs2_sbd *sdp, char *buf)
>  {
> -       return snprintf(buf, PAGE_SIZE, "%u %u\n",
> +       return sysfs_emit(buf, "%u %u\n",
>                         sdp->sd_tune.gt_quota_scale_num,
>                         sdp->sd_tune.gt_quota_scale_den);
>  }
> @@ -679,7 +679,7 @@ static struct gfs2_attr tune_attr_##name = __ATTR(name, 0644, show, store)
>  #define TUNE_ATTR_2(name, store)                                              \
>  static ssize_t name##_show(struct gfs2_sbd *sdp, char *buf)                   \
>  {                                                                             \
> -       return snprintf(buf, PAGE_SIZE, "%u\n", sdp->sd_tune.gt_##name);      \
> +       return sysfs_emit(buf, "%u\n", sdp->sd_tune.gt_##name);               \
>  }                                                                             \
>  TUNE_ATTR_3(name, name##_show, store)
>
> --
> 2.43.0
>

Thanks,
Andreas


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ