From b98afb23bf54d9acbbe568ce1d7a747acb62b2b0 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sun, 9 Apr 2023 04:12:53 +0900 Subject: [PATCH] kernel-image: make inspect_kernel() optionally take directory fd --- src/boot/bootctl-uki.c | 6 ++++-- src/shared/kernel-image.c | 9 ++++++--- src/shared/kernel-image.h | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/boot/bootctl-uki.c b/src/boot/bootctl-uki.c index 718bac5ab24..8808c30569a 100644 --- a/src/boot/bootctl-uki.c +++ b/src/boot/bootctl-uki.c @@ -1,5 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include + #include "alloc-util.h" #include "bootctl-uki.h" #include "kernel-image.h" @@ -8,7 +10,7 @@ int verb_kernel_identify(int argc, char *argv[], void *userdata) { KernelImageType t; int r; - r = inspect_kernel(argv[1], &t, NULL, NULL, NULL); + r = inspect_kernel(AT_FDCWD, argv[1], &t, NULL, NULL, NULL); if (r < 0) return r; @@ -21,7 +23,7 @@ int verb_kernel_inspect(int argc, char *argv[], void *userdata) { KernelImageType t; int r; - r = inspect_kernel(argv[1], &t, &cmdline, &uname, &pname); + r = inspect_kernel(AT_FDCWD, argv[1], &t, &cmdline, &uname, &pname); if (r < 0) return r; diff --git a/src/shared/kernel-image.c b/src/shared/kernel-image.c index b5ea1bb2a0b..3d2ec820d96 100644 --- a/src/shared/kernel-image.c +++ b/src/shared/kernel-image.c @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #include "fd-util.h" +#include "fileio.h" #include "env-file.h" #include "kernel-image.h" #include "os-util.h" @@ -255,6 +256,7 @@ static int inspect_uki( } int inspect_kernel( + int dir_fd, const char *filename, KernelImageType *ret_type, char **ret_cmdline, @@ -267,11 +269,12 @@ int inspect_kernel( KernelImageType t; int r; + assert(dir_fd >= 0 || dir_fd == AT_FDCWD); assert(filename); - f = fopen(filename, "re"); - if (!f) - return log_error_errno(errno, "Failed to open kernel image file '%s': %m", filename); + r = xfopenat(dir_fd, filename, "re", 0, &f); + if (r < 0) + return log_error_errno(r, "Failed to open kernel image file '%s': %m", filename); r = pe_sections(f, §ions, &scount); if (r < 0) diff --git a/src/shared/kernel-image.h b/src/shared/kernel-image.h index d1875920cc7..41b2c08f9a6 100644 --- a/src/shared/kernel-image.h +++ b/src/shared/kernel-image.h @@ -16,6 +16,7 @@ typedef enum KernelImageType { const char* kernel_image_type_to_string(KernelImageType t) _const_; int inspect_kernel( + int dir_fd, const char *filename, KernelImageType *ret_type, char **ret_cmdline, -- 2.47.3