diff options
Diffstat (limited to 'meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch')
| -rw-r--r-- | meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch b/meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch new file mode 100644 index 0000000000..e223f45998 --- /dev/null +++ b/meta/recipes-kernel/kexec/kexec-tools/0001-x86-linux-setup.c-Use-POSIX-basename-API.patch | |||
| @@ -0,0 +1,54 @@ | |||
| 1 | From 32c8ffa7ace6f1b7e63f9ddffab00b00c36a7b57 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Wed, 15 May 2024 21:18:08 -0700 | ||
| 4 | Subject: [PATCH] x86-linux-setup.c: Use POSIX basename API | ||
| 5 | |||
| 6 | Musl C library only supports POSIX basename function. while glibc has | ||
| 7 | both GNU extention as well as POSIX basename implemented. Switch to | ||
| 8 | using posix version, so it can work across musl and glibc | ||
| 9 | |||
| 10 | basename prototype has been removed from string.h from latest musl [1] | ||
| 11 | compilers e.g. clang-18/GCC-14 flags the absense of prototype as error. | ||
| 12 | therefore include libgen.h for providing it. | ||
| 13 | |||
| 14 | [1] https://git.musl-libc.org/cgit/musl/commit/?id=725e17ed6dff4d0cd22487bb64470881e86a92e7 | ||
| 15 | |||
| 16 | Upstream-Status: Submitted [https://lists.infradead.org/pipermail/kexec/2024-May/030034.html] | ||
| 17 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 18 | --- | ||
| 19 | kexec/arch/i386/x86-linux-setup.c | 9 ++++++--- | ||
| 20 | 1 file changed, 6 insertions(+), 3 deletions(-) | ||
| 21 | |||
| 22 | diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c | ||
| 23 | index 9a281dc..73251b9 100644 | ||
| 24 | --- a/kexec/arch/i386/x86-linux-setup.c | ||
| 25 | +++ b/kexec/arch/i386/x86-linux-setup.c | ||
| 26 | @@ -14,6 +14,7 @@ | ||
| 27 | * | ||
| 28 | */ | ||
| 29 | #define _GNU_SOURCE | ||
| 30 | +#include <libgen.h> | ||
| 31 | #include <stdint.h> | ||
| 32 | #include <stdio.h> | ||
| 33 | #include <string.h> | ||
| 34 | @@ -329,12 +330,14 @@ static int add_edd_entry(struct x86_linux_param_header *real_mode, | ||
| 35 | memset(edd_info, 0, sizeof(struct edd_info)); | ||
| 36 | |||
| 37 | /* extract the device number */ | ||
| 38 | - if (sscanf(basename(sysfs_name), "int13_dev%hhx", &devnum) != 1) { | ||
| 39 | + char* sysfs_name_copy = strdup(sysfs_name); | ||
| 40 | + if (sscanf(basename(sysfs_name_copy), "int13_dev%hhx", &devnum) != 1) { | ||
| 41 | fprintf(stderr, "Invalid format of int13_dev dir " | ||
| 42 | - "entry: %s\n", basename(sysfs_name)); | ||
| 43 | + "entry: %s\n", basename(sysfs_name_copy)); | ||
| 44 | + free(sysfs_name_copy); | ||
| 45 | return -1; | ||
| 46 | } | ||
| 47 | - | ||
| 48 | + free(sysfs_name_copy); | ||
| 49 | /* if there's a MBR signature, then add it */ | ||
| 50 | if (file_scanf(sysfs_name, "mbr_signature", "0x%x", &mbr_sig) == 1) { | ||
| 51 | real_mode->edd_mbr_sig_buffer[*current_mbr] = mbr_sig; | ||
| 52 | -- | ||
| 53 | 2.45.1 | ||
| 54 | |||
