File s390-tools-sles15sp2-02-zipl-fix-Waddress-of-packed-member.patch of Package s390-tools.15659
Subject: [PATCH] [FEAT VS1804] zipl: fix -Waddress-of-packed-member
From: Marc Hartmayer <mhartmay@linux.ibm.com>
Summary: genprotimg: Introduce new tool for the creation of PV images
Description: genprotimg takes a kernel, host-key documents, optionally an
initrd, optionally a file with the kernel command line, and it
generates a single, loadable image file. The image consists of a
concatenation of a plain text boot loader, the encrypted
components for kernel, initrd, and cmdline, and the
integrity-protected PV header, containing metadata necessary for
running the guest in PV mode. It's possible to use this image file
as a kernel for zIPL or for a direct kernel boot using QEMU.
Upstream-ID: aa09b292483eb2d79247260fccc2b456dee01e8d
Problem-ID: VS1804
Upstream-Description:
zipl: fix -Waddress-of-packed-member
Reported by GCC 9.2.1 when building with '-Waddress-of-packed-member'.
menu.c: In function 'menu_read':
menu.c:30:22: warning: taking address of packed member of 'struct boot_stage2_params' may result in an unaligned pointer value [-Waddress-of-packed-member]
30 | uint16_t *configs = __stage2_params.config;
| ^~~~~~~~~~~~~~~
menu.c: In function 'menu_list':
menu.c:83:22: warning: taking address of packed member of 'struct boot_stage2_params' may result in an unaligned pointer value [-Waddress-of-packed-member]
83 | uint16_t *configs = __stage2_params.config;
| ^~~~~~~~~~~~~~~
menu.c: In function 'menu':
menu.c:139:22: warning: taking address of packed member of 'struct boot_stage2_params' may result in an unaligned pointer value [-Waddress-of-packed-member]
139 | uint16_t *configs = __stage2_params.config;
| ^~~~~~~~~~~~~~~
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Reviewed-by: Stefan Haberland <sth@linux.ibm.com>
Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
---
zipl/boot/menu.c | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
--- a/zipl/boot/menu.c
+++ b/zipl/boot/menu.c
@@ -27,7 +27,6 @@ static void menu_prompt(int timeout)
static int menu_read(void)
{
char *temp_area = (char *)get_zeroed_page();
- uint16_t *configs = __stage2_params.config;
int timeout, rc, i, count = 0;
char *endptr;
int value;
@@ -60,7 +59,7 @@ static int menu_read(void)
value = ebcstrtoul((char *)temp_area, &endptr, 10);
if ((endptr != temp_area) && (value < BOOT_MENU_ENTRIES - 1) &&
- (configs[value] != 0)) {
+ (__stage2_params.config[value] != 0)) {
/* valid config found - finish */
break;
} else {
@@ -80,14 +79,13 @@ out_free_page:
static int menu_list(void)
{
- uint16_t *configs = __stage2_params.config;
char *name;
int i;
for (i = 0; i < BOOT_MENU_ENTRIES; i++) {
- if (configs[i] == 0)
+ if (__stage2_params.config[i] == 0)
continue;
- name = configs[i] + ((void *)&__stage2_params);
+ name = __stage2_params.config[i] + ((void *)&__stage2_params);
printf("%s\n", name);
if (i == 0)
printf("\n");
@@ -136,7 +134,6 @@ static int menu_param(unsigned long *val
int menu(void)
{
- uint16_t *configs = __stage2_params.config;
unsigned long value = 0;
char *cmd_line_extra;
char endstring[15];
@@ -181,11 +178,11 @@ int menu(void)
boot:
/* sanity - config entry not valid */
- if (configs[value] == 0)
+ if (__stage2_params.config[value] == 0)
panic(EINTERNAL, "%s", msg_econfig);
printf("Booting %s\n",
- (char *)(configs[value] +
+ (char *)(__stage2_params.config[value] +
(void *)&__stage2_params + TEXT_OFFSET));
/* append 'BOOT_IMAGE=<num>' to parmline */