Re: [PATCH] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-16 Thread Chen Gang
On 2013年04月16日 18:38, Chen Gang wrote:
> On 2013年04月16日 18:25, Chen Gang wrote:
>> On 2013年04月12日 17:42, Chen Gang wrote:
>>> On 2013年04月11日 12:10, Chen Gang wrote:
 On 2013年04月11日 05:19, Eric Paris wrote:
> - Original Message -
>
>>>   b. has an new issue for AUDIT_DIR:
>>>after AUDIT_DIR succeed, it will set rule->tree.
>>>next, the other case fail, then will call audit_free_rule.
>>>but audit_free_rule will not free rule->tree.
> Definitely a couple of leaks here...
>
> I'm seeing leaks on size 8, 64, and 128.
>
> Al, what do you think?  Should I be calling audit_put_tree() in the error 
> case if entry->tree != NULL?  The audit trees are some of the most 
> complex code in the kernel I think.
>
>

  after the test, the original version really has memory leak.

  test:
the related monitor command is:
  watch -d -n 1 "cat /proc/meminfo | awk '{print \$2}' \
| head -n 4 | xargs \
| awk '{print \"used \",\$1 - \$2 - \$3 - \$4}'"
I run 15 processes of modified auditctl at the same time.

  result:
for original version:
  can see the memory leak, it will be more clear after 1 - 2 hours.

for new version (fix it):
  can not see the memory leak after ran 12 - 14 hours.


  I will use LTP (ltp-full-20130109) to test audit again under fedora 17
x86_64 for next-20130415, then send related patch.


  welcome any suggestions or completions.


> 
>   oh, also need buffering optarg of auditctl under fedora 17.
>   or "-F auid=-1" will be truncated to "-F auid".
>   it is ok if not looping again. but in our case, we need loop again.
> 
>   to see memory usage, I think:
> in top, really used memory = 'used' - 'cached'
> it is enough for us.
> 
>   welcome any suggestions or completions.
> 
>   thanks.
> 
> 
>>
>>   I am just testing about it with:
>>
>> ---
>> while(1)
>> auditctl -a exit,always -w /etc -F auid=-1
>> ---
>>
>>   under fedora 17, we need modify the auditctl source code:
>> a. let -w /etc can pass auditctl checking.
>> b. let loop infinitely in a process (if process quit, will free mem)
>> c. need fix a bug for auditctl (under Fedora 17)
>>  audit_open may open 2 times.
>>  when loop infinitely, it will cause resource handle leak.
>>
>>   I have checked (by insert printf in kernel/auditfilter.c):
>> after modify the auditct, the work flow is just what we want to be.
>>   (will alloc watch, alloc tree, then failure occurs)
>>
>>
>>   I guess, we need 2-3 days to get a test result.
>>
>>
>>   welcome any suggestions and completions.
>>
>>   thanks.
>>
>>
>>
>>>
>>>   it seems, your way is the only executable way (if not change code much).
>>>   what my original idea is incorrect.
>>>
>>> we need add related code at failure process area in audit_data_to_entry.
>>> and another functions need not add these code (should not add).
>>> 'watch' also need be processed, since audit_to_watch let ref count = 2.
>>>   (it just like the function audit_del_rule has done)
>>>
>>>   please help check thanks.
>>>
>>>   :-)
>>>
>>>
>>> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
>>> index 81f63f9..f5327ce 100644
>>> --- a/kernel/auditfilter.c
>>> +++ b/kernel/auditfilter.c
>>> @@ -594,6 +594,10 @@ exit_nofree:
>>> return entry;
>>>  
>>>  exit_free:
>>> +   if (entry->rule.watch)
>>> +   audit_put_watch(entry->rule.watch); /* matches initial get */
>>> +   if (entry->rule.tree)
>>> +   audit_put_tree(entry->rule.tree); /* that's the temporary one */
>>> audit_free_rule(entry);
>>> return ERR_PTR(err);
>>>  }
>>>
>>>
>>>

   can we add it in audit_free_rule ?

   maybe like this:

 @@ -75,6 +75,8 @@ static inline void audit_free_rule(struct audit_entry *e)
/* some rules don't have associated watches */
if (erule->watch)
audit_put_watch(erule->watch);
 +  if (erule->tree)
 +  audit_put_tree(erule->tree);
if (erule->fields)
for (i = 0; i < erule->field_count; i++) {
struct audit_field *f = &erule->fields[i];


   thanks.

   :-)

