[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1069410: efitools: FTBFS on arm64: make[1]: *** [Make.rules:130: HelloWorld-signed.efi] Error 1



Hello, I found a patch in Ubuntu archive, unfortunately the patch is really huge, and I'm not confident to just upload it because
it also drops some support.

I'm attaching the diff file.

Gianfranco
diff -Nru efitools-1.9.2/debian/changelog efitools-1.9.2/debian/changelog
--- efitools-1.9.2/debian/changelog	2024-09-27 16:09:33.000000000 +0200
+++ efitools-1.9.2/debian/changelog	2024-10-15 09:19:03.000000000 +0200
@@ -1,3 +1,16 @@
+efitools (1.9.2-3.2) unstable; urgency=low
+
+  * Non-maintainer upload
+
+  [ Aaron Rainbolt ]
+  * Cherrypick patch from Chris to fix generating ESL for SBAT binaries.
+  * Use --no-parallel switch with dh to avoid potential build failures.
+
+  [ Mate Kukri ]
+  * Fix FTBFS (LP: #2083030)
+
+ -- Gianfranco Costamagna <locutusofborg@debian.org>  Tue, 15 Oct 2024 09:19:03 +0200
+
 efitools (1.9.2-3.1) unstable; urgency=medium
 
   * Non-maintainer upload.
diff -Nru efitools-1.9.2/debian/patches/fix-ftbfs-lp2083030.patch efitools-1.9.2/debian/patches/fix-ftbfs-lp2083030.patch
--- efitools-1.9.2/debian/patches/fix-ftbfs-lp2083030.patch	1970-01-01 01:00:00.000000000 +0100
+++ efitools-1.9.2/debian/patches/fix-ftbfs-lp2083030.patch	2024-09-27 14:27:39.000000000 +0200
@@ -0,0 +1,240 @@
+Description: Fix FTBFS
+ - Remove redefintions of __STDC_VERSION__
+ - Add _XOPEN_SOURCE=700 to expose some APIs being used
+ - Remove dangerous usage of mktemp and sscanf
+ - Use standard C types over non-standard aliases
+ - Remove CFLAGS disabling mitigations
+ - Stop building EFI binaries
+Author: Mate Kukri <mate.kukri@canonical.com>
+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/efitools/+bug/2083030
+Last-Update: 2024-09-27
+---
+This patch header follows DEP-3: http://dep.debian.net/deps/dep3/
+--- a/Make.rules
++++ b/Make.rules
+@@ -17,7 +17,7 @@
+ endif
+ INCDIR	   = -I$(TOPDIR)include/ -I/usr/include/efi -I/usr/include/efi/$(ARCH) -I/usr/include/efi/protocol
+ CPPFLAGS   = -DCONFIG_$(ARCH)
+-CFLAGS	   = -O2 -g $(ARCH3264) -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -fno-stack-protector -ffreestanding -fno-stack-check
++CFLAGS	   = -O2 -g $(ARCH3264) -fpic -Wall -fshort-wchar -fno-strict-aliasing -fno-merge-constants -D_XOPEN_SOURCE=700
+ LDFLAGS	   = -nostdlib
+ CRTOBJ		= crt0-efi-$(ARCH).o
+ CRTPATHS	= /lib /lib64 /lib/efi /lib64/efi /usr/lib /usr/lib64 /usr/lib/efi /usr/lib64/efi /usr/lib/gnuefi /usr/lib64/gnuefi
+--- a/cert-to-efi-sig-list.c
++++ b/cert-to-efi-sig-list.c
+@@ -6,7 +6,6 @@
+ 
+ 
+ #include <stdint.h>
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ #ifdef CONFIG_arm
+ /* FIXME:
+--- a/efi-keytool.c
++++ b/efi-keytool.c
+@@ -15,7 +15,6 @@
+ #include <fcntl.h>
+ #include <unistd.h>
+ 
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ 
+ #include <kernel_efivars.h>
+--- a/efi-readvar.c
++++ b/efi-readvar.c
+@@ -17,7 +17,6 @@
+ 
+ #include <openssl/x509.h>
+ 
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ 
+ #include <kernel_efivars.h>
+--- a/efi-updatevar.c
++++ b/efi-updatevar.c
+@@ -11,6 +11,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <strings.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+ #include <unistd.h>
+@@ -20,7 +21,6 @@
+ #include <openssl/err.h>
+ #include <openssl/pem.h>
+ 
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ 
+ #include <kernel_efivars.h>
+--- a/flash-var.c
++++ b/flash-var.c
+@@ -10,7 +10,6 @@
+ #include <fcntl.h>
+ #include <unistd.h>
+ 
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ 
+ #include <version.h>
+--- a/hash-to-efi-sig-list.c
++++ b/hash-to-efi-sig-list.c
+@@ -4,7 +4,6 @@
+  * see COPYING file
+  */
+ #include <stdint.h>
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ #ifdef CONFIG_arm
+ /* FIXME:
+--- a/lib/kernel_efivars.c
++++ b/lib/kernel_efivars.c
+@@ -16,7 +16,6 @@
+ #include <unistd.h>
+ #include <time.h>
+ 
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ 
+ #include <kernel_efivars.h>
+@@ -29,54 +28,39 @@
+ void
+ kernel_variable_init(void)
+ {
+-	char fname[] = "/tmp/efi.XXXXXX";
+-	char cmdline[256];
+-	int fd, ret;
+-	struct stat st;
+-	char *buf;
+-
+-	if (kernel_efi_path)
+-		return;
+-	mktemp(fname);
+-	snprintf(cmdline, sizeof(cmdline), "mount -l > %s", fname);
+-	ret = system(cmdline);
+-	if (WEXITSTATUS(ret) != 0)
+-		/* hopefully stderr said what was wrong */
+-		exit(1);
+-	fd = open(fname, O_RDONLY);
+-	unlink(fname);
+-	if (fd < 0) {
+-		fprintf(stderr, "Failed to open output of %s\n", cmdline);
+-		exit(1);
+-	}
+-	if (fstat(fd, &st) < 0) {
+-		perror("stat failed");
+-		exit(1);
+-	}
+-	if (st.st_size == 0) {
+-		fprintf(stderr, "No efivarfs filesystem is mounted\n");
++	FILE *mount_l_fp = NULL;
++	char *path = NULL;
++	char *type = NULL;
++
++	mount_l_fp = popen("mount -l", "r");
++
++	if (mount_l_fp == NULL) {
++		fprintf(stderr, "Failed to get output of mount -l\n");
+ 		exit(1);
+ 	}
+-	buf = malloc(st.st_size);
+-	read(fd, buf, st.st_size);
+-	close(fd);
+-
+-	char *ptr = buf;
+-	char path[512], type[512];
+-	while (ptr < buf + st.st_size) {
+-		int count;
+-
+-		sscanf(ptr, "%*s on %s type %s %*[^\n]\n%n", path, type, &count);
+-		ptr += count;
+-		if (strcmp(type, "efivarfs") == 0)
++
++	while (fscanf(mount_l_fp, "%*s on %ms type %ms %*[^\n]\n", &path, &type) == 2) {
++		if (strcmp(type, "efivarfs") == 0) {
++			kernel_efi_path = strdup(path);
+ 			break;
++		}
++		free(path);
++		path = NULL;
++		free(type);
++		type = NULL;
+ 	}
+-	if (strcmp(type, "efivarfs") != 0) {
++
++	if (mount_l_fp != NULL)
++		pclose(mount_l_fp);
++	if (path != NULL)
++		free(path);
++	if (type != NULL)
++		free(type);
++
++	if (kernel_efi_path == NULL) {
+ 		fprintf(stderr, "No efivarfs filesystem is mounted\n");
+ 		exit(1);
+ 	}
+-	kernel_efi_path = malloc(strlen(path) + 1);
+-	strcpy(kernel_efi_path, path);
+ }
+ 
+ int
+--- a/sig-list-to-certs.c
++++ b/sig-list-to-certs.c
+@@ -4,7 +4,6 @@
+  * see COPYING file
+  */
+ #include <stdint.h>
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ #ifdef CONFIG_arm
+ /* FIXME:
+--- a/sign-efi-sig-list.c
++++ b/sign-efi-sig-list.c
+@@ -4,7 +4,6 @@
+  * see COPYING file
+  */
+ #include <stdint.h>
+-#define __STDC_VERSION__ 199901L
+ #include <efi.h>
+ #ifdef CONFIG_arm
+ /* FIXME:
+--- a/lib/asn1/oid.h
++++ b/lib/asn1/oid.h
+@@ -11,11 +11,11 @@
+ #define OID_H_
+ 
+ typedef struct {
+-    u_char octet;
+-    u_int  next;
+-    u_int  down;
+-    u_int  level;
+-    const u_char *name;
++    unsigned char octet;
++    unsigned int  next;
++    unsigned int  down;
++    unsigned int  level;
++    const unsigned char *name;
+ } oid_t;
+ 
+ extern const oid_t oid_names[];
+--- a/Makefile
++++ b/Makefile
+@@ -30,15 +30,13 @@
+ 
+ EFISIGNED = $(patsubst %.efi,%-signed.efi,$(EFIFILES))
+ 
+-all: $(EFISIGNED) $(BINARIES) $(MANPAGES) noPK.auth $(KEYAUTH) \
++all: $(BINARIES) $(MANPAGES) noPK.auth $(KEYAUTH) \
+ 	$(KEYUPDATEAUTH) $(KEYBLACKLISTAUTH) $(KEYHASHBLACKLISTAUTH)
+ 
+ 
+ install: all
+ 	$(INSTALL) -m 755 -d $(MANDIR)
+ 	$(INSTALL) -m 644 $(MANPAGES) $(MANDIR)
+-	$(INSTALL) -m 755 -d $(EFIDIR)
+-	$(INSTALL) -m 755 $(EFIFILES) $(EFIDIR)
+ 	$(INSTALL) -m 755 -d $(BINDIR)
+ 	$(INSTALL) -m 755 $(BINARIES) $(BINDIR)
+ 	$(INSTALL) -m 755 mkusb.sh $(BINDIR)/efitool-mkusb
diff -Nru efitools-1.9.2/debian/patches/sbat-compat.patch efitools-1.9.2/debian/patches/sbat-compat.patch
--- efitools-1.9.2/debian/patches/sbat-compat.patch	1970-01-01 01:00:00.000000000 +0100
+++ efitools-1.9.2/debian/patches/sbat-compat.patch	2023-11-21 05:39:12.000000000 +0100
@@ -0,0 +1,84 @@
+diff --git a/include/pecoff.h b/include/pecoff.h
+index 537d134..6ac57d1 100644
+--- a/include/pecoff.h
++++ b/include/pecoff.h
+@@ -1,7 +1,8 @@
+ #include <PeImage.h>
+ 
+ EFI_STATUS
+-pecoff_read_header(PE_COFF_LOADER_IMAGE_CONTEXT *context, void *data);
++pecoff_read_header(PE_COFF_LOADER_IMAGE_CONTEXT *context, void *data,
++		   UINTN size);
+ EFI_STATUS
+ pecoff_relocate(PE_COFF_LOADER_IMAGE_CONTEXT *context, void **data);
+ EFI_STATUS
+diff --git a/lib/pecoff.c b/lib/pecoff.c
+index 26d9dcf..96878b9 100644
+--- a/lib/pecoff.c
++++ b/lib/pecoff.c
+@@ -69,7 +69,7 @@
+ #include <buildefi.h>
+ 
+ EFI_STATUS
+-pecoff_read_header(PE_COFF_LOADER_IMAGE_CONTEXT *context, void *data)
++pecoff_read_header(PE_COFF_LOADER_IMAGE_CONTEXT *context, void *data, UINTN size)
+ {
+ 	EFI_IMAGE_DOS_HEADER *DosHdr = data;
+ 	EFI_IMAGE_OPTIONAL_HEADER_UNION *PEHdr = data;
+@@ -116,7 +116,7 @@ pecoff_read_header(PE_COFF_LOADER_IMAGE_CONTEXT *context, void *data)
+ 	context->NumberOfSections = PEHdr->Pe32.FileHeader.NumberOfSections;
+ 	context->FirstSection = (EFI_IMAGE_SECTION_HEADER *)((char *)PEHdr + PEHdr->Pe32.FileHeader.SizeOfOptionalHeader + sizeof(UINT32) + sizeof(EFI_IMAGE_FILE_HEADER));
+ 
+-	if (context->SecDir->VirtualAddress >= context->ImageSize) {
++	if (context->SecDir->VirtualAddress >= size) {
+ 		Print(L"Malformed security header\n");
+ 		return EFI_INVALID_PARAMETER;
+ 	}
+@@ -404,7 +404,7 @@ pecoff_execute_image(EFI_FILE *file, CHAR16 *name, EFI_HANDLE image,
+ 	}
+ 
+ 	Print(L"Read %d bytes from %s\n", DataSize, name);
+-	efi_status = pecoff_read_header(&context, buffer);
++	efi_status = pecoff_read_header(&context, buffer, DataSize);
+ 	if (efi_status != EFI_SUCCESS) {
+ 		Print(L"Failed to read header\n");
+ 		goto out;
+diff --git a/lib/pkcs7verify.c b/lib/pkcs7verify.c
+index 06701fd..2bdadbe 100644
+--- a/lib/pkcs7verify.c
++++ b/lib/pkcs7verify.c
+@@ -172,7 +172,7 @@ pkcs7verify_allow(VOID *data, UINTN len)
+ 	EFI_STATUS status;
+ 	int i;
+ 
+-	status = pecoff_read_header(&context, data);
++	status = pecoff_read_header(&context, data, len);
+ 	if (status != EFI_SUCCESS)
+ 		goto out;
+ 
+diff --git a/lib/sha256.c b/lib/sha256.c
+index 180fa16..9ca1c21 100644
+--- a/lib/sha256.c
++++ b/lib/sha256.c
+@@ -290,7 +290,7 @@ sha256_get_pecoff_digest_mem(void *buffer, UINTN DataSize,
+ 	 * filled to the end of the page */
+ 	DataSize = ALIGN_VALUE(DataSize, 8);
+ 
+-	efi_status = pecoff_read_header(&context, buffer);
++	efi_status = pecoff_read_header(&context, buffer, DataSize);
+ 	if (efi_status != EFI_SUCCESS) {
+ 		Print(L"Failed to read header\n");
+ 		return efi_status;
+diff --git a/lib/shim_protocol.c b/lib/shim_protocol.c
+index a735aa1..9ef4a20 100644
+--- a/lib/shim_protocol.c
++++ b/lib/shim_protocol.c
+@@ -13,7 +13,7 @@
+ static EFI_STATUS shimprotocol_context(void *data, unsigned int size,
+ 				       PE_COFF_LOADER_IMAGE_CONTEXT *context)
+ {
+-	return pecoff_read_header(context, data);
++	return pecoff_read_header(context, data, size);
+ }
+ 
+ static EFI_STATUS shimprotocol_verify(void *buffer, UINT32 size)
diff -Nru efitools-1.9.2/debian/patches/series efitools-1.9.2/debian/patches/series
--- efitools-1.9.2/debian/patches/series	2024-09-27 16:09:33.000000000 +0200
+++ efitools-1.9.2/debian/patches/series	2024-10-15 09:19:03.000000000 +0200
@@ -2,3 +2,5 @@
 fix-deps.patch
 allow-riscv64-build.patch
 efitools-add-build-support-for-loongarch64.patch
+sbat-compat.patch
+fix-ftbfs-lp2083030.patch
diff -Nru efitools-1.9.2/debian/rules efitools-1.9.2/debian/rules
--- efitools-1.9.2/debian/rules	2022-05-24 19:48:58.000000000 +0200
+++ efitools-1.9.2/debian/rules	2024-10-12 23:46:59.000000000 +0200
@@ -7,5 +7,6 @@
 override_dh_auto_install:
 	dh_auto_install -- EFIDIR="debian/efitools/usr/lib/efitools/${DEB_TARGET_MULTIARCH}"
 
+# Building 0.9.2 with parallel=8 failed.
 %:
-	dh $@
+	dh $@ --no-parallel

Reply to: