And here's the corresponding fix for the apparmor 2.8 branch.

This patch fixes some memory leaks in the libapparmor log parsing
functions, specifically around handling records obtained from syslog
and records containing network addresses.

Bug: https://bugs.launchpad.net/bugs/1340927
Signed-off-by: Steve Beattie <[email protected]>

---
 libraries/libapparmor/src/grammar.y       |   14 ++++++++------
 libraries/libapparmor/src/libaalogparse.c |    4 ++++
 2 files changed, 12 insertions(+), 6 deletions(-)

Index: b/libraries/libapparmor/src/grammar.y
===================================================================
--- a/libraries/libapparmor/src/grammar.y
+++ b/libraries/libapparmor/src/grammar.y
@@ -175,13 +175,13 @@ other_audit: TOK_TYPE_OTHER audit_msg TO
 
 syslog_type:
          syslog_date TOK_ID TOK_SYSLOG_KERNEL audit_id key_list
-         { ret_record->version = AA_RECORD_SYNTAX_V2; }
+         { ret_record->version = AA_RECORD_SYNTAX_V2; free($2); }
        | syslog_date TOK_ID TOK_SYSLOG_KERNEL key_type audit_id key_list
-         { ret_record->version = AA_RECORD_SYNTAX_V2; }
+         { ret_record->version = AA_RECORD_SYNTAX_V2; free($2); }
        | syslog_date TOK_ID TOK_SYSLOG_KERNEL TOK_DMESG_STAMP audit_id key_list
-         { ret_record->version = AA_RECORD_SYNTAX_V2; }
+         { ret_record->version = AA_RECORD_SYNTAX_V2; free($2); free($4); }
        | syslog_date TOK_ID TOK_SYSLOG_KERNEL TOK_DMESG_STAMP key_type 
audit_id key_list
-         { ret_record->version = AA_RECORD_SYNTAX_V2; }
+         { ret_record->version = AA_RECORD_SYNTAX_V2; free($2); free($4); }
        ;
 
 /* when audit dispatches a message it doesn't prepend the audit type string */
@@ -203,8 +203,10 @@ audit_id: TOK_AUDIT TOK_OPEN_PAREN TOK_A
                free($7);
        } ;
 
-syslog_date: TOK_DATE_MONTH TOK_DIGITS TOK_TIME { /* do nothing? */ }
-       | TOK_DATE TOK_TIME { /* do nothing */ }
+syslog_date: TOK_DATE_MONTH TOK_DIGITS TOK_TIME
+               { free($1); free($3); /* do nothing? */ }
+       | TOK_DATE TOK_TIME
+               { free($1); free($2); /* do nothing */ }
        ;
 
 key_list: key
Index: b/libraries/libapparmor/src/libaalogparse.c
===================================================================
--- a/libraries/libapparmor/src/libaalogparse.c
+++ b/libraries/libapparmor/src/libaalogparse.c
@@ -77,6 +77,10 @@ void free_record(aa_log_record *record)
                        free(record->net_protocol);
                if (record->net_sock_type != NULL)
                        free(record->net_sock_type);
+               if (record->net_local_addr != NULL)
+                       free(record->net_local_addr);
+               if (record->net_foreign_addr != NULL)
+                       free(record->net_foreign_addr);
 
                free(record);
        }

-- 
Steve Beattie
<[email protected]>
http://NxNW.org/~steve/

Attachment: signature.asc
Description: Digital signature

-- 
AppArmor mailing list
[email protected]
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to