>>>
>>>
>>
>>
> 
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-16 Thread Chen Gang
On 2013年04月16日 18:25, Chen Gang wrote:
> On 2013年04月12日 17:42, Chen Gang wrote:
>> On 2013年04月11日 12:10, Chen Gang wrote:
>>> On 2013年04月11日 05:19, Eric Paris wrote:
 - Original Message -

>>   b. has an new issue for AUDIT_DIR:
>>after AUDIT_DIR succeed, it will set rule->tree.
>>next, the other case fail, then will call audit_free_rule.
>>but audit_free_rule will not free rule->tree.
 Definitely a couple of leaks here...

 I'm seeing leaks on size 8, 64, and 128.

 Al, what do you think?  Should I be calling audit_put_tree() in the error 
 case if entry->tree != NULL?  The audit trees are some of the most complex 
 code in the kernel I think.



  oh, also need buffering optarg of auditctl under fedora 17.
  or "-F auid=-1" will be truncated to "-F auid".
  it is ok if not looping again. but in our case, we need loop again.

  to see memory usage, I think:
in top, really used memory = 'used' - 'cached'
it is enough for us.

  welcome any suggestions or completions.

  thanks.


> 
>   I am just testing about it with:
> 
> ---
> while(1)
> auditctl -a exit,always -w /etc -F auid=-1
> ---
> 
>   under fedora 17, we need modify the auditctl source code:
> a. let -w /etc can pass auditctl checking.
> b. let loop infinitely in a process (if process quit, will free mem)
> c. need fix a bug for auditctl (under Fedora 17)
>  audit_open may open 2 times.
>  when loop infinitely, it will cause resource handle leak.
> 
>   I have checked (by insert printf in kernel/auditfilter.c):
> after modify the auditct, the work flow is just what we want to be.
>   (will alloc watch, alloc tree, then failure occurs)
> 
> 
>   I guess, we need 2-3 days to get a test result.
> 
> 
>   welcome any suggestions and completions.
> 
>   thanks.
> 
> 
> 
>>
>>   it seems, your way is the only executable way (if not change code much).
>>   what my original idea is incorrect.
>>
>> we need add related code at failure process area in audit_data_to_entry.
>> and another functions need not add these code (should not add).
>> 'watch' also need be processed, since audit_to_watch let ref count = 2.
>>   (it just like the function audit_del_rule has done)
>>
>>   please help check thanks.
>>
>>   :-)
>>
>>
>> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
>> index 81f63f9..f5327ce 100644
>> --- a/kernel/auditfilter.c
>> +++ b/kernel/auditfilter.c
>> @@ -594,6 +594,10 @@ exit_nofree:
>>  return entry;
>>  
>>  exit_free:
>> +if (entry->rule.watch)
>> +audit_put_watch(entry->rule.watch); /* matches initial get */
>> +if (entry->rule.tree)
>> +audit_put_tree(entry->rule.tree); /* that's the temporary one */
>>  audit_free_rule(entry);
>>  return ERR_PTR(err);
>>  }
>>
>>
>>
>>>
>>>   can we add it in audit_free_rule ?
>>>
>>>   maybe like this:
>>>
>>> @@ -75,6 +75,8 @@ static inline void audit_free_rule(struct audit_entry *e)
>>> /* some rules don't have associated watches */
>>> if (erule->watch)
>>> audit_put_watch(erule->watch);
>>> +   if (erule->tree)
>>> +   audit_put_tree(erule->tree);
>>> if (erule->fields)
>>> for (i = 0; i < erule->field_count; i++) {
>>> struct audit_field *f = &erule->fields[i];
>>>
>>>
>>>   thanks.
>>>
>>>   :-)
>>>
>>
>>
> 
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-16 Thread Chen Gang
On 2013年04月12日 17:42, Chen Gang wrote:
> On 2013年04月11日 12:10, Chen Gang wrote:
>> On 2013年04月11日 05:19, Eric Paris wrote:
>>> - Original Message -
>>>
>   b. has an new issue for AUDIT_DIR:
>after AUDIT_DIR succeed, it will set rule->tree.
>next, the other case fail, then will call audit_free_rule.
>but audit_free_rule will not free rule->tree.
>>> Definitely a couple of leaks here...
>>>
>>> I'm seeing leaks on size 8, 64, and 128.
>>>
>>> Al, what do you think?  Should I be calling audit_put_tree() in the error 
>>> case if entry->tree != NULL?  The audit trees are some of the most complex 
>>> code in the kernel I think.
>>>
>>>

  I am just testing about it with:

