From ecf5a4ecb909bfd91306678d0c460ab2f2837a33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Hor=C3=A1k?= Date: Mon, 18 Nov 2019 04:10:06 -0500 Subject: [PATCH 1/3] zipl: drop redundant string duplication MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dan Horák --- zipl/src/scan.c | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/zipl/src/scan.c b/zipl/src/scan.c index 38fa5454..0ea37efa 100644 --- a/zipl/src/scan.c +++ b/zipl/src/scan.c @@ -1575,7 +1575,6 @@ scan_check_bls(struct scan_token *scan) int i, rc; char *target_value = NULL; char *img_value = NULL; - char *buffer = NULL; /* * In the BLS case, each BLS section heading inherits a keyword * assignment target= from zipl.conf, and they are all the same. @@ -1609,14 +1608,8 @@ scan_check_bls(struct scan_token *scan) scan[i].content.keyword.value); return rc; } - buffer = (char *) - misc_malloc(strlen(img_value) + 1); - if (buffer == NULL) - return -1; - memcpy(buffer, img_value, strlen(img_value)); - buffer[strlen(img_value)] = 0; free(scan[i].content.keyword.value); - scan[i].content.keyword.value = buffer; + scan[i].content.keyword.value = img_value; } } } From 05f83569960e2774e819fe0942da1f92d0cce35b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Hor=C3=A1k?= Date: Mon, 18 Nov 2019 04:29:04 -0500 Subject: [PATCH 2/3] zipl: set reason not text for failed check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dan Horák --- zipl/src/scan.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zipl/src/scan.c b/zipl/src/scan.c index 0ea37efa..0f01cac9 100644 --- a/zipl/src/scan.c +++ b/zipl/src/scan.c @@ -1603,7 +1603,7 @@ scan_check_bls(struct scan_token *scan) scan[i].content.keyword.value); rc = misc_check_readable_file(img_value); if (rc) { - error_text( + error_reason( "Image file '%s' is not accessible", scan[i].content.keyword.value); return rc; From 8ab552b430f109d80966d0c56bed0d204d917d30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Hor=C3=A1k?= Date: Mon, 18 Nov 2019 11:45:50 -0500 Subject: [PATCH 3/3] zipl: fix handling of values with load address in BLS MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Various keywords (like image or ramdisk) allow specifying a load address as an optional argument. Adapt the logic for checking the presence of the files to take this into the account. Fixes: https://github.com/ibm-s390-tools/s390-tools/commit/d71628326d80e623fc9f008fe4ea93edb5592b2e Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1772054 Signed-off-by: Dan Horák --- zipl/src/scan.c | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/zipl/src/scan.c b/zipl/src/scan.c index 0f01cac9..a34edf62 100644 --- a/zipl/src/scan.c +++ b/zipl/src/scan.c @@ -1575,6 +1575,8 @@ scan_check_bls(struct scan_token *scan) int i, rc; char *target_value = NULL; char *img_value = NULL; + char *file = NULL; + char *tmp, *value; /* * In the BLS case, each BLS section heading inherits a keyword * assignment target= from zipl.conf, and they are all the same. @@ -1595,19 +1597,37 @@ scan_check_bls(struct scan_token *scan) if (scan[i].content.keyword.keyword == scan_keyword_image || scan[i].content.keyword.keyword == scan_keyword_ramdisk) { - rc = misc_check_readable_file( - scan[i].content.keyword.value); + value = scan[i].content.keyword.value; + /* + * put the filename only into the file var before + * checking its presence + */ + if (contains_address(value)) { + tmp = strrchr(value, ','); + file = strndup(value, tmp - value); + } else { + file = value; + } + rc = misc_check_readable_file(file); if (rc) { misc_asprintf(&img_value, "%s%s", - target_value, - scan[i].content.keyword.value); + target_value, file); rc = misc_check_readable_file(img_value); if (rc) { error_reason( - "Image file '%s' is not accessible", - scan[i].content.keyword.value); + "File '%s' not accessible", file); return rc; } + /* + * when file has stripped the load address part, + * do generate a prefixed value + */ + if (file != value) { + free(file); + free(img_value); + misc_asprintf(&img_value, "%s%s", + target_value, value); + } free(scan[i].content.keyword.value); scan[i].content.keyword.value = img_value; }