Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1370859 > unrolled thread

[PATCH 1/3] orangefs: clean up truncate ctime and mtime setting

Started byMartin Brandenburg <martin@omnibond.com>
First post2016-04-04 22:30 +0200
Last post2016-04-04 22:30 +0200
Articles 9 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 1/3] orangefs: clean up truncate ctime and mtime setting Martin Brandenburg <martin@omnibond.com> - 2016-04-04 22:30 +0200
    [PATCH 2/3] orangefs: strncpy -> strlcpy Martin Brandenburg <martin@omnibond.com> - 2016-04-04 22:30 +0200
      Re: [PATCH 2/3] orangefs: strncpy -> strlcpy Andy Shevchenko <andy.shevchenko@gmail.com> - 2016-04-07 20:40 +0200
        Re: [PATCH 2/3] orangefs: strncpy -> strlcpy Mike Marshall <hubcap@omnibond.com> - 2016-04-07 21:50 +0200
          Re: [PATCH 2/3] orangefs: strncpy -> strlcpy martin@omnibond.com - 2016-04-08 17:40 +0200
            Re: [PATCH 2/3] orangefs: strncpy -> strlcpy Andy Shevchenko <andy.shevchenko@gmail.com> - 2016-04-08 18:10 +0200
              Re: [PATCH 2/3] orangefs: strncpy -> strlcpy martin@omnibond.com - 2016-04-08 19:20 +0200
                [PATCH] orangefs: strncpy -> strscpy Martin Brandenburg <martin@omnibond.com> - 2016-04-08 19:40 +0200
    [PATCH 3/3] orangefs: remove unused variable Martin Brandenburg <martin@omnibond.com> - 2016-04-04 22:30 +0200

#1370859 — [PATCH 1/3] orangefs: clean up truncate ctime and mtime setting

FromMartin Brandenburg <martin@omnibond.com>
Date2016-04-04 22:30 +0200
Subject[PATCH 1/3] orangefs: clean up truncate ctime and mtime setting
Message-ID<rkjii-dT-11@gated-at.bofh.it>
From: Martin Brandenburg <martin@omnibond.com>

The ctime and mtime are always updated on a successful ftruncate and
only updated on a successful truncate where the size changed.

We handle the ``if the size changed'' bit.

This matches FUSE's behavior.

Signed-off-by: Martin Brandenburg <martin@omnibond.com>
---
 fs/orangefs/inode.c | 16 +---------------
 1 file changed, 1 insertion(+), 15 deletions(-)

diff --git a/fs/orangefs/inode.c b/fs/orangefs/inode.c
index 2382e26..975a796 100644
--- a/fs/orangefs/inode.c
+++ b/fs/orangefs/inode.c
@@ -204,22 +204,8 @@ static int orangefs_setattr_size(struct inode *inode, struct iattr *iattr)
 	if (ret != 0)
 		return ret;
 
-	/*
-	 * Only change the c/mtime if we are changing the size or we are
-	 * explicitly asked to change it.  This handles the semantic difference
-	 * between truncate() and ftruncate() as implemented in the VFS.
-	 *
-	 * The regular truncate() case without ATTR_CTIME and ATTR_MTIME is a
-	 * special case where we need to update the times despite not having
-	 * these flags set.  For all other operations the VFS set these flags
-	 * explicitly if it wants a timestamp update.
-	 */
-	if (orig_size != i_size_read(inode) &&
-	    !(iattr->ia_valid & (ATTR_CTIME | ATTR_MTIME))) {
-		iattr->ia_ctime = iattr->ia_mtime =
-			current_fs_time(inode->i_sb);
+	if (orig_size != i_size_read(inode))
 		iattr->ia_valid |= ATTR_CTIME | ATTR_MTIME;
-	}
 
 	return ret;
 }
-- 
2.7.4

[toc] | [next] | [standalone]


#1370875 — [PATCH 2/3] orangefs: strncpy -> strlcpy

FromMartin Brandenburg <martin@omnibond.com>
Date2016-04-04 22:30 +0200
Subject[PATCH 2/3] orangefs: strncpy -> strlcpy
Message-ID<rkjik-dT-49@gated-at.bofh.it>
In reply to#1370859
From: Martin Brandenburg <martin@omnibond.com>

Almost everywhere we use strncpy we should use strlcpy. This affects
path names (d_name mostly), symlink targets, and server names.

Leave debugfs code as is for now, though it could use a review as well.

Signed-off-by: Martin Brandenburg <martin@omnibond.com>
---
 fs/orangefs/dcache.c         |  2 +-
 fs/orangefs/namei.c          | 16 ++++++++--------
 fs/orangefs/orangefs-utils.c |  2 +-
 fs/orangefs/super.c          |  6 +++---
 4 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/fs/orangefs/dcache.c b/fs/orangefs/dcache.c