---
while(1)
auditctl -a exit,always -w /etc -F auid=-1
---

  under fedora 17, we need modify the auditctl source code:
a. let -w /etc can pass auditctl checking.
b. let loop infinitely in a process (if process quit, will free mem)
c. need fix a bug for auditctl (under Fedora 17)
 audit_open may open 2 times.
 when loop infinitely, it will cause resource handle leak.

  I have checked (by insert printf in kernel/auditfilter.c):
after modify the auditct, the work flow is just what we want to be.
  (will alloc watch, alloc tree, then failure occurs)


  I guess, we need 2-3 days to get a test result.


  welcome any suggestions and completions.

  thanks.



> 
>   it seems, your way is the only executable way (if not change code much).
>   what my original idea is incorrect.
> 
> we need add related code at failure process area in audit_data_to_entry.
> and another functions need not add these code (should not add).
> 'watch' also need be processed, since audit_to_watch let ref count = 2.
>   (it just like the function audit_del_rule has done)
> 
>   please help check thanks.
> 
>   :-)
> 
> 
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index 81f63f9..f5327ce 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -594,6 +594,10 @@ exit_nofree:
>   return entry;
>  
>  exit_free:
> + if (entry->rule.watch)
> + audit_put_watch(entry->rule.watch); /* matches initial get */
> + if (entry->rule.tree)
> + audit_put_tree(entry->rule.tree); /* that's the temporary one */
>   audit_free_rule(entry);
>   return ERR_PTR(err);
>  }
> 
> 
> 
>>
>>   can we add it in audit_free_rule ?
>>
>>   maybe like this:
>>
>> @@ -75,6 +75,8 @@ static inline void audit_free_rule(struct audit_entry *e)
>>  /* some rules don't have associated watches */
>>  if (erule->watch)
>>  audit_put_watch(erule->watch);
>> +if (erule->tree)
>> +audit_put_tree(erule->tree);
>>  if (erule->fields)
>>  for (i = 0; i < erule->field_count; i++) {
>>  struct audit_field *f = &erule->fields[i];
>>
>>
>>   thanks.
>>
>>   :-)
>>
> 
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-12 Thread Chen Gang
On 2013年04月11日 12:10, Chen Gang wrote:
> On 2013年04月11日 05:19, Eric Paris wrote:
>> - Original Message -
>>
   b. has an new issue for AUDIT_DIR:
after AUDIT_DIR succeed, it will set rule->tree.
next, the other case fail, then will call audit_free_rule.
but audit_free_rule will not free rule->tree.
>> Definitely a couple of leaks here...
>>
>> I'm seeing leaks on size 8, 64, and 128.
>>
>> Al, what do you think?  Should I be calling audit_put_tree() in the error 
>> case if entry->tree != NULL?  The audit trees are some of the most complex 
>> code in the kernel I think.
>>
>>

  it seems, your way is the only executable way (if not change code much).
  what my original idea is incorrect.

we need add related code at failure process area in audit_data_to_entry.
and another functions need not add these code (should not add).
'watch' also need be processed, since audit_to_watch let ref count = 2.
  (it just like the function audit_del_rule has done)

  please help check thanks.

  :-)


diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
index 81f63f9..f5327ce 100644
--- a/kernel/auditfilter.c
+++ b/kernel/auditfilter.c
@@ -594,6 +594,10 @@ exit_nofree:
return entry;
 
 exit_free:
+   if (entry->rule.watch)
+   audit_put_watch(entry->rule.watch); /* matches initial get */
+   if (entry->rule.tree)
+   audit_put_tree(entry->rule.tree); /* that's the temporary one */
audit_free_rule(entry);
return ERR_PTR(err);
 }



