2013-09-20 16:47:44

by Dave Jones

[permalink] [raw]
Subject: tracing: don't stuff stale pointers in filp->private_data

Probably harmless, but still not a nice thing to do.

Signed-off-by: Dave Jones <[email protected]>

diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 368a4d5..75d3556 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1124,6 +1124,7 @@ static int system_tr_open(struct inode *inode, struct file *filp)
if (ret < 0) {
trace_array_put(tr);
kfree(dir);
+ dir = NULL;
}

filp->private_data = dir;


2013-09-21 14:32:59

by Al Viro

[permalink] [raw]
Subject: Re: tracing: don't stuff stale pointers in filp->private_data

On Fri, Sep 20, 2013 at 12:47:32PM -0400, Dave Jones wrote:
> Probably harmless, but still not a nice thing to do.
>
> Signed-off-by: Dave Jones <[email protected]>
>
> diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
> index 368a4d5..75d3556 100644
> --- a/kernel/trace/trace_events.c
> +++ b/kernel/trace/trace_events.c
> @@ -1124,6 +1124,7 @@ static int system_tr_open(struct inode *inode, struct file *filp)
> if (ret < 0) {
> trace_array_put(tr);
> kfree(dir);
> + dir = NULL;
> }
>
> filp->private_data = dir;

Er... Why not simply return ret; instead?

2013-09-21 15:46:34

by Steven Rostedt

[permalink] [raw]
Subject: Re: tracing: don't stuff stale pointers in filp->private_data

Or make the assignment in an else block.

-- Steve


Al Viro <[email protected]> wrote:
>On Fri, Sep 20, 2013 at 12:47:32PM -0400, Dave Jones wrote:
>> Probably harmless, but still not a nice thing to do.
>>
>> Signed-off-by: Dave Jones <[email protected]>
>>
>> diff --git a/kernel/trace/trace_events.c
>b/kernel/trace/trace_events.c
>> index 368a4d5..75d3556 100644
>> --- a/kernel/trace/trace_events.c
>> +++ b/kernel/trace/trace_events.c
>> @@ -1124,6 +1124,7 @@ static int system_tr_open(struct inode *inode,
>struct file *filp)
>> if (ret < 0) {
>> trace_array_put(tr);
>> kfree(dir);
>> + dir = NULL;
>> }
>>
>> filp->private_data = dir;
>
>Er... Why not simply return ret; instead?

--
Sent from my Android phone with K-9 Mail. Please excuse my brevity.

2013-09-25 22:49:24

by Dave Jones

[permalink] [raw]
Subject: tracing: don't stuff stale pointers in filp->private_data

Probably harmless, but still not a nice thing to do.

Signed-off-by: Dave Jones <[email protected]>

diff --git a/kernel/trace/trace_events.c b/kernel/trace/trace_events.c
index 368a4d5..27aa16e 100644
--- a/kernel/trace/trace_events.c
+++ b/kernel/trace/trace_events.c
@@ -1124,10 +1124,10 @@ static int system_tr_open(struct inode *inode, struct file *filp)
if (ret < 0) {
trace_array_put(tr);
kfree(dir);
+ } else {
+ filp->private_data = dir;
}

- filp->private_data = dir;
-
return ret;
}