[RFC v14-rc][PATCH 04/23] General infrastructure for checkpoint restart

Serge E. Hallyn serue at us.ibm.com
Fri Mar 20 14:42:48 PDT 2009


Quoting Oren Laadan (orenl at cs.columbia.edu):
> 
> 
> Serge E. Hallyn wrote:
> > Quoting Oren Laadan (orenl at cs.columbia.edu):
> >> Changelog[v14]:
> >>   - Define sys_checkpoint(0,...) as asking for a self-checkpoint (Serge)
> > 
> > Thanks.
> > 
> >>   - Revert use of 'pr_fmt' to avoid tainting whom includes us (Nathan Lynch)
> >>   - Explicitly indicate length of UTS fields in header
> >>   - Discard field 'h->parent'
> > 
> > Nice.
> > 
> >> +	uts = utsname();
> >> +	ret = cr_write_buffer(ctx, uts->release, __NEW_UTS_LEN);
> >> +	if (ret < 0)
> >> +		return ret;
> >> +	ret = cr_write_buffer(ctx, uts->version, __NEW_UTS_LEN);
> >> +	if (ret < 0)
> >> +		return ret;
> >> +	ret = cr_write_buffer(ctx, uts->machine, __NEW_UTS_LEN);
> > 
> > ...
> > 
> >> +	/* FIX: verify compatibility of release, version and machine */
> >> +	ret = cr_read_obj_type(ctx, uts_buf, __NEW_UTS_LEN, CR_HDR_BUFFER);
> >> +	if (ret < 0)
> >> +		goto out;
> >> +	ret = cr_read_obj_type(ctx, uts_buf, __NEW_UTS_LEN, CR_HDR_BUFFER);
> >> +	if (ret < 0)
> >> +		goto out;
> >> +	ret = cr_read_obj_type(ctx, uts_buf, __NEW_UTS_LEN, CR_HDR_BUFFER);
> > 
> > The new_utsname fields actually have __NEW_UTS_LEN+1 chars.  So
> > if hostname happens to be full (__NEW_UTS_LEN chars plus a final
> > null), won't you end up without the trailing null here?
> 
> Using cr_write_buffer() instead of cr_write_string() ensures that it
> saves and restores exactly __NEW_UTS_LEN bytes, regardless of the null,
> so I'd think it's safe (yeah, we could save a few bytes - like a drop
> in the ocean).

No, I'm saying you have one less byte here than what is in the actual
kernel structures.  Each of those has 65 bytes.  __NEW_UTS_LEN is
64.  I realize that these fields should never get that long, but
it's a risk.

-serge


More information about the Containers mailing list