> 
>   can we add it in audit_free_rule ?
> 
>   maybe like this:
> 
> @@ -75,6 +75,8 @@ static inline void audit_free_rule(struct audit_entry *e)
>   /* some rules don't have associated watches */
>   if (erule->watch)
>   audit_put_watch(erule->watch);
> + if (erule->tree)
> + audit_put_tree(erule->tree);
>   if (erule->fields)
>   for (i = 0; i < erule->field_count; i++) {
>   struct audit_field *f = &erule->fields[i];
> 
> 
>   thanks.
> 
>   :-)
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-11 Thread Chen Gang
On 2013年04月11日 22:34, Chen Gang wrote:
> On 2013年04月11日 21:40, Eric Paris wrote:
 >> >   can we add it in audit_free_rule ?
 >> > 
 >> >   maybe like this:
 >> > 
 >> > @@ -75,6 +75,8 @@ static inline void audit_free_rule(struct 
 >> > audit_entry *e)
 >> >   /* some rules don't have associated watches */
 >> >   if (erule->watch)
 >> >   audit_put_watch(erule->watch);
 >> > + if (erule->tree)
 >> > + audit_put_tree(erule->tree);
 >> >   if (erule->fields)
 >> >   for (i = 0; i < erule->field_count; i++) {
 >> >   struct audit_field *f = &erule->fields[i];
>> > Where does the tree information get freed normally?  That's the code you 
>> > need to run down.  You don't want to start getting double frees on the 
>> > non-error case.  I'll try to dig into it if Al doesn't.  It's easy to show 
>> > the leak on current kernels.
>> > 

  oh.. it seems another issues need consider !!

a. in function audit_remove_watch_rule, it does not set NULL for 
krule->watch.

b. function audit_del_rule and audit_remove_watch_rule need lock protected.
 it seems we should call audit_del_rule in audit_free_rule.
   audit_del_rule will instead of audit_put_watch and audit_put_tree.
 but we need consider whether will cause dead lock !

   I will continue to see it.


>   I think:
> it is in function audit_del_rule. when del, also set NULL.
> so the deletion in audit_free_rule is safe.
> the process of erule->watch and erule->tree are similar.
> 
>   please check, thanks.
> 
> 
>> > while(1)
>> > auditctl -a exit,always -w /etc -F auid=-1
>> > 
>> > 
>> > 
>   it is valuable to me, thanks.
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-11 Thread Chen Gang
On 2013年04月11日 21:40, Eric Paris wrote:
>> >   can we add it in audit_free_rule ?
>> > 
>> >   maybe like this:
>> > 
>> > @@ -75,6 +75,8 @@ static inline void audit_free_rule(struct audit_entry *e)
>> >/* some rules don't have associated watches */
>> >if (erule->watch)
>> >audit_put_watch(erule->watch);
>> > +  if (erule->tree)
>> > +  audit_put_tree(erule->tree);
>> >if (erule->fields)
>> >for (i = 0; i < erule->field_count; i++) {
>> >struct audit_field *f = &erule->fields[i];
> Where does the tree information get freed normally?  That's the code you need 
> to run down.  You don't want to start getting double frees on the non-error 
> case.  I'll try to dig into it if Al doesn't.  It's easy to show the leak on 
> current kernels.
> 

  I think:
it is in function audit_del_rule. when del, also set NULL.
so the deletion in audit_free_rule is safe.
the process of erule->watch and erule->tree are similar.

  please check, thanks.


> while(1)
> auditctl -a exit,always -w /etc -F auid=-1
> 
> 
> 

  it is valuable to me, thanks.



-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-11 Thread Eric Paris
- Original Message -
> On 2013年04月11日 05:19, Eric Paris wrote:
> > - Original Message -
> > 
> >> >   b. has an new issue for AUDIT_DIR:
> >> >after AUDIT_DIR succeed, it will set rule->tree.
> >> >next, the other case fail, then will call audit_free_rule.
> >> >but audit_free_rule will not free rule->tree.
> > Definitely a couple of leaks here...
> > 
> > I'm seeing leaks on size 8, 64, and 128.
> > 
> > Al, what do you think?  Should I be calling audit_put_tree() in the error
> > case if entry->tree != NULL?  The audit trees are some of the most complex
> > code in the kernel I think.
> > 
> > 
> 
>   can we add it in audit_free_rule ?
> 
>   maybe like this:
> 
> @@ -75,6 +75,8 @@ static inline void audit_free_rule(struct audit_entry *e)
>   /* some rules don't have associated watches */
>   if (erule->watch)
>   audit_put_watch(erule->watch);
> + if (erule->tree)
> + audit_put_tree(erule->tree);
>   if (erule->fields)
>   for (i = 0; i < erule->field_count; i++) {
>   struct audit_field *f = &erule->fields[i];

Where does the tree information get freed normally?  That's the code you need 
to run down.  You don't want to start getting double frees on the non-error 
case.  I'll try to dig into it if Al doesn't.  It's easy to show the leak on 
current kernels.

while(1)
auditctl -a exit,always -w /etc -F auid=-1

--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang
On 2013年04月11日 05:19, Eric Paris wrote:
> - Original Message -
> 
>> >   b. has an new issue for AUDIT_DIR:
>> >after AUDIT_DIR succeed, it will set rule->tree.
>> >next, the other case fail, then will call audit_free_rule.
>> >but audit_free_rule will not free rule->tree.
> Definitely a couple of leaks here...
> 
> I'm seeing leaks on size 8, 64, and 128.
> 
> Al, what do you think?  Should I be calling audit_put_tree() in the error 
> case if entry->tree != NULL?  The audit trees are some of the most complex 
> code in the kernel I think.
> 
> 

  can we add it in audit_free_rule ?

  maybe like this:

@@ -75,6 +75,8 @@ static inline void audit_free_rule(struct audit_entry *e)
/* some rules don't have associated watches */
if (erule->watch)
audit_put_watch(erule->watch);
+   if (erule->tree)
+   audit_put_tree(erule->tree);
if (erule->fields)
for (i = 0; i < erule->field_count; i++) {
struct audit_field *f = &erule->fields[i];


  thanks.

  :-)

-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang
On 2013年04月11日 04:08, Eric Paris wrote:
> We only allow one filter key per rule.  So we should never be able to get 
> into this situation.  See audit_data_to_entry()

  really it is, thanks.

  :-)

-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang
On 2013年04月11日 04:29, Eric Paris wrote:
> - Original Message -
>> > 
>> > 
>> > in another function: audit_data_to_entry:
>> > 
>> >   a. has the same issue for case AUDIT_WATCH.
> You are saying if there were 2 of them it will leak the old one?  No.  If you 
> have 2 AUDIT_WATCH entries the first one will set entry->rule->watch and the 
> second will bomb with EINVAL in audit_to_watch()
> 
> 

  thanks, really it is. it is my fault.

  :-)


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang
On 2013年04月11日 05:32, Eric Paris wrote:
> - Original Message -
>> > 
>> >   also for function audit_list:
>> > when call audit_make_reply fails (will return NULL).
>> > we need free all its related variables instead of only kfree rull.
>> >   (such as call autit_free_rule)
>> > 
>> >   please help check, thanks.
> audit_free_rule() takes a struct audit_entry, not an audit_rule. 

  yes. but maybe you misunderstand what I said (excuse me, my English is
not quite weill)
  I said: "need we process the rule just like audit_free_rule has done ?"


> struct audit_rule does not have additional things which need to be freed...
> 
> 

  oh, it is my fault:
(I did not notice: rule is struct audit_rule, not struct audit_krule).

  thanks.

  :-)