index 5dfc4f3..0710869 100644
--- a/fs/orangefs/dcache.c
+++ b/fs/orangefs/dcache.c
@@ -30,7 +30,7 @@ static int orangefs_revalidate_lookup(struct dentry *dentry)
 
 	new_op->upcall.req.lookup.sym_follow = ORANGEFS_LOOKUP_LINK_NO_FOLLOW;
 	new_op->upcall.req.lookup.parent_refn = parent->refn;
-	strncpy(new_op->upcall.req.lookup.d_name,
+	strlcpy(new_op->upcall.req.lookup.d_name,
 		dentry->d_name.name,
 		ORANGEFS_NAME_MAX);
 
diff --git a/fs/orangefs/namei.c b/fs/orangefs/namei.c
index 5a60c50..fc7e948 100644
--- a/fs/orangefs/namei.c
+++ b/fs/orangefs/namei.c
@@ -37,7 +37,7 @@ static int orangefs_create(struct inode *dir,
 	fill_default_sys_attrs(new_op->upcall.req.create.attributes,
 			       ORANGEFS_TYPE_METAFILE, mode);
 
-	strncpy(new_op->upcall.req.create.d_name,
+	strlcpy(new_op->upcall.req.create.d_name,
 		dentry->d_name.name, ORANGEFS_NAME_MAX);
 
 	ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
@@ -132,7 +132,7 @@ static struct dentry *orangefs_lookup(struct inode *dir, struct dentry *dentry,
 		     &parent->refn.khandle);
 	new_op->upcall.req.lookup.parent_refn = parent->refn;
 
-	strncpy(new_op->upcall.req.lookup.d_name, dentry->d_name.name,
+	strlcpy(new_op->upcall.req.lookup.d_name, dentry->d_name.name,
 		ORANGEFS_NAME_MAX);
 
 	gossip_debug(GOSSIP_NAME_DEBUG,
@@ -231,7 +231,7 @@ static int orangefs_unlink(struct inode *dir, struct dentry *dentry)
 		return -ENOMEM;
 
 	new_op->upcall.req.remove.parent_refn = parent->refn;
-	strncpy(new_op->upcall.req.remove.d_name, dentry->d_name.name,
+	strlcpy(new_op->upcall.req.remove.d_name, dentry->d_name.name,
 		ORANGEFS_NAME_MAX);
 
 	ret = service_operation(new_op, "orangefs_unlink",
@@ -282,10 +282,10 @@ static int orangefs_symlink(struct inode *dir,
 			       ORANGEFS_TYPE_SYMLINK,
 			       mode);
 
-	strncpy(new_op->upcall.req.sym.entry_name,
+	strlcpy(new_op->upcall.req.sym.entry_name,
 		dentry->d_name.name,
 		ORANGEFS_NAME_MAX);
-	strncpy(new_op->upcall.req.sym.target, symname, ORANGEFS_NAME_MAX);
+	strlcpy(new_op->upcall.req.sym.target, symname, ORANGEFS_NAME_MAX);
 
 	ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
 
@@ -347,7 +347,7 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
 	fill_default_sys_attrs(new_op->upcall.req.mkdir.attributes,
 			      ORANGEFS_TYPE_DIRECTORY, mode);
 
-	strncpy(new_op->upcall.req.mkdir.d_name,
+	strlcpy(new_op->upcall.req.mkdir.d_name,
 		dentry->d_name.name, ORANGEFS_NAME_MAX);
 
 	ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
@@ -419,10 +419,10 @@ static int orangefs_rename(struct inode *old_dir,
 	new_op->upcall.req.rename.old_parent_refn = ORANGEFS_I(old_dir)->refn;
 	new_op->upcall.req.rename.new_parent_refn = ORANGEFS_I(new_dir)->refn;
 
-	strncpy(new_op->upcall.req.rename.d_old_name,
+	strlcpy(new_op->upcall.req.rename.d_old_name,
 		old_dentry->d_name.name,
 		ORANGEFS_NAME_MAX);
-	strncpy(new_op->upcall.req.rename.d_new_name,
+	strlcpy(new_op->upcall.req.rename.d_new_name,
 		new_dentry->d_name.name,
 		ORANGEFS_NAME_MAX);
 
diff --git a/fs/orangefs/orangefs-utils.c b/fs/orangefs/orangefs-utils.c
index 40f5163..d72f3fc 100644
--- a/fs/orangefs/orangefs-utils.c
+++ b/fs/orangefs/orangefs-utils.c
@@ -505,7 +505,7 @@ int orangefs_unmount_sb(struct super_block *sb)
 		return -ENOMEM;
 	new_op->upcall.req.fs_umount.id = ORANGEFS_SB(sb)->id;
 	new_op->upcall.req.fs_umount.fs_id = ORANGEFS_SB(sb)->fs_id;
-	strncpy(new_op->upcall.req.fs_umount.orangefs_config_server,
+	strlcpy(new_op->upcall.req.fs_umount.orangefs_config_server,
 		ORANGEFS_SB(sb)->devname,
 		ORANGEFS_MAX_SERVER_ADDR_LEN);
 
diff --git a/fs/orangefs/super.c b/fs/orangefs/super.c
index b9da9a0..5f9a4ff 100644
--- a/fs/orangefs/super.c
+++ b/fs/orangefs/super.c
@@ -220,7 +220,7 @@ int orangefs_remount(struct orangefs_sb_info_s *orangefs_sb)
 	new_op = op_alloc(ORANGEFS_VFS_OP_FS_MOUNT);
 	if (!new_op)
 		return -ENOMEM;
-	strncpy(new_op->upcall.req.fs_mount.orangefs_config_server,
+	strlcpy(new_op->upcall.req.fs_mount.orangefs_config_server,
 		orangefs_sb->devname,
 		ORANGEFS_MAX_SERVER_ADDR_LEN);
 
@@ -434,7 +434,7 @@ struct dentry *orangefs_mount(struct file_system_type *fst,
 	if (!new_op)
 		return ERR_PTR(-ENOMEM);
 
-	strncpy(new_op->upcall.req.fs_mount.orangefs_config_server,
+	strlcpy(new_op->upcall.req.fs_mount.orangefs_config_server,
 		devname,
 		ORANGEFS_MAX_SERVER_ADDR_LEN);
 
@@ -474,7 +474,7 @@ struct dentry *orangefs_mount(struct file_system_type *fst,
 	 * on successful mount, store the devname and data
 	 * used
 	 */
-	strncpy(ORANGEFS_SB(sb)->devname,
+	strlcpy(ORANGEFS_SB(sb)->devname,
 		devname,
 		ORANGEFS_MAX_SERVER_ADDR_LEN);
 
-- 
2.7.4

[toc] | [prev] | [next] | [standalone]


#1373649 — Re: [PATCH 2/3] orangefs: strncpy -> strlcpy

FromAndy Shevchenko <andy.shevchenko@gmail.com>
Date2016-04-07 20:40 +0200
SubjectRe: [PATCH 2/3] orangefs: strncpy -> strlcpy
Message-ID<rln0u-87S-31@gated-at.bofh.it>
In reply to#1370875
On Mon, Apr 4, 2016 at 11:26 PM, Martin Brandenburg <martin@omnibond.com> wrote:
> From: Martin Brandenburg <martin@omnibond.com>
>
> Almost everywhere we use strncpy we should use strlcpy. This affects
> path names (d_name mostly), symlink targets, and server names.
>
> Leave debugfs code as is for now, though it could use a review as well.
>

|Why not strscpy() as most robust one?

> Signed-off-by: Martin Brandenburg <martin@omnibond.com>
> ---
>  fs/orangefs/dcache.c         |  2 +-
>  fs/orangefs/namei.c          | 16 ++++++++--------
>  fs/orangefs/orangefs-utils.c |  2 +-
>  fs/orangefs/super.c          |  6 +++---
>  4 files changed, 13 insertions(+), 13 deletions(-)
>
> diff --git a/fs/orangefs/dcache.c b/fs/orangefs/dcache.c
> index 5dfc4f3..0710869 100644
> --- a/fs/orangefs/dcache.c
> +++ b/fs/orangefs/dcache.c
> @@ -30,7 +30,7 @@ static int orangefs_revalidate_lookup(struct dentry *dentry)
>
>         new_op->upcall.req.lookup.sym_follow = ORANGEFS_LOOKUP_LINK_NO_FOLLOW;
>         new_op->upcall.req.lookup.parent_refn = parent->refn;
> -       strncpy(new_op->upcall.req.lookup.d_name,
> +       strlcpy(new_op->upcall.req.lookup.d_name,
>                 dentry->d_name.name,
>                 ORANGEFS_NAME_MAX);
>
> diff --git a/fs/orangefs/namei.c b/fs/orangefs/namei.c
> index 5a60c50..fc7e948 100644
> --- a/fs/orangefs/namei.c
> +++ b/fs/orangefs/namei.c
> @@ -37,7 +37,7 @@ static int orangefs_create(struct inode *dir,
>         fill_default_sys_attrs(new_op->upcall.req.create.attributes,
>                                ORANGEFS_TYPE_METAFILE, mode);
>
> -       strncpy(new_op->upcall.req.create.d_name,
> +       strlcpy(new_op->upcall.req.create.d_name,
>                 dentry->d_name.name, ORANGEFS_NAME_MAX);
>
>         ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
> @@ -132,7 +132,7 @@ static struct dentry *orangefs_lookup(struct inode *dir, struct dentry *dentry,
>                      &parent->refn.khandle);
>         new_op->upcall.req.lookup.parent_refn = parent->refn;
>
> -       strncpy(new_op->upcall.req.lookup.d_name, dentry->d_name.name,
> +       strlcpy(new_op->upcall.req.lookup.d_name, dentry->d_name.name,
>                 ORANGEFS_NAME_MAX);
>
>         gossip_debug(GOSSIP_NAME_DEBUG,
> @@ -231,7 +231,7 @@ static int orangefs_unlink(struct inode *dir, struct dentry *dentry)
>                 return -ENOMEM;
>
>         new_op->upcall.req.remove.parent_refn = parent->refn;
> -       strncpy(new_op->upcall.req.remove.d_name, dentry->d_name.name,
> +       strlcpy(new_op->upcall.req.remove.d_name, dentry->d_name.name,
>                 ORANGEFS_NAME_MAX);
>
>         ret = service_operation(new_op, "orangefs_unlink",
> @@ -282,10 +282,10 @@ static int orangefs_symlink(struct inode *dir,
>                                ORANGEFS_TYPE_SYMLINK,
>                                mode);
>
> -       strncpy(new_op->upcall.req.sym.entry_name,
> +       strlcpy(new_op->upcall.req.sym.entry_name,
>                 dentry->d_name.name,
>                 ORANGEFS_NAME_MAX);
> -       strncpy(new_op->upcall.req.sym.target, symname, ORANGEFS_NAME_MAX);
> +       strlcpy(new_op->upcall.req.sym.target, symname, ORANGEFS_NAME_MAX);
>
>         ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
>
> @@ -347,7 +347,7 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
>         fill_default_sys_attrs(new_op->upcall.req.mkdir.attributes,
>                               ORANGEFS_TYPE_DIRECTORY, mode);
>
> -       strncpy(new_op->upcall.req.mkdir.d_name,
> +       strlcpy(new_op->upcall.req.mkdir.d_name,
>                 dentry->d_name.name, ORANGEFS_NAME_MAX);
>
>         ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
> @@ -419,10 +419,10 @@ static int orangefs_rename(struct inode *old_dir,
>         new_op->upcall.req.rename.old_parent_refn = ORANGEFS_I(old_dir)->refn;
>         new_op->upcall.req.rename.new_parent_refn = ORANGEFS_I(new_dir)->refn;
>
> -       strncpy(new_op->upcall.req.rename.d_old_name,
> +       strlcpy(new_op->upcall.req.rename.d_old_name,
>                 old_dentry->d_name.name,
>                 ORANGEFS_NAME_MAX);
> -       strncpy(new_op->upcall.req.rename.d_new_name,
> +       strlcpy(new_op->upcall.req.rename.d_new_name,
>                 new_dentry->d_name.name,
>                 ORANGEFS_NAME_MAX);
>
> diff --git a/fs/orangefs/orangefs-utils.c b/fs/orangefs/orangefs-utils.c
> index 40f5163..d72f3fc 100644
> --- a/fs/orangefs/orangefs-utils.c
> +++ b/fs/orangefs/orangefs-utils.c
> @@ -505,7 +505,7 @@ int orangefs_unmount_sb(struct super_block *sb)
>                 return -ENOMEM;
>         new_op->upcall.req.fs_umount.id = ORANGEFS_SB(sb)->id;
>         new_op->upcall.req.fs_umount.fs_id = ORANGEFS_SB(sb)->fs_id;
> -       strncpy(new_op->upcall.req.fs_umount.orangefs_config_server,
> +       strlcpy(new_op->upcall.req.fs_umount.orangefs_config_server,
>                 ORANGEFS_SB(sb)->devname,
>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>
> diff --git a/fs/orangefs/super.c b/fs/orangefs/super.c
> index b9da9a0..5f9a4ff 100644
> --- a/fs/orangefs/super.c
> +++ b/fs/orangefs/super.c
> @@ -220,7 +220,7 @@ int orangefs_remount(struct orangefs_sb_info_s *orangefs_sb)
>         new_op = op_alloc(ORANGEFS_VFS_OP_FS_MOUNT);
>         if (!new_op)
>                 return -ENOMEM;
> -       strncpy(new_op->upcall.req.fs_mount.orangefs_config_server,
> +       strlcpy(new_op->upcall.req.fs_mount.orangefs_config_server,
>                 orangefs_sb->devname,
>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>
> @@ -434,7 +434,7 @@ struct dentry *orangefs_mount(struct file_system_type *fst,
>         if (!new_op)
>                 return ERR_PTR(-ENOMEM);
>
> -       strncpy(new_op->upcall.req.fs_mount.orangefs_config_server,
> +       strlcpy(new_op->upcall.req.fs_mount.orangefs_config_server,
>                 devname,
>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>
> @@ -474,7 +474,7 @@ struct dentry *orangefs_mount(struct file_system_type *fst,
>          * on successful mount, store the devname and data
>          * used
>          */
> -       strncpy(ORANGEFS_SB(sb)->devname,
> +       strlcpy(ORANGEFS_SB(sb)->devname,
>                 devname,
>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>
> --
> 2.7.4
>



-- 
With Best Regards,
Andy Shevchenko

[toc] | [prev] | [next] | [standalone]


#1373708 — Re: [PATCH 2/3] orangefs: strncpy -> strlcpy

FromMike Marshall <hubcap@omnibond.com>
Date2016-04-07 21:50 +0200
SubjectRe: [PATCH 2/3] orangefs: strncpy -> strlcpy
Message-ID<rlo6e-o4-11@gated-at.bofh.it>
In reply to#1373649
It looks like strscpy went in last October... there are
no users of it yet. I was just about to send in a pull request
that includes Martin's strncpy->strlcpy patch when I saw
Andy's comment.

Linus said when he pulled strscpy:

> So I'm pulling the strscpy() support because it *is* a better interface.
> But I will refuse to pull mindless conversion patches.  Use this in
> places where it makes sense, but don't do trivial patches to fix things
> that aren't actually known to be broken.

Maybe it makes sense for our strncpy->strlcpy patch to be a strscpy
patch instead? Maybe our strncpy->strlcpy patch is itself a
"mindless conversion patch"? (I don't think so)...

I'll wait until tomorrow, and then send my pull request as it is, unless
everyone chimes in and says "use strscpy!"...

-Mike

On Thu, Apr 7, 2016 at 2:39 PM, Andy Shevchenko
<andy.shevchenko@gmail.com> wrote:
> On Mon, Apr 4, 2016 at 11:26 PM, Martin Brandenburg <martin@omnibond.com> wrote:
>> From: Martin Brandenburg <martin@omnibond.com>
>>
>> Almost everywhere we use strncpy we should use strlcpy. This affects
>> path names (d_name mostly), symlink targets, and server names.
>>
>> Leave debugfs code as is for now, though it could use a review as well.
>>
>
> |Why not strscpy() as most robust one?
>
>> Signed-off-by: Martin Brandenburg <martin@omnibond.com>
>> ---
>>  fs/orangefs/dcache.c         |  2 +-
>>  fs/orangefs/namei.c          | 16 ++++++++--------
>>  fs/orangefs/orangefs-utils.c |  2 +-
>>  fs/orangefs/super.c          |  6 +++---
>>  4 files changed, 13 insertions(+), 13 deletions(-)
>>
>> diff --git a/fs/orangefs/dcache.c b/fs/orangefs/dcache.c
>> index 5dfc4f3..0710869 100644
>> --- a/fs/orangefs/dcache.c
>> +++ b/fs/orangefs/dcache.c
>> @@ -30,7 +30,7 @@ static int orangefs_revalidate_lookup(struct dentry *dentry)
>>
>>         new_op->upcall.req.lookup.sym_follow = ORANGEFS_LOOKUP_LINK_NO_FOLLOW;
>>         new_op->upcall.req.lookup.parent_refn = parent->refn;
>> -       strncpy(new_op->upcall.req.lookup.d_name,
>> +       strlcpy(new_op->upcall.req.lookup.d_name,
>>                 dentry->d_name.name,
>>                 ORANGEFS_NAME_MAX);
>>
>> diff --git a/fs/orangefs/namei.c b/fs/orangefs/namei.c
>> index 5a60c50..fc7e948 100644
>> --- a/fs/orangefs/namei.c
>> +++ b/fs/orangefs/namei.c
>> @@ -37,7 +37,7 @@ static int orangefs_create(struct inode *dir,
>>         fill_default_sys_attrs(new_op->upcall.req.create.attributes,
>>                                ORANGEFS_TYPE_METAFILE, mode);
>>
>> -       strncpy(new_op->upcall.req.create.d_name,
>> +       strlcpy(new_op->upcall.req.create.d_name,
>>                 dentry->d_name.name, ORANGEFS_NAME_MAX);
>>
>>         ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
>> @@ -132,7 +132,7 @@ static struct dentry *orangefs_lookup(struct inode *dir, struct dentry *dentry,
>>                      &parent->refn.khandle);
>>         new_op->upcall.req.lookup.parent_refn = parent->refn;
>>
>> -       strncpy(new_op->upcall.req.lookup.d_name, dentry->d_name.name,
>> +       strlcpy(new_op->upcall.req.lookup.d_name, dentry->d_name.name,
>>                 ORANGEFS_NAME_MAX);
>>
>>         gossip_debug(GOSSIP_NAME_DEBUG,
>> @@ -231,7 +231,7 @@ static int orangefs_unlink(struct inode *dir, struct dentry *dentry)
>>                 return -ENOMEM;
>>
>>         new_op->upcall.req.remove.parent_refn = parent->refn;
>> -       strncpy(new_op->upcall.req.remove.d_name, dentry->d_name.name,
>> +       strlcpy(new_op->upcall.req.remove.d_name, dentry->d_name.name,
>>                 ORANGEFS_NAME_MAX);
>>
>>         ret = service_operation(new_op, "orangefs_unlink",
>> @@ -282,10 +282,10 @@ static int orangefs_symlink(struct inode *dir,
>>                                ORANGEFS_TYPE_SYMLINK,
>>                                mode);
>>
>> -       strncpy(new_op->upcall.req.sym.entry_name,
>> +       strlcpy(new_op->upcall.req.sym.entry_name,
>>                 dentry->d_name.name,
>>                 ORANGEFS_NAME_MAX);
>> -       strncpy(new_op->upcall.req.sym.target, symname, ORANGEFS_NAME_MAX);
>> +       strlcpy(new_op->upcall.req.sym.target, symname, ORANGEFS_NAME_MAX);
>>
>>         ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
>>
>> @@ -347,7 +347,7 @@ static int orangefs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode
>>         fill_default_sys_attrs(new_op->upcall.req.mkdir.attributes,
>>                               ORANGEFS_TYPE_DIRECTORY, mode);
>>
>> -       strncpy(new_op->upcall.req.mkdir.d_name,
>> +       strlcpy(new_op->upcall.req.mkdir.d_name,
>>                 dentry->d_name.name, ORANGEFS_NAME_MAX);
>>
>>         ret = service_operation(new_op, __func__, get_interruptible_flag(dir));
>> @@ -419,10 +419,10 @@ static int orangefs_rename(struct inode *old_dir,
>>         new_op->upcall.req.rename.old_parent_refn = ORANGEFS_I(old_dir)->refn;
>>         new_op->upcall.req.rename.new_parent_refn = ORANGEFS_I(new_dir)->refn;
>>
>> -       strncpy(new_op->upcall.req.rename.d_old_name,
>> +       strlcpy(new_op->upcall.req.rename.d_old_name,
>>                 old_dentry->d_name.name,
>>                 ORANGEFS_NAME_MAX);
>> -       strncpy(new_op->upcall.req.rename.d_new_name,
>> +       strlcpy(new_op->upcall.req.rename.d_new_name,
>>                 new_dentry->d_name.name,
>>                 ORANGEFS_NAME_MAX);
>>
>> diff --git a/fs/orangefs/orangefs-utils.c b/fs/orangefs/orangefs-utils.c
>> index 40f5163..d72f3fc 100644
>> --- a/fs/orangefs/orangefs-utils.c
>> +++ b/fs/orangefs/orangefs-utils.c
>> @@ -505,7 +505,7 @@ int orangefs_unmount_sb(struct super_block *sb)
>>                 return -ENOMEM;
>>         new_op->upcall.req.fs_umount.id = ORANGEFS_SB(sb)->id;
>>         new_op->upcall.req.fs_umount.fs_id = ORANGEFS_SB(sb)->fs_id;
>> -       strncpy(new_op->upcall.req.fs_umount.orangefs_config_server,
>> +       strlcpy(new_op->upcall.req.fs_umount.orangefs_config_server,
>>                 ORANGEFS_SB(sb)->devname,
>>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>>
>> diff --git a/fs/orangefs/super.c b/fs/orangefs/super.c
>> index b9da9a0..5f9a4ff 100644
>> --- a/fs/orangefs/super.c
>> +++ b/fs/orangefs/super.c
>> @@ -220,7 +220,7 @@ int orangefs_remount(struct orangefs_sb_info_s *orangefs_sb)
>>         new_op = op_alloc(ORANGEFS_VFS_OP_FS_MOUNT);
>>         if (!new_op)
>>                 return -ENOMEM;
>> -       strncpy(new_op->upcall.req.fs_mount.orangefs_config_server,
>> +       strlcpy(new_op->upcall.req.fs_mount.orangefs_config_server,
>>                 orangefs_sb->devname,
>>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>>
>> @@ -434,7 +434,7 @@ struct dentry *orangefs_mount(struct file_system_type *fst,
>>         if (!new_op)
>>                 return ERR_PTR(-ENOMEM);
>>
>> -       strncpy(new_op->upcall.req.fs_mount.orangefs_config_server,
>> +       strlcpy(new_op->upcall.req.fs_mount.orangefs_config_server,
>>                 devname,
>>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>>
>> @@ -474,7 +474,7 @@ struct dentry *orangefs_mount(struct file_system_type *fst,
>>          * on successful mount, store the devname and data
>>          * used
>>          */
>> -       strncpy(ORANGEFS_SB(sb)->devname,
>> +       strlcpy(ORANGEFS_SB(sb)->devname,
>>                 devname,
>>                 ORANGEFS_MAX_SERVER_ADDR_LEN);
>>
>> --
>> 2.7.4
>>
>
>
>
> --
> With Best Regards,
> Andy Shevchenko

[toc] | [prev] | [next] | [standalone]


#1374316 — Re: [PATCH 2/3] orangefs: strncpy -> strlcpy

Frommartin@omnibond.com
Date2016-04-08 17:40 +0200
SubjectRe: [PATCH 2/3] orangefs: strncpy -> strlcpy
Message-ID<rlGFQ-60n-19@gated-at.bofh.it>
In reply to#1373708
> On Thu, Apr 7, 2016 at 2:39 PM, Andy Shevchenko
> <andy.shevchenko@gmail.com> wrote:
> > On Mon, Apr 4, 2016 at 11:26 PM, Martin Brandenburg <martin@omnibond.com> wrote:
> >> From: Martin Brandenburg <martin@omnibond.com>
> >>
> >> Almost everywhere we use strncpy we should use strlcpy. This affects
> >> path names (d_name mostly), symlink targets, and server names.
> >>
> >> Leave debugfs code as is for now, though it could use a review as well.
> >>
> >
> > |Why not strscpy() as most robust one?

Mostly because I hadn't heard about strscpy.

On Thu, 7 Apr 2016, Mike Marshall wrote:

> It looks like strscpy went in last October... there are
> no users of it yet. I was just about to send in a pull request
> that includes Martin's strncpy->strlcpy patch when I saw
> Andy's comment.
> 
> Linus said when he pulled strscpy:
> 
> > So I'm pulling the strscpy() support because it *is* a better interface.
> > But I will refuse to pull mindless conversion patches.  Use this in
> > places where it makes sense, but don't do trivial patches to fix things
> > that aren't actually known to be broken.
> 
> Maybe it makes sense for our strncpy->strlcpy patch to be a strscpy
> patch instead? Maybe our strncpy->strlcpy patch is itself a
> "mindless conversion patch"? (I don't think so)...

There is something broken! If the client-core sends in a
string with no NUL terminator, we would blindly copy it
into the d_name with strncpy.

> 
> I'll wait until tomorrow, and then send my pull request as it is, unless
> everyone chimes in and says "use strscpy!"...
> 
> -Mike

After looking over strscpy I don't see a compelling
reason not to go ahead and use it while we're fixing up
this code.

-- Martin

[toc] | [prev] | [next] | [standalone]


#1374339 — Re: [PATCH 2/3] orangefs: strncpy -> strlcpy

FromAndy Shevchenko <andy.shevchenko@gmail.com>
Date2016-04-08 18:10 +0200
SubjectRe: [PATCH 2/3] orangefs: strncpy -> strlcpy
Message-ID<rlH8S-6t5-17@gated-at.bofh.it>
In reply to#1374316
On Fri, Apr 8, 2016 at 6:34 PM,  <martin@omnibond.com> wrote:
>> On Thu, Apr 7, 2016 at 2:39 PM, Andy Shevchenko
>> <andy.shevchenko@gmail.com> wrote:
>> > On Mon, Apr 4, 2016 at 11:26 PM, Martin Brandenburg <martin@omnibond.com> wrote:
>> >> From: Martin Brandenburg <martin@omnibond.com>
>> >>
>> >> Almost everywhere we use strncpy we should use strlcpy. This affects
>> >> path names (d_name mostly), symlink targets, and server names.
>> >>
>> >> Leave debugfs code as is for now, though it could use a review as well.
>> >>
>> >
>> > |Why not strscpy() as most robust one?
>
> Mostly because I hadn't heard about strscpy.

It was nice story how he applied it to the tree.

>> It looks like strscpy went in last October... there are
>> no users of it yet. I was just about to send in a pull request
>> that includes Martin's strncpy->strlcpy patch when I saw
>> Andy's comment.
>>
>> Linus said when he pulled strscpy:

> After looking over strscpy I don't see a compelling
> reason not to go ahead and use it while we're fixing up
> this code.

I recommend to mention that this is a fix explicitly in the commit
message, currently it sounds like a meaningless patch of trainee.

-- 
With Best Regards,
Andy Shevchenko

[toc] | [prev] | [next] | [standalone]


#1374375 — Re: [PATCH 2/3] orangefs: strncpy -> strlcpy

Frommartin@omnibond.com
Date2016-04-08 19:20 +0200
SubjectRe: [PATCH 2/3] orangefs: strncpy -> strlcpy
Message-ID<rlIeC-7gb-3@gated-at.bofh.it>
In reply to#1374339
On Fri, 8 Apr 2016, Andy Shevchenko wrote:

> On Fri, Apr 8, 2016 at 6:34 PM,  <martin@omnibond.com> wrote:
> >> On Thu, Apr 7, 2016 at 2:39 PM, Andy Shevchenko
> >> <andy.shevchenko@gmail.com> wrote:
> >> > On Mon, Apr 4, 2016 at 11:26 PM, Martin Brandenburg <martin@omnibond.com> wrote:
> >> >> From: Martin Brandenburg <martin@omnibond.com>
> >> >>
> >> >> Almost everywhere we use strncpy we should use strlcpy. This affects
> >> >> path names (d_name mostly), symlink targets, and server names.
> >> >>
> >> >> Leave debugfs code as is for now, though it could use a review as well.
> >> >>
> >> >
> >> > |Why not strscpy() as most robust one?
> >
> > Mostly because I hadn't heard about strscpy.
> 
> It was nice story how he applied it to the tree.

Just read it..

> 
> >> It looks like strscpy went in last October... there are
> >> no users of it yet. I was just about to send in a pull request
> >> that includes Martin's strncpy->strlcpy patch when I saw
> >> Andy's comment.
> >>
> >> Linus said when he pulled strscpy:
> 
> > After looking over strscpy I don't see a compelling
> > reason not to go ahead and use it while we're fixing up
> > this code.
> 
> I recommend to mention that this is a fix explicitly in the commit
> message, currently it sounds like a meaningless patch of trainee.

I've decided to scrap most of this, but one change is
important. Most of it is a no-op because the client-core
buffer is larger than NAME_MAX and there is always room.
Replying with patch in a minute.

Thanks for the review!

Mike, I think we can delay this one for later so we can
look at the debugfs and superblock code in more detail.

-- Martin

> 
> -- 
> With Best Regards,
> Andy Shevchenko
> 

[toc] | [prev] | [next] | [standalone]


#1374391 — [PATCH] orangefs: strncpy -> strscpy

FromMartin Brandenburg <martin@omnibond.com>
Date2016-04-08 19:40 +0200
Subject[PATCH] orangefs: strncpy -> strscpy
Message-ID<rlIy0-7r6-51@gated-at.bofh.it>
In reply to#1374375
It would have been possible for a rogue client-core to send in a symlink
target which is not NUL terminated. This returns EIO if the client-core
gives us corrupt data.

Leave debugfs and superblock code as is for now.

Other dcache.c and namei.c strncpy instances are safe because
ORANGEFS_NAME_MAX = NAME_MAX + 1; there is always enough space for a
name plus a NUL byte.

Signed-off-by: Martin Brandenburg <martin@omnibond.com>
---
 fs/orangefs/orangefs-utils.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/fs/orangefs/orangefs-utils.c b/fs/orangefs/orangefs-utils.c
index 40f5163..f392a6a 100644
--- a/fs/orangefs/orangefs-utils.c
+++ b/fs/orangefs/orangefs-utils.c
@@ -315,9 +315,13 @@ int orangefs_inode_getattr(struct inode *inode, int new, int size)
 			inode->i_size = (loff_t)strlen(new_op->
 			    downcall.resp.getattr.link_target);
 			orangefs_inode->blksize = (1 << inode->i_blkbits);
-			strlcpy(orangefs_inode->link_target,
+			ret = strscpy(orangefs_inode->link_target,
 			    new_op->downcall.resp.getattr.link_target,
 			    ORANGEFS_NAME_MAX);
+			if (ret == -E2BIG) {
+				ret = -EIO;
+				goto out;
+			}
 			inode->i_link = orangefs_inode->link_target;
 		}
 		break;
-- 
1.8.3.1

[toc] | [prev] | [next] | [standalone]


#1370876 — [PATCH 3/3] orangefs: remove unused variable

FromMartin Brandenburg <martin@omnibond.com>
Date2016-04-04 22:30 +0200
Subject[PATCH 3/3] orangefs: remove unused variable
Message-ID<rkjik-dT-51@gated-at.bofh.it>
In reply to#1370859
From: Martin Brandenburg <martin@omnibond.com>

---
 fs/orangefs/dir.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/fs/orangefs/dir.c b/fs/orangefs/dir.c
index ba7dec4..324f0af 100644
--- a/fs/orangefs/dir.c
+++ b/fs/orangefs/dir.c
@@ -153,7 +153,6 @@ static int orangefs_readdir(struct file *file, struct dir_context *ctx)
 	struct dentry *dentry = file->f_path.dentry;
 	struct orangefs_kernel_op_s *new_op = NULL;
 	struct orangefs_inode_s *orangefs_inode = ORANGEFS_I(dentry->d_inode);
-	int buffer_full = 0;
 	struct orangefs_readdir_response_s readdir_response;
 	void *dents_buf;
 	int i = 0;
@@ -350,8 +349,7 @@ get_new_buffer_index:
 	/*
 	 * Did we hit the end of the directory?
 	 */
-	if (readdir_response.token == ORANGEFS_READDIR_END &&
-	    !buffer_full) {
+	if (readdir_response.token == ORANGEFS_READDIR_END) {
 		gossip_debug(GOSSIP_DIR_DEBUG,
 		"End of dir detected; setting ctx->pos to ORANGEFS_READDIR_END.\n");
 		ctx->pos = ORANGEFS_READDIR_END;
-- 
2.7.4

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web