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.