-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang
On 2013年04月11日 05:38, Eric Paris wrote:
> - Original Message -
>> > 
>> >   also for function audit_list_rules:
>> > when call audit_make_reply fails (will return NULL).
>> > we also need process data->buf, not only data itself.
>> > 
>> >   please help check, thanks.
> struct audit_rule_data {
> [...]
> charbuf[0]; /* string fields buffer */
> };
> 
> The last element in the struct is 0 length.  But the allocation in 
> audit_krule_to_data() looks like:
> 
> data = kmalloc(sizeof(*data) + krule->buflen, GFP_KERNEL);
> 
> So now data->buf appears as an allocation of size krule->buflen.
> 
> We do not need to free it separately.  This is a pretty common C trick.

  ok, thanks

  it is my fault.

  :-)

-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Eric Paris
- Original Message -
> 
>   also for function audit_list_rules:
> when call audit_make_reply fails (will return NULL).
> we also need process data->buf, not only data itself.
> 
>   please help check, thanks.

struct audit_rule_data {
[...]
charbuf[0]; /* string fields buffer */
};

The last element in the struct is 0 length.  But the allocation in 
audit_krule_to_data() looks like:

data = kmalloc(sizeof(*data) + krule->buflen, GFP_KERNEL);

So now data->buf appears as an allocation of size krule->buflen.

We do not need to free it separately.  This is a pretty common C trick.

-Eric
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Eric Paris
- Original Message -
> 
>   also for function audit_list:
> when call audit_make_reply fails (will return NULL).
> we need free all its related variables instead of only kfree rull.
>   (such as call autit_free_rule)
> 
>   please help check, thanks.

