@@ -1769,6 +1769,7 @@ static int replace_system_preds(struct trace_subsystem_dir *dir,
1769
1769
{
1770
1770
struct trace_event_file * file ;
1771
1771
struct filter_list * filter_item ;
1772
+ struct event_filter * filter = NULL ;
1772
1773
struct filter_list * tmp ;
1773
1774
LIST_HEAD (filter_list );
1774
1775
bool fail = true;
@@ -1790,24 +1791,16 @@ static int replace_system_preds(struct trace_subsystem_dir *dir,
1790
1791
}
1791
1792
1792
1793
list_for_each_entry (file , & tr -> events , list ) {
1793
- struct event_filter * filter ;
1794
1794
1795
1795
if (file -> system != dir )
1796
1796
continue ;
1797
1797
1798
1798
if (event_no_set_filter_flag (file ))
1799
1799
continue ;
1800
1800
1801
- filter_item = kzalloc (sizeof (* filter_item ), GFP_KERNEL );
1802
- if (!filter_item )
1803
- goto fail_mem ;
1804
-
1805
- list_add_tail (& filter_item -> list , & filter_list );
1806
-
1807
- filter_item -> filter = kzalloc (sizeof (* filter ), GFP_KERNEL );
1808
- if (!filter_item -> filter )
1801
+ filter = kzalloc (sizeof (* filter ), GFP_KERNEL );
1802
+ if (!filter )
1809
1803
goto fail_mem ;
1810
- filter = filter_item -> filter ;
1811
1804
1812
1805
/* Can only fail on no memory */
1813
1806
err = replace_filter_string (filter , filter_string );
@@ -1821,13 +1814,20 @@ static int replace_system_preds(struct trace_subsystem_dir *dir,
1821
1814
append_filter_err (ps , filter );
1822
1815
} else
1823
1816
event_set_filtered_flag (file );
1817
+
1818
+
1819
+ filter_item = kzalloc (sizeof (* filter_item ), GFP_KERNEL );
1820
+ if (!filter_item )
1821
+ goto fail_mem ;
1822
+
1823
+ list_add_tail (& filter_item -> list , & filter_list );
1824
1824
/*
1825
1825
* Regardless of if this returned an error, we still
1826
1826
* replace the filter for the call.
1827
1827
*/
1828
- filter = event_filter (file );
1829
- event_set_filter (file , filter_item -> filter );
1830
- filter_item -> filter = filter ;
1828
+ filter_item -> filter = event_filter (file );
1829
+ event_set_filter (file , filter );
1830
+ filter = NULL ;
1831
1831
1832
1832
fail = false;
1833
1833
}
@@ -1856,6 +1856,7 @@ static int replace_system_preds(struct trace_subsystem_dir *dir,
1856
1856
parse_error (ps , FILT_ERR_BAD_SUBSYS_FILTER , 0 );
1857
1857
return - EINVAL ;
1858
1858
fail_mem :
1859
+ kfree (filter );
1859
1860
/* If any call succeeded, we still need to sync */
1860
1861
if (!fail )
1861
1862
synchronize_sched ();
0 commit comments