CC: [email protected] CC: [email protected] TO: Tom Zanussi <[email protected]> CC: Steven Rostedt <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: dd81e1c7d5fb126e5fbc5c9e334d7b3ec29a16a0 commit: 9ec5a7d16899ed9062cc4c3dd3a13e1771411ab3 tracing: Change event_command func() to parse() date: 2 weeks ago :::::: branch date: 25 hours ago :::::: commit date: 2 weeks ago config: x86_64-randconfig-m001-20220124 (https://download.01.org/0day-ci/archive/20220125/[email protected]/config) compiler: gcc-9 (Debian 9.3.0-22) 9.3.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: kernel/trace/trace_events_hist.c:6174 event_hist_trigger_parse() error: we previously assumed 'glob' could be null (see line 6166) vim +/glob +6174 kernel/trace/trace_events_hist.c 52a7f16dedff8f Tom Zanussi 2016-03-03 6148 9ec5a7d16899ed Tom Zanussi 2022-01-10 6149 static int event_hist_trigger_parse(struct event_command *cmd_ops, 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6150 struct trace_event_file *file, 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6151 char *glob, char *cmd, char *param) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6152 { 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6153 unsigned int hist_trigger_bits = TRACING_MAP_BITS_DEFAULT; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6154 struct event_trigger_data *trigger_data; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6155 struct hist_trigger_attrs *attrs; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6156 struct event_trigger_ops *trigger_ops; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6157 struct hist_trigger_data *hist_data; 4b147936fa5096 Tom Zanussi 2018-01-15 6158 struct synth_event *se; 4b147936fa5096 Tom Zanussi 2018-01-15 6159 const char *se_name; 30350d65ac5676 Tom Zanussi 2018-01-15 6160 bool remove = false; c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6161 char *trigger, *p, *start; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6162 int ret = 0; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6163 0e2b81f7b52a1c Masami Hiramatsu 2018-11-05 6164 lockdep_assert_held(&event_mutex); 0e2b81f7b52a1c Masami Hiramatsu 2018-11-05 6165 f404da6e1d46ce Tom Zanussi 2018-01-15 @6166 if (glob && strlen(glob)) { f404da6e1d46ce Tom Zanussi 2018-01-15 6167 hist_err_clear(); a1a05bb40e229d Tom Zanussi 2019-03-31 6168 last_cmd_set(file, param); f404da6e1d46ce Tom Zanussi 2018-01-15 6169 } f404da6e1d46ce Tom Zanussi 2018-01-15 6170 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6171 if (!param) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6172 return -EINVAL; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6173 30350d65ac5676 Tom Zanussi 2018-01-15 @6174 if (glob[0] == '!') 30350d65ac5676 Tom Zanussi 2018-01-15 6175 remove = true; 30350d65ac5676 Tom Zanussi 2018-01-15 6176 ec5ce098754108 Tom Zanussi 2018-01-15 6177 /* ec5ce098754108 Tom Zanussi 2018-01-15 6178 * separate the trigger from the filter (k:v [if filter]) ec5ce098754108 Tom Zanussi 2018-01-15 6179 * allowing for whitespace in the trigger ec5ce098754108 Tom Zanussi 2018-01-15 6180 */ ec5ce098754108 Tom Zanussi 2018-01-15 6181 p = trigger = param; ec5ce098754108 Tom Zanussi 2018-01-15 6182 do { ec5ce098754108 Tom Zanussi 2018-01-15 6183 p = strstr(p, "if"); ec5ce098754108 Tom Zanussi 2018-01-15 6184 if (!p) ec5ce098754108 Tom Zanussi 2018-01-15 6185 break; ec5ce098754108 Tom Zanussi 2018-01-15 6186 if (p == param) ec5ce098754108 Tom Zanussi 2018-01-15 6187 return -EINVAL; ec5ce098754108 Tom Zanussi 2018-01-15 6188 if (*(p - 1) != ' ' && *(p - 1) != '\t') { ec5ce098754108 Tom Zanussi 2018-01-15 6189 p++; ec5ce098754108 Tom Zanussi 2018-01-15 6190 continue; ec5ce098754108 Tom Zanussi 2018-01-15 6191 } 2f31ed9308cc9e Tom Zanussi 2018-12-18 6192 if (p >= param + strlen(param) - (sizeof("if") - 1) - 1) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6193 return -EINVAL; 2f31ed9308cc9e Tom Zanussi 2018-12-18 6194 if (*(p + sizeof("if") - 1) != ' ' && *(p + sizeof("if") - 1) != '\t') { ec5ce098754108 Tom Zanussi 2018-01-15 6195 p++; ec5ce098754108 Tom Zanussi 2018-01-15 6196 continue; ec5ce098754108 Tom Zanussi 2018-01-15 6197 } ec5ce098754108 Tom Zanussi 2018-01-15 6198 break; ec5ce098754108 Tom Zanussi 2018-01-15 6199 } while (p); ec5ce098754108 Tom Zanussi 2018-01-15 6200 ec5ce098754108 Tom Zanussi 2018-01-15 6201 if (!p) ec5ce098754108 Tom Zanussi 2018-01-15 6202 param = NULL; ec5ce098754108 Tom Zanussi 2018-01-15 6203 else { ec5ce098754108 Tom Zanussi 2018-01-15 6204 *(p - 1) = '\0'; ec5ce098754108 Tom Zanussi 2018-01-15 6205 param = strstrip(p); ec5ce098754108 Tom Zanussi 2018-01-15 6206 trigger = strstrip(trigger); ec5ce098754108 Tom Zanussi 2018-01-15 6207 } 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6208 c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6209 /* c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6210 * To simplify arithmetic expression parsing, replace occurrences of c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6211 * '.sym-offset' modifier with '.symXoffset' c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6212 */ c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6213 start = strstr(trigger, ".sym-offset"); c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6214 while (start) { c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6215 *(start + 4) = 'X'; c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6216 start = strstr(start + 11, ".sym-offset"); feea69ec121f06 kernel test robot 2021-10-30 6217 } c5eac6ee8bc5d3 Kalesh Singh 2021-10-25 6218 d0cd871ba0d613 Steven Rostedt (VMware 2019-04-01 6219) attrs = parse_hist_trigger_attrs(file->tr, trigger); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6220 if (IS_ERR(attrs)) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6221 return PTR_ERR(attrs); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6222 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6223 if (attrs->map_bits) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6224 hist_trigger_bits = attrs->map_bits; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6225 30350d65ac5676 Tom Zanussi 2018-01-15 6226 hist_data = create_hist_data(hist_trigger_bits, attrs, file, remove); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6227 if (IS_ERR(hist_data)) { 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6228 destroy_hist_trigger_attrs(attrs); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6229 return PTR_ERR(hist_data); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6230 } 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6231 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6232 trigger_ops = cmd_ops->get_trigger_ops(cmd, trigger); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6233 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6234 trigger_data = kzalloc(sizeof(*trigger_data), GFP_KERNEL); 4b147936fa5096 Tom Zanussi 2018-01-15 6235 if (!trigger_data) { 4b147936fa5096 Tom Zanussi 2018-01-15 6236 ret = -ENOMEM; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6237 goto out_free; 4b147936fa5096 Tom Zanussi 2018-01-15 6238 } 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6239 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6240 trigger_data->count = -1; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6241 trigger_data->ops = trigger_ops; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6242 trigger_data->cmd_ops = cmd_ops; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6243 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6244 INIT_LIST_HEAD(&trigger_data->list); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6245 RCU_INIT_POINTER(trigger_data->filter, NULL); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6246 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6247 trigger_data->private_data = hist_data; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6248 52a7f16dedff8f Tom Zanussi 2016-03-03 6249 /* if param is non-empty, it's supposed to be a filter */ 52a7f16dedff8f Tom Zanussi 2016-03-03 6250 if (param && cmd_ops->set_filter) { 52a7f16dedff8f Tom Zanussi 2016-03-03 6251 ret = cmd_ops->set_filter(param, trigger_data, file); 52a7f16dedff8f Tom Zanussi 2016-03-03 6252 if (ret < 0) 52a7f16dedff8f Tom Zanussi 2016-03-03 6253 goto out_free; 52a7f16dedff8f Tom Zanussi 2016-03-03 6254 } 52a7f16dedff8f Tom Zanussi 2016-03-03 6255 30350d65ac5676 Tom Zanussi 2018-01-15 6256 if (remove) { 4b147936fa5096 Tom Zanussi 2018-01-15 6257 if (!have_hist_trigger_match(trigger_data, file)) 4b147936fa5096 Tom Zanussi 2018-01-15 6258 goto out_free; 4b147936fa5096 Tom Zanussi 2018-01-15 6259 067fe038e70f6e Tom Zanussi 2018-01-15 6260 if (hist_trigger_check_refs(trigger_data, file)) { 067fe038e70f6e Tom Zanussi 2018-01-15 6261 ret = -EBUSY; 067fe038e70f6e Tom Zanussi 2018-01-15 6262 goto out_free; 067fe038e70f6e Tom Zanussi 2018-01-15 6263 } 067fe038e70f6e Tom Zanussi 2018-01-15 6264 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6265 cmd_ops->unreg(glob+1, trigger_ops, trigger_data, file); 4b147936fa5096 Tom Zanussi 2018-01-15 6266 se_name = trace_event_name(file->event_call); 4b147936fa5096 Tom Zanussi 2018-01-15 6267 se = find_synth_event(se_name); 4b147936fa5096 Tom Zanussi 2018-01-15 6268 if (se) 4b147936fa5096 Tom Zanussi 2018-01-15 6269 se->ref--; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6270 ret = 0; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6271 goto out_free; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6272 } 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6273 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6274 ret = cmd_ops->reg(glob, trigger_ops, trigger_data, file); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6275 /* 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6276 * The above returns on success the # of triggers registered, 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6277 * but if it didn't register any it returns zero. Consider no 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6278 * triggers registered a failure too. 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6279 */ 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6280 if (!ret) { e86ae9baacfa9e Tom Zanussi 2016-03-03 6281 if (!(attrs->pause || attrs->cont || attrs->clear)) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6282 ret = -ENOENT; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6283 goto out_free; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6284 } else if (ret < 0) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6285 goto out_free; 067fe038e70f6e Tom Zanussi 2018-01-15 6286 067fe038e70f6e Tom Zanussi 2018-01-15 6287 if (get_named_trigger_data(trigger_data)) 067fe038e70f6e Tom Zanussi 2018-01-15 6288 goto enable; 067fe038e70f6e Tom Zanussi 2018-01-15 6289 067fe038e70f6e Tom Zanussi 2018-01-15 6290 if (has_hist_vars(hist_data)) 067fe038e70f6e Tom Zanussi 2018-01-15 6291 save_hist_vars(hist_data); 067fe038e70f6e Tom Zanussi 2018-01-15 6292 7d18a10c316783 Tom Zanussi 2019-02-13 6293 ret = create_actions(hist_data); 0212e2aa30e112 Tom Zanussi 2018-01-15 6294 if (ret) 0212e2aa30e112 Tom Zanussi 2018-01-15 6295 goto out_unreg; 0212e2aa30e112 Tom Zanussi 2018-01-15 6296 067fe038e70f6e Tom Zanussi 2018-01-15 6297 ret = tracing_map_init(hist_data->map); 067fe038e70f6e Tom Zanussi 2018-01-15 6298 if (ret) 067fe038e70f6e Tom Zanussi 2018-01-15 6299 goto out_unreg; 067fe038e70f6e Tom Zanussi 2018-01-15 6300 enable: 067fe038e70f6e Tom Zanussi 2018-01-15 6301 ret = hist_trigger_enable(trigger_data, file); 067fe038e70f6e Tom Zanussi 2018-01-15 6302 if (ret) 067fe038e70f6e Tom Zanussi 2018-01-15 6303 goto out_unreg; 067fe038e70f6e Tom Zanussi 2018-01-15 6304 4b147936fa5096 Tom Zanussi 2018-01-15 6305 se_name = trace_event_name(file->event_call); 4b147936fa5096 Tom Zanussi 2018-01-15 6306 se = find_synth_event(se_name); 4b147936fa5096 Tom Zanussi 2018-01-15 6307 if (se) 4b147936fa5096 Tom Zanussi 2018-01-15 6308 se->ref++; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6309 /* Just return zero, not the number of registered triggers */ 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6310 ret = 0; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6311 out: f404da6e1d46ce Tom Zanussi 2018-01-15 6312 if (ret == 0) f404da6e1d46ce Tom Zanussi 2018-01-15 6313 hist_err_clear(); f404da6e1d46ce Tom Zanussi 2018-01-15 6314 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6315 return ret; 067fe038e70f6e Tom Zanussi 2018-01-15 6316 out_unreg: 067fe038e70f6e Tom Zanussi 2018-01-15 6317 cmd_ops->unreg(glob+1, trigger_ops, trigger_data, file); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6318 out_free: 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6319 if (cmd_ops->set_filter) 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6320 cmd_ops->set_filter(NULL, trigger_data, NULL); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6321 067fe038e70f6e Tom Zanussi 2018-01-15 6322 remove_hist_vars(hist_data); 067fe038e70f6e Tom Zanussi 2018-01-15 6323 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6324 kfree(trigger_data); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6325 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6326 destroy_hist_data(hist_data); 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6327 goto out; 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6328 } 7ef224d1d0e3a1 Tom Zanussi 2016-03-03 6329 :::::: The code at line 6174 was first introduced by commit :::::: 30350d65ac5676c6d08d4fc935bc9a9cb0fd4ed3 tracing: Add variable support to hist triggers :::::: TO: Tom Zanussi <[email protected]> :::::: CC: Steven Rostedt (VMware) <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