audit_free_rule() takes a struct audit_entry, not an audit_rule.  struct 
audit_rule does not have additional things which need to be freed...
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Eric Paris
- Original Message -

>   b. has an new issue for AUDIT_DIR:
>after AUDIT_DIR succeed, it will set rule->tree.
>next, the other case fail, then will call audit_free_rule.
>but audit_free_rule will not free rule->tree.

Definitely a couple of leaks here...

I'm seeing leaks on size 8, 64, and 128.

Al, what do you think?  Should I be calling audit_put_tree() in the error case 
if entry->tree != NULL?  The audit trees are some of the most complex code in 
the kernel I think.
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Eric Paris
- Original Message -
> 
> 
> in another function: audit_data_to_entry:
> 
>   a. has the same issue for case AUDIT_WATCH.

You are saying if there were 2 of them it will leak the old one?  No.  If you 
have 2 AUDIT_WATCH entries the first one will set entry->rule->watch and the 
second will bomb with EINVAL in audit_to_watch()
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Eric Paris
We only allow one filter key per rule.  So we should never be able to get into 
this situation.  See audit_data_to_entry()

-Eric

- Original Message -
> 
>   in the 'fcount' looping,
> if 'new->fields[*].type" has 2 or more AUDIT_FILTERKEYs
> need judge new->filterkey whether has value, or memory leak.
> 
> Signed-off-by: Chen Gang 
> ---
>  kernel/auditfilter.c |2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index f9fc54b..936ac79 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -859,6 +859,8 @@ struct audit_entry *audit_dupe_rule(struct audit_krule
> *old)
>  &old->fields[i]);
>   break;
>   case AUDIT_FILTERKEY:
> + if (new->filterkey)
> + break;
>   fk = kstrdup(old->filterkey, GFP_KERNEL);
>   if (unlikely(!fk))
>   err = -ENOMEM;
> --
> 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/


Re: [PATCH] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang

  also for function audit_list_rules:
when call audit_make_reply fails (will return NULL).
we also need process data->buf, not only data itself.

  please help check, thanks.

  :-)

gchen.

On 2013年04月10日 18:28, Chen Gang wrote:
> 
>   also for function audit_list:
> when call audit_make_reply fails (will return NULL).
> we need free all its related variables instead of only kfree rull.
>   (such as call autit_free_rule)
> 
>   please help check, thanks.
> 
>   :-)
> 
> gchen.
> 
> On 2013年04月10日 18:18, Chen Gang wrote:
>>
>>
>> in another function: audit_data_to_entry:
>>
>>   a. has the same issue for case AUDIT_WATCH.
>>
>>   b. has an new issue for AUDIT_DIR:
>>after AUDIT_DIR succeed, it will set rule->tree.
>>next, the other case fail, then will call audit_free_rule.
>>but audit_free_rule will not free rule->tree.
>>
>>
>>   I find them only by reading code, not test them.
>>   and I also do not know about the related features.
>>   so please help check my 2 opinions whether are correct.
>>
>>
>>   welcome any suggestion or completions.
>>
>>   thanks.
>>
>>   :-)
>>
>>
>> gchen.
>>
>>
>> On 2013年04月10日 17:52, Chen Gang wrote:
>>>
>>>   in the 'fcount' looping,
>>> if 'new->fields[*].type" has 2 or more AUDIT_FILTERKEYs
>>> need judge new->filterkey whether has value, or memory leak.
>>>
>>> Signed-off-by: Chen Gang 
>>> ---
>>>  kernel/auditfilter.c |2 ++
>>>  1 files changed, 2 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
>>> index f9fc54b..936ac79 100644
>>> --- a/kernel/auditfilter.c
>>> +++ b/kernel/auditfilter.c
>>> @@ -859,6 +859,8 @@ struct audit_entry *audit_dupe_rule(struct audit_krule 
>>> *old)
>>>&old->fields[i]);
>>> break;
>>> case AUDIT_FILTERKEY:
>>> +   if (new->filterkey)
>>> +   break;
>>> fk = kstrdup(old->filterkey, GFP_KERNEL);
>>> if (unlikely(!fk))
>>> err = -ENOMEM;
>>>
>>
>>
> 
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang

  also for function audit_list:
when call audit_make_reply fails (will return NULL).
we need free all its related variables instead of only kfree rull.
  (such as call autit_free_rule)

  please help check, thanks.

  :-)

