[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Freeipmi-devel] Issue with, UEFI support in ipmi-locate
From: |
Rusk, Mark |
Subject: |
[Freeipmi-devel] Issue with, UEFI support in ipmi-locate |
Date: |
Tue, 19 Aug 2014 19:38:07 +0000 |
I just submitted a bug report (along with a patch) for ipmi-locate (#43027).
The first issue is that UEFI support is conditionally compiled. Support for
UEFI should be standard in ipmi-locate, as it is easy to determine if a system
supports UEFI from the presence of /sys/firmware/efi/systab (or
/proc/firmware/efi/systab prior to 2.6.6-rc3). A single ipmi-locate in a RPM or
DEB needs to support both UEFI and legacy BIOS platforms.
Further the UEFI code is conditionally compile based on USE_EFI which is only
defined if __ia64__ is defined.
The patch removes the #ifdef/#ifndef USE_UEFI and further fixes a case where
the end of the SMBIOS= line in /sys/firmware/efi/systab is terminated with a LF
and not a NULL.
Mark Rusk
--------------------------------------------------------------------------------
--- freeipmi-1.4.5/libfreeipmi/locate/ipmi-locate-dmidecode.c 2014-01-03
18:45:22.000000000 -0500
+++ freeipmi-1.4.5.fixed/libfreeipmi/locate/ipmi-locate-dmidecode.c
2014-08-19 14:14:08.845109706 -0400
@@ -47,10 +47,6 @@
#include "freeipmi-portability.h"
-#ifdef __ia64__
-#define USE_EFI
-#endif /* __ia64__ */
-
#define DEFAULT_MEM_DEV "/dev/mem"
typedef uint8_t fipmiu8;
@@ -422,7 +418,6 @@
return (-1);
}
-#ifndef USE_EFI
static int
_legacy_decode (ipmi_locate_ctx_t ctx,
fipmiu8 *buf,
@@ -448,7 +443,6 @@
return (-1);
}
-#endif /* USE_EFI */
int
ipmi_locate_dmidecode_get_device_info (ipmi_locate_ctx_t ctx,
@@ -458,11 +452,9 @@
struct ipmi_locate_info locate_info;
int found = 0;
size_t fp;
-#ifdef USE_EFI
FILE *efi_systab;
const char *filename;
char linebuf[64];
-#endif /* USE_EFI */
fipmiu8 *buf = NULL;
int rv = -1;
@@ -479,19 +471,13 @@
}
memset (&locate_info, '\0', sizeof (struct ipmi_locate_info));
-#ifdef USE_EFI
/*
* Linux up to 2.6.6-rc2: /proc/efi/systab
* Linux 2.6.6-rc3 and up: /sys/firmware/efi/systab
*/
- if ((!(efi_systab = fopen (filename = "/proc/efi/systab", "r")))
- && (!(efi_systab = fopen (filename = "/sys/firmware/efi/systab", "r"))))
+ if (((efi_systab = fopen (filename = "/proc/efi/systab", "r")))
+ || ((efi_systab = fopen (filename = "/sys/firmware/efi/systab", "r"))))
{
- ERRNO_TRACE (errno);
- LOCATE_SET_ERRNUM (ctx, IPMI_LOCATE_ERR_SYSTEM_ERROR);
- return (-1);
- }
-
fp = 0;
while ((fgets (linebuf, sizeof (linebuf) - 1, efi_systab)))
{
@@ -504,7 +490,7 @@
errno = 0;
fp = strtoul (addr, &endptr, 0);
if (errno
- || endptr[0] != '\0')
+ || ((endptr[0] != '\0') && (endptr[0] != 0x0a)))
{
LOCATE_SET_ERRNUM (ctx, IPMI_LOCATE_ERR_SYSTEM_ERROR);
return (-1);
@@ -526,7 +512,7 @@
found++;
free (buf);
-#else /* USE_EFI */
+ } else {
if (!(buf = _mem_chunk (ctx, 0xF0000, 0x10000, DEFAULT_MEM_DEV)))
return (-1);
@@ -560,7 +546,7 @@
}
free (buf);
-#endif /* USE_EFI */
+ }
if (found)
{
- [Freeipmi-devel] Issue with, UEFI support in ipmi-locate,
Rusk, Mark <=