s390utils/SOURCES/s390-tools-zipl-bls-loadadd...

147 lines
4.7 KiB
Diff

From ecf5a4ecb909bfd91306678d0c460ab2f2837a33 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Dan=20Hor=C3=A1k?= <dan@danny.cz>
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 <dan@danny.cz>
---
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?= <dan@danny.cz>
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 <dan@danny.cz>
---
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?= <dan@danny.cz>
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 <dan@danny.cz>
---
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;
}