gchen.

On 2013年04月10日 18:18, Chen Gang wrote:
> 
> 
> in another function: audit_data_to_entry:
> 
>   a. has the same issue for case AUDIT_WATCH.
> 
>   b. has an new issue for AUDIT_DIR:
>after AUDIT_DIR succeed, it will set rule->tree.
>next, the other case fail, then will call audit_free_rule.
>but audit_free_rule will not free rule->tree.
> 
> 
>   I find them only by reading code, not test them.
>   and I also do not know about the related features.
>   so please help check my 2 opinions whether are correct.
> 
> 
>   welcome any suggestion or completions.
> 
>   thanks.
> 
>   :-)
> 
> 
> gchen.
> 
> 
> On 2013年04月10日 17:52, Chen Gang wrote:
>>
>>   in the 'fcount' looping,
>> if 'new->fields[*].type" has 2 or more AUDIT_FILTERKEYs
>> need judge new->filterkey whether has value, or memory leak.
>>
>> Signed-off-by: Chen Gang 
>> ---
>>  kernel/auditfilter.c |2 ++
>>  1 files changed, 2 insertions(+), 0 deletions(-)
>>
>> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
>> index f9fc54b..936ac79 100644
>> --- a/kernel/auditfilter.c
>> +++ b/kernel/auditfilter.c
>> @@ -859,6 +859,8 @@ struct audit_entry *audit_dupe_rule(struct audit_krule 
>> *old)
>> &old->fields[i]);
>>  break;
>>  case AUDIT_FILTERKEY:
>> +if (new->filterkey)
>> +break;
>>  fk = kstrdup(old->filterkey, GFP_KERNEL);
>>  if (unlikely(!fk))
>>  err = -ENOMEM;
>>
> 
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang


in another function: audit_data_to_entry:

  a. has the same issue for case AUDIT_WATCH.

  b. has an new issue for AUDIT_DIR:
   after AUDIT_DIR succeed, it will set rule->tree.
   next, the other case fail, then will call audit_free_rule.
   but audit_free_rule will not free rule->tree.


  I find them only by reading code, not test them.
  and I also do not know about the related features.
  so please help check my 2 opinions whether are correct.


  welcome any suggestion or completions.

  thanks.

  :-)


gchen.


On 2013年04月10日 17:52, Chen Gang wrote:
> 
>   in the 'fcount' looping,
> if 'new->fields[*].type" has 2 or more AUDIT_FILTERKEYs
> need judge new->filterkey whether has value, or memory leak.
> 
> Signed-off-by: Chen Gang 
> ---
>  kernel/auditfilter.c |2 ++
>  1 files changed, 2 insertions(+), 0 deletions(-)
> 
> diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
> index f9fc54b..936ac79 100644
> --- a/kernel/auditfilter.c
> +++ b/kernel/auditfilter.c
> @@ -859,6 +859,8 @@ struct audit_entry *audit_dupe_rule(struct audit_krule 
> *old)
>  &old->fields[i]);
>   break;
>   case AUDIT_FILTERKEY:
> + if (new->filterkey)
> + break;
>   fk = kstrdup(old->filterkey, GFP_KERNEL);
>   if (unlikely(!fk))
>   err = -ENOMEM;
> 


-- 
Chen Gang

Asianux Corporation
--
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] kernel: auditfilter: looping issue, memory leak if has 2 or more AUDIT_FILTERKEYs

2013-04-10 Thread Chen Gang

  in the 'fcount' looping,
if 'new->fields[*].type" has 2 or more AUDIT_FILTERKEYs
need judge new->filterkey whether has value, or memory leak.

Signed-off-by: Chen Gang 
---
 kernel/auditfilter.c |2 ++
 1 files changed, 2 insertions(+), 0 deletions(-)

diff --git a/kernel/auditfilter.c b/kernel/auditfilter.c
index f9fc54b..936ac79 100644
--- a/kernel/auditfilter.c
+++ b/kernel/auditfilter.c
@@ -859,6 +859,8 @@ struct audit_entry *audit_dupe_rule(struct audit_krule *old)
   &old->fields[i]);
break;
case AUDIT_FILTERKEY:
+   if (new->filterkey)
+   break;
fk = kstrdup(old->filterkey, GFP_KERNEL);
if (unlikely(!fk))
err = -ENOMEM;
-- 
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/