[Crash-utility] [PATCH] trace: Improve "trace show" command

Lai Jiangshan laijs at cn.fujitsu.com
Thu Mar 24 08:19:17 UTC 2011


On 03/23/2011 10:37 PM, Dave Anderson wrote:
> 
> 
> ----- Original Message -----
>> On 03/03/2011 11:25 PM, Dave Anderson wrote:
>>>
>>>
>>> ----- Original Message -----
>>>> The code were also applied to:
>>>> git://github.com/laijs/tracing-extension-module-for-crash.git
>>>>
>>>> Documents and man pages will/may be added in two weeks.
>>>>
>>>> Dave Anderson, could you add a "Requires" entry to its RPM.spec,
>>>> it requires trace-cmd RPM after this patch applied.
>>
>> Sorry, please omit this requirement of mine.
> 
> That actually would be a legitimate request for the RHEL6 crash-trace-command
> package, but I'd prefer not to add a Requires entry for the upstream src.rpm.
> 
> But I note in your new patch, that ftrace_show() is a void function, and
> if the popen("trace.cmd") fails, it just returns quietly.  I would think
> that there should be an explanatory error message in that case?  Also, 
> there's a buffer overflow error assignment to buf[4097]:
> 
> static void ftrace_show(int argc, char *argv[])
> {
>         char buf[4096];
>         char tmp[] = "/tmp/crash.trace_dat.XXXXXX";
>         char *trace_cmd = "trace-cmd", *env_trace_cmd = getenv("TRACE_CMD");
>         int fd;
>         FILE *file;
>         size_t ret;
> 
>         /* check trace-cmd */
>         if (env_trace_cmd)
>                 trace_cmd = env_trace_cmd;
>         if (!(file = popen(trace_cmd, "r")))
>                 return;
>         ret = fread(buf, 1, sizeof(buf), file);
>         buf[4097] = 0;
>         if (!strstr(buf, "trace-cmd version")) {
>                 if (env_trace_cmd)
>                         fprintf(fp, "Invalid environment TRACE_CMD: %s\n",
>                                         env_trace_cmd);
>                 else
>                         fprintf(fp, "\"trace show\" requires trace-cmd.\n"
>                                         "please set the environment TRACE_CMD "
>                                         "if you installed it a special path\n"
>                                         );
>                 return;
>         }
> 
> So if you don't mind, I'll fix it like this:
> 
>         buf[0] = 0;
>         if ((file = popen(trace_cmd, "r"))) {
>                 ret = fread(buf, 1, sizeof(buf), file);
>                 buf[4095] = 0;
>         }

It seems better:
	if (...) {
		ret = fread(buf, 1, sizeof(buf) - 1, file);
		buf[ret] = 0;
	}

>         if (!strstr(buf, "trace-cmd version")) {
>                 if (env_trace_cmd)
>                         fprintf(fp, "Invalid environment TRACE_CMD: %s\n",
>                                         env_trace_cmd);
>                 else
>                         fprintf(fp, "\"trace show\" requires trace-cmd.\n"
>                                         "please set the environment TRACE_CMD "
>                                         "if you installed it in a special path\n"
>                                         );
>                 return;
>         }
> 
> If that's OK with you, the patch is queued for crash 5.1.4.
> 

OK with me, thanks,

Lai.




More information about the Crash-utility mailing list