On 12/07/10 18:32, Michael Roth wrote:
> On 12/07/2010 08:37 AM, Jes Sorensen wrote:
>> On 12/03/10 19:03, Michael Roth wrote:
>>> +static xmlrpc_value *va_getdmesg(xmlrpc_env *env,
>>> +                              xmlrpc_value *param,
>>> +                              void *user_data)
>>> +{
>>> +    char *dmesg_buf = NULL, cmd[256];
>>> +    int ret;
>>> +    xmlrpc_value *result = NULL;
>>> +    FILE *pipe;
>>> +
>>> +    SLOG("va_getdmesg()");
>>> +
>>> +    dmesg_buf = qemu_mallocz(VA_DMESG_LEN + 2048);
>>> +    sprintf(cmd, "dmesg -s %d", VA_DMESG_LEN);
>>
>> What happens if the guest's dmesg buffer is larger than your hardcoded
>> value?
> 
> It'll end up getting truncated by the fread() later:
> 
> ret = fread(dmesg_buf, sizeof(char), VA_DMESG_LEN, pipe);
> 
> That's where the dmesg -s VA_DMESG_LEN comes into play, it should size
> things such that we can buffer up till the end of the dmesg output.
> 
> This param is kind of quirky though, size doesn't seem to have an affect
> for anything below 4KB, but if we stick with VA_DMESG_LEN >= 4KB this
> should cover us, unless it's a distro-specific. But it should blow
> anything up, at least.

I am wary of these hard coded constants. Isn't there a way to set the
kernel's dmesg buffer size, or is that only a compile time option?

Cheers,
Jes

Reply via email to