2018-07-25 17:20:22

by Zubin Mithra

[permalink] [raw]
Subject: [PATCH v2] tracefs: Annotate tracefs_ops with __ro_after_init

tracefs_ops is initialized inside tracefs_create_instance_dir and not
modified after. tracefs_create_instance_dir allows for initialization
only once, and is called from create_trace_instances(marked __init),
which is called from tracer_init_tracefs(marked __init). Also, mark
tracefs_create_instance_dir as __init.

Signed-off-by: Zubin Mithra <[email protected]>
---
fs/tracefs/inode.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
index bea8ad876bf9..7098c49f3693 100644
--- a/fs/tracefs/inode.c
+++ b/fs/tracefs/inode.c
@@ -53,7 +53,7 @@ static const struct file_operations tracefs_file_operations = {
static struct tracefs_dir_ops {
int (*mkdir)(const char *name);
int (*rmdir)(const char *name);
-} tracefs_ops;
+} tracefs_ops __ro_after_init;

static char *get_dname(struct dentry *dentry)
{
@@ -478,7 +478,8 @@ struct dentry *tracefs_create_dir(const char *name, struct dentry *parent)
*
* Returns the dentry of the instances directory.
*/
-struct dentry *tracefs_create_instance_dir(const char *name, struct dentry *parent,
+__init struct dentry *tracefs_create_instance_dir(const char *name,
+ struct dentry *parent,
int (*mkdir)(const char *name),
int (*rmdir)(const char *name))
{
--
2.18.0.233.g985f88cf7e-goog



2018-07-25 18:03:01

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH v2] tracefs: Annotate tracefs_ops with __ro_after_init

On Wed, Jul 25, 2018 at 10:19 AM, Zubin Mithra <[email protected]> wrote:
> tracefs_ops is initialized inside tracefs_create_instance_dir and not
> modified after. tracefs_create_instance_dir allows for initialization
> only once, and is called from create_trace_instances(marked __init),
> which is called from tracer_init_tracefs(marked __init). Also, mark
> tracefs_create_instance_dir as __init.
>
> Signed-off-by: Zubin Mithra <[email protected]>

Reviewed-by: Kees Cook <[email protected]>

-Kees

> ---
> fs/tracefs/inode.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/fs/tracefs/inode.c b/fs/tracefs/inode.c
> index bea8ad876bf9..7098c49f3693 100644
> --- a/fs/tracefs/inode.c
> +++ b/fs/tracefs/inode.c
> @@ -53,7 +53,7 @@ static const struct file_operations tracefs_file_operations = {
> static struct tracefs_dir_ops {
> int (*mkdir)(const char *name);
> int (*rmdir)(const char *name);
> -} tracefs_ops;
> +} tracefs_ops __ro_after_init;
>
> static char *get_dname(struct dentry *dentry)
> {
> @@ -478,7 +478,8 @@ struct dentry *tracefs_create_dir(const char *name, struct dentry *parent)
> *
> * Returns the dentry of the instances directory.
> */
> -struct dentry *tracefs_create_instance_dir(const char *name, struct dentry *parent,
> +__init struct dentry *tracefs_create_instance_dir(const char *name,
> + struct dentry *parent,
> int (*mkdir)(const char *name),
> int (*rmdir)(const char *name))
> {
> --
> 2.18.0.233.g985f88cf7e-goog
>



--
Kees Cook
Pixel Security

2018-07-31 15:33:14

by Steven Rostedt

[permalink] [raw]
Subject: Re: [PATCH v2] tracefs: Annotate tracefs_ops with __ro_after_init

On Mon, 30 Jul 2018 17:25:06 -0700
Kees Cook <[email protected]> wrote:

> On Wed, Jul 25, 2018 at 11:00 AM, Kees Cook <[email protected]> wrote:
> > On Wed, Jul 25, 2018 at 10:19 AM, Zubin Mithra <[email protected]> wrote:
> >> tracefs_ops is initialized inside tracefs_create_instance_dir and not
> >> modified after. tracefs_create_instance_dir allows for initialization
> >> only once, and is called from create_trace_instances(marked __init),
> >> which is called from tracer_init_tracefs(marked __init). Also, mark
> >> tracefs_create_instance_dir as __init.
> >>
> >> Signed-off-by: Zubin Mithra <[email protected]>
> >
> > Reviewed-by: Kees Cook <[email protected]>
>
> Steve, do you have a tree for this or should we rope akpm in? :)
>

I'll pull it in. I'm currently working on a bunch of small patches for
the merge window now anyway.

Thanks!

-- Steve