Skip to content

Commit

Permalink
Merge pull request #1073 from brauner/bugfix_branch
Browse files Browse the repository at this point in the history
store criu version
  • Loading branch information
hallyn committed Jul 8, 2016
2 parents b9aae26 + 5407e2a commit c80de90
Showing 1 changed file with 21 additions and 7 deletions.
28 changes: 21 additions & 7 deletions src/lxc/criu.c
Expand Up @@ -410,8 +410,11 @@ static void exec_criu(struct criu_opts *opts)
*
* The intent is that when criu development slows down, we can drop this, but
* for now we shouldn't attempt to c/r with versions that we know won't work.
*
* Note: If version != NULL criu_version() stores the detected criu version in
* version. Allocates memory for version which must be freed by caller.
*/
static bool criu_version_ok()
static bool criu_version_ok(char **version)
{
int pipes[2];
pid_t pid;
Expand Down Expand Up @@ -444,7 +447,7 @@ static bool criu_version_ok()
exit(1);
} else {
FILE *f;
char version[1024];
char *tmp;
int patch;

close(pipes[1]);
Expand All @@ -460,16 +463,22 @@ static bool criu_version_ok()
return false;
}

if (fscanf(f, "Version: %1023[^\n]s", version) != 1)
tmp = malloc(1024);
if (!tmp) {
fclose(f);
return false;
}

if (fscanf(f, "Version: %1023[^\n]s", tmp) != 1)
goto version_error;

if (fgetc(f) != '\n')
goto version_error;

if (strcmp(version, CRIU_VERSION) >= 0)
if (strcmp(tmp, CRIU_VERSION) >= 0)
goto version_match;

if (fscanf(f, "GitID: v%1023[^-]s", version) != 1)
if (fscanf(f, "GitID: v%1023[^-]s", tmp) != 1)
goto version_error;

if (fgetc(f) != '-')
Expand All @@ -478,18 +487,23 @@ static bool criu_version_ok()
if (fscanf(f, "%d", &patch) != 1)
goto version_error;

if (strcmp(version, CRIU_GITID_VERSION) < 0)
if (strcmp(tmp, CRIU_GITID_VERSION) < 0)
goto version_error;

if (patch < CRIU_GITID_PATCHLEVEL)
goto version_error;

version_match:
fclose(f);
if (!version)
free(tmp);
else
*version = tmp;
return true;

version_error:
fclose(f);
free(tmp);
ERROR("must have criu " CRIU_VERSION " or greater to checkpoint/restore\n");
return false;
}
Expand All @@ -501,7 +515,7 @@ static bool criu_ok(struct lxc_container *c)
{
struct lxc_list *it;

if (!criu_version_ok())
if (!criu_version_ok(NULL))
return false;

if (geteuid()) {
Expand Down

0 comments on commit c80de90

Please sign in to comment.