Re: [PATCH] mm/shmem.c: check the return value of mpol_to_str()
Hello Maintainers: Please help check this patch, when you have time. If it need additional test, please let me know, I should try (better to provide some suggestions for test). Thanks. On 08/22/2013 09:04 AM, Chen Gang wrote: > mpol_to_str() may fail, and not fill the buffer (e.g. -EINVAL), so need > check about it, or buffer may not be zero based, and next seq_printf() > will cause issue. > > Also need let shmem_show_mpol() return value, since it may fail. > > Signed-off-by: Chen Gang > Reviewed-by: Cyrill Gorcunov > --- > mm/shmem.c | 16 ++-- > 1 files changed, 10 insertions(+), 6 deletions(-) > > diff --git a/mm/shmem.c b/mm/shmem.c > index f00c1c1..b4d44db 100644 > --- a/mm/shmem.c > +++ b/mm/shmem.c > @@ -883,16 +883,20 @@ redirty: > > #ifdef CONFIG_NUMA > #ifdef CONFIG_TMPFS > -static void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) > +static int shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) > { > char buffer[64]; > + int ret; > > if (!mpol || mpol->mode == MPOL_DEFAULT) > - return; /* show nothing */ > + return 0; /* show nothing */ > > - mpol_to_str(buffer, sizeof(buffer), mpol); > + ret = mpol_to_str(buffer, sizeof(buffer), mpol); > + if (ret < 0) > + return ret; > > seq_printf(seq, ",mpol=%s", buffer); > + return 0; > } > > static struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo) > @@ -951,8 +955,9 @@ static struct page *shmem_alloc_page(gfp_t gfp, > } > #else /* !CONFIG_NUMA */ > #ifdef CONFIG_TMPFS > -static inline void shmem_show_mpol(struct seq_file *seq, struct mempolicy > *mpol) > +static inline int shmem_show_mpol(struct seq_file *seq, struct mempolicy > *mpol) > { > + return 0; > } > #endif /* CONFIG_TMPFS */ > > @@ -2555,8 +2560,7 @@ static int shmem_show_options(struct seq_file *seq, > struct dentry *root) > if (!gid_eq(sbinfo->gid, GLOBAL_ROOT_GID)) > seq_printf(seq, ",gid=%u", > from_kgid_munged(_user_ns, sbinfo->gid)); > - shmem_show_mpol(seq, sbinfo->mpol); > - return 0; > + return shmem_show_mpol(seq, sbinfo->mpol); > } > #endif /* CONFIG_TMPFS */ > > -- Chen Gang -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] mm/shmem.c: check the return value of mpol_to_str()
Hello Maintainers: Please help check this patch, when you have time. If it need additional test, please let me know, I should try (better to provide some suggestions for test). Thanks. On 08/22/2013 09:04 AM, Chen Gang wrote: mpol_to_str() may fail, and not fill the buffer (e.g. -EINVAL), so need check about it, or buffer may not be zero based, and next seq_printf() will cause issue. Also need let shmem_show_mpol() return value, since it may fail. Signed-off-by: Chen Gang gang.c...@asianux.com Reviewed-by: Cyrill Gorcunov gorcu...@gmail.com --- mm/shmem.c | 16 ++-- 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index f00c1c1..b4d44db 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -883,16 +883,20 @@ redirty: #ifdef CONFIG_NUMA #ifdef CONFIG_TMPFS -static void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) +static int shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) { char buffer[64]; + int ret; if (!mpol || mpol-mode == MPOL_DEFAULT) - return; /* show nothing */ + return 0; /* show nothing */ - mpol_to_str(buffer, sizeof(buffer), mpol); + ret = mpol_to_str(buffer, sizeof(buffer), mpol); + if (ret 0) + return ret; seq_printf(seq, ,mpol=%s, buffer); + return 0; } static struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo) @@ -951,8 +955,9 @@ static struct page *shmem_alloc_page(gfp_t gfp, } #else /* !CONFIG_NUMA */ #ifdef CONFIG_TMPFS -static inline void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) +static inline int shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) { + return 0; } #endif /* CONFIG_TMPFS */ @@ -2555,8 +2560,7 @@ static int shmem_show_options(struct seq_file *seq, struct dentry *root) if (!gid_eq(sbinfo-gid, GLOBAL_ROOT_GID)) seq_printf(seq, ,gid=%u, from_kgid_munged(init_user_ns, sbinfo-gid)); - shmem_show_mpol(seq, sbinfo-mpol); - return 0; + return shmem_show_mpol(seq, sbinfo-mpol); } #endif /* CONFIG_TMPFS */ -- Chen Gang -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] mm/shmem.c: check the return value of mpol_to_str()
mpol_to_str() may fail, and not fill the buffer (e.g. -EINVAL), so need check about it, or buffer may not be zero based, and next seq_printf() will cause issue. Also need let shmem_show_mpol() return value, since it may fail. Signed-off-by: Chen Gang Reviewed-by: Cyrill Gorcunov --- mm/shmem.c | 16 ++-- 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index f00c1c1..b4d44db 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -883,16 +883,20 @@ redirty: #ifdef CONFIG_NUMA #ifdef CONFIG_TMPFS -static void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) +static int shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) { char buffer[64]; + int ret; if (!mpol || mpol->mode == MPOL_DEFAULT) - return; /* show nothing */ + return 0; /* show nothing */ - mpol_to_str(buffer, sizeof(buffer), mpol); + ret = mpol_to_str(buffer, sizeof(buffer), mpol); + if (ret < 0) + return ret; seq_printf(seq, ",mpol=%s", buffer); + return 0; } static struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo) @@ -951,8 +955,9 @@ static struct page *shmem_alloc_page(gfp_t gfp, } #else /* !CONFIG_NUMA */ #ifdef CONFIG_TMPFS -static inline void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) +static inline int shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) { + return 0; } #endif /* CONFIG_TMPFS */ @@ -2555,8 +2560,7 @@ static int shmem_show_options(struct seq_file *seq, struct dentry *root) if (!gid_eq(sbinfo->gid, GLOBAL_ROOT_GID)) seq_printf(seq, ",gid=%u", from_kgid_munged(_user_ns, sbinfo->gid)); - shmem_show_mpol(seq, sbinfo->mpol); - return 0; + return shmem_show_mpol(seq, sbinfo->mpol); } #endif /* CONFIG_TMPFS */ -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH] mm/shmem.c: check the return value of mpol_to_str()
mpol_to_str() may fail, and not fill the buffer (e.g. -EINVAL), so need check about it, or buffer may not be zero based, and next seq_printf() will cause issue. Also need let shmem_show_mpol() return value, since it may fail. Signed-off-by: Chen Gang gang.c...@asianux.com Reviewed-by: Cyrill Gorcunov gorcu...@gmail.com --- mm/shmem.c | 16 ++-- 1 files changed, 10 insertions(+), 6 deletions(-) diff --git a/mm/shmem.c b/mm/shmem.c index f00c1c1..b4d44db 100644 --- a/mm/shmem.c +++ b/mm/shmem.c @@ -883,16 +883,20 @@ redirty: #ifdef CONFIG_NUMA #ifdef CONFIG_TMPFS -static void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) +static int shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) { char buffer[64]; + int ret; if (!mpol || mpol-mode == MPOL_DEFAULT) - return; /* show nothing */ + return 0; /* show nothing */ - mpol_to_str(buffer, sizeof(buffer), mpol); + ret = mpol_to_str(buffer, sizeof(buffer), mpol); + if (ret 0) + return ret; seq_printf(seq, ,mpol=%s, buffer); + return 0; } static struct mempolicy *shmem_get_sbmpol(struct shmem_sb_info *sbinfo) @@ -951,8 +955,9 @@ static struct page *shmem_alloc_page(gfp_t gfp, } #else /* !CONFIG_NUMA */ #ifdef CONFIG_TMPFS -static inline void shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) +static inline int shmem_show_mpol(struct seq_file *seq, struct mempolicy *mpol) { + return 0; } #endif /* CONFIG_TMPFS */ @@ -2555,8 +2560,7 @@ static int shmem_show_options(struct seq_file *seq, struct dentry *root) if (!gid_eq(sbinfo-gid, GLOBAL_ROOT_GID)) seq_printf(seq, ,gid=%u, from_kgid_munged(init_user_ns, sbinfo-gid)); - shmem_show_mpol(seq, sbinfo-mpol); - return 0; + return shmem_show_mpol(seq, sbinfo-mpol); } #endif /* CONFIG_TMPFS */ -- 1.7.7.6 -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/