@@ -789,7 +789,7 @@ int audit_add_watch_dir(int type, struct audit_rule_data **rulep,
789
789
const char * path )
790
790
{
791
791
size_t len = strlen (path );
792
- struct audit_rule_data * rule = * rulep ;
792
+ struct audit_rule_data * rule = * rulep , * tmp ;
793
793
794
794
if (rule && rule -> field_count ) {
795
795
audit_msg (LOG_ERR , "Rule is not empty" );
@@ -800,12 +800,16 @@ int audit_add_watch_dir(int type, struct audit_rule_data **rulep,
800
800
return -1 ;
801
801
}
802
802
803
- * rulep = realloc (rule , len + sizeof (* rule ));
804
- if (* rulep == NULL ) {
803
+ // Use a temporary pointer to prevent memory leaks
804
+ tmp = realloc (rule , len + sizeof (* rule ));
805
+ if (tmp == NULL ) {
805
806
free (rule );
807
+ * rulep = NULL ;
806
808
audit_msg (LOG_ERR , "Cannot realloc memory!" );
807
809
return -1 ;
808
810
}
811
+
812
+ * rulep = tmp ;
809
813
rule = * rulep ;
810
814
memset (rule , 0 , len + sizeof (* rule ));
811
815
@@ -830,6 +834,7 @@ int audit_add_watch_dir(int type, struct audit_rule_data **rulep,
830
834
return 0 ;
831
835
}
832
836
837
+
833
838
int audit_add_rule_data (int fd , struct audit_rule_data * rule ,
834
839
int flags , int action )
835
840
{
@@ -1621,7 +1626,7 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair,
1621
1626
int field ;
1622
1627
int vlen ;
1623
1628
int offset ;
1624
- struct audit_rule_data * rule = * rulep ;
1629
+ struct audit_rule_data * rule = * rulep , * tmp ;
1625
1630
1626
1631
if (f == NULL )
1627
1632
return - EAU_FILTERMISSING ;
@@ -1834,14 +1839,14 @@ int audit_rule_fieldpair_data(struct audit_rule_data **rulep, const char *pair,
1834
1839
rule -> values [rule -> field_count ] = vlen ;
1835
1840
offset = rule -> buflen ;
1836
1841
rule -> buflen += vlen ;
1837
- * rulep = realloc (rule , sizeof (* rule ) + rule -> buflen );
1838
- if (* rulep == NULL ) {
1842
+ tmp = realloc (rule , sizeof (* rule ) + rule -> buflen );
1843
+ if (tmp == NULL ) {
1839
1844
free (rule );
1840
1845
audit_msg (LOG_ERR , "Cannot realloc memory!" );
1841
1846
return -3 ;
1842
- } else {
1843
- rule = * rulep ;
1844
1847
}
1848
+ * rulep = tmp ;
1849
+ rule = tmp ;
1845
1850
strncpy (& rule -> buf [offset ], v , vlen );
1846
1851
1847
1852
break ;
0 commit comments