From ba9bfbb6a486abfb56eb5a2595ca74aa951b96bd Mon Sep 17 00:00:00 2001 From: Moe Jette <jette1@llnl.gov> Date: Thu, 20 Dec 2007 17:14:47 +0000 Subject: [PATCH] modify node and job state recovery logic for 32-bit string length field --- src/slurmctld/job_mgr.c | 6 +++--- src/slurmctld/node_mgr.c | 11 ++++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/slurmctld/job_mgr.c b/src/slurmctld/job_mgr.c index 13403b20fe3..32f85b0161c 100644 --- a/src/slurmctld/job_mgr.c +++ b/src/slurmctld/job_mgr.c @@ -418,18 +418,18 @@ extern int load_all_job_state(void) * see if the header contains a "VERXXX" string, we need to make * sure that there is enough data in the buffer to compare against. */ - if (size_buf(buffer) >= sizeof(uint16_t) + strlen(JOB_STATE_VERSION)) + if (size_buf(buffer) >= sizeof(uint32_t) + strlen(JOB_STATE_VERSION)) { char *ptr = get_buf_data(buffer); - if (memcmp(&ptr[sizeof(uint16_t)], JOB_STATE_VERSION, 3) == 0) + if (memcmp(&ptr[sizeof(uint32_t)], JOB_STATE_VERSION, 3) == 0) { safe_unpackstr_xmalloc(&ver_str, &ver_str_len, buffer); debug3("Version string in job_state header is %s", ver_str); } } - if (ver_str && (strcmp(ver_str, JOB_STATE_VERSION) != 0)) { + if ((!ver_str) || (strcmp(ver_str, JOB_STATE_VERSION) != 0)) { error("***********************************************"); error("Can not recover job state, incompatable version"); error("***********************************************"); diff --git a/src/slurmctld/node_mgr.c b/src/slurmctld/node_mgr.c index 13e044d912c..97c4600f09a 100644 --- a/src/slurmctld/node_mgr.c +++ b/src/slurmctld/node_mgr.c @@ -410,7 +410,6 @@ extern int load_all_node_state ( bool state_only ) time_t time_stamp, now = time(NULL); Buf buffer; char *ver_str = NULL; - uint32_t ver_str_len; /* read the file */ state_file = xstrdup (slurmctld_conf.state_save_location); @@ -451,17 +450,19 @@ extern int load_all_node_state ( bool state_only ) * Check the data version so that when the format changes, we * we don't try to unpack data using the wrong format routines */ - if (size_buf(buffer) >= sizeof(uint16_t) + strlen(NODE_STATE_VERSION)) { + if (size_buf(buffer) >= sizeof(uint32_t) + strlen(NODE_STATE_VERSION)) { char *ptr = get_buf_data(buffer); - if (memcmp( &ptr[sizeof(uint16_t)], NODE_STATE_VERSION, 3) == 0) { - safe_unpackstr_xmalloc( &ver_str, &ver_str_len, buffer); + if (memcmp( &ptr[sizeof(uint32_t)], NODE_STATE_VERSION, 3) == 0) { + safe_unpackstr_xmalloc( &ver_str, &name_len, buffer); debug3("Version string in node_state header is %s", ver_str); } } - if (ver_str && (strcmp(ver_str, NODE_STATE_VERSION) != 0)) { + if ((!ver_str) || (strcmp(ver_str, NODE_STATE_VERSION) != 0)) { + error("*****************************************************"); error("Can not recover node state, data version incompatable"); + error("*****************************************************"); xfree(ver_str); free_buf(buffer); return EFAULT; -- GitLab