diff --git a/meta-oe/dynamic-layers/perl-layer/recipes-support/rasdaemon/files/0001-rasdaemon-fix-post-processing-options.patch b/meta-oe/dynamic-layers/perl-layer/recipes-support/rasdaemon/files/0001-rasdaemon-fix-post-processing-options.patch new file mode 100644 index 0000000000..d999f288dc --- /dev/null +++ b/meta-oe/dynamic-layers/perl-layer/recipes-support/rasdaemon/files/0001-rasdaemon-fix-post-processing-options.patch @@ -0,0 +1,83 @@ +From 64bc04705ea8606eed1b1e810904cc8296e99472 Mon Sep 17 00:00:00 2001 +From: Yi Zhao +Date: Sat, 2 Aug 2025 15:43:11 +0800 +Subject: [PATCH] rasdaemon: fix post-processing options + +Some post-processing options require an argument, otherwise a segfault +will occur: + +root@qemux86-64:~# rasdaemon -p --status --ipid +Segmentation fault (core dumped) rasdaemon -p --status --ipid + +According to the specification of argp, when an option requires an +argument, we should use the 'arg' parameter, which points to the +argument string for that option. Therefore we set char* arg for these +options in struct argp_option and use it in parse_opt_offline function +instead of state->argv[state->next]. + +Fix #220 + +Upstream-Status: Backport +[https://github.com/mchehab/rasdaemon/commit/64bc04705ea8606eed1b1e810904cc8296e99472] + +Signed-off-by: Yi Zhao +Signed-off-by: Mauro Carvalho Chehab +--- + rasdaemon.c | 24 ++++++++++++------------ + 1 file changed, 12 insertions(+), 12 deletions(-) + +diff --git a/rasdaemon.c b/rasdaemon.c +index be5c390..9368b12 100644 +--- a/rasdaemon.c ++++ b/rasdaemon.c +@@ -98,22 +98,22 @@ static error_t parse_opt_offline(int key, char *arg, + event.smca = true; + break; + case MODEL: +- event.model = strtoul(state->argv[state->next], NULL, 0); ++ event.model = strtoul(arg, NULL, 0); + break; + case FAMILY: +- event.family = strtoul(state->argv[state->next], NULL, 0); ++ event.family = strtoul(arg, NULL, 0); + break; + case BANK_NUM: +- event.bank = atoi(state->argv[state->next]); ++ event.bank = atoi(arg); + break; + case IPID_REG: +- event.ipid = strtoull(state->argv[state->next], NULL, 0); ++ event.ipid = strtoull(arg, NULL, 0); + break; + case STATUS_REG: +- event.status = strtoull(state->argv[state->next], NULL, 0); ++ event.status = strtoull(arg, NULL, 0); + break; + case SYNDROME_REG: +- event.synd = strtoull(state->argv[state->next], NULL, 0); ++ event.synd = strtoull(arg, NULL, 0); + break; + default: + return ARGP_ERR_UNKNOWN; +@@ -146,12 +146,12 @@ int main(int argc, char *argv[]) + #ifdef HAVE_MCE + const struct argp_option offline_options[] = { + {"smca", SMCA, 0, 0, "AMD SMCA Error Decoding"}, +- {"model", MODEL, 0, 0, "CPU Model"}, +- {"family", FAMILY, 0, 0, "CPU Family"}, +- {"bank", BANK_NUM, 0, 0, "Bank Number"}, +- {"ipid", IPID_REG, 0, 0, "IPID Register (for SMCA systems only)"}, +- {"status", STATUS_REG, 0, 0, "Status Register"}, +- {"synd", SYNDROME_REG, 0, 0, "Syndrome Register"}, ++ {"model", MODEL, "MODEL", 0, "CPU Model"}, ++ {"family", FAMILY, "FAMILY", 0, "CPU Family"}, ++ {"bank", BANK_NUM, "BANK_NUM", 0, "Bank Number"}, ++ {"ipid", IPID_REG, "IPID_REG", 0, "IPID Register (for SMCA systems only)"}, ++ {"status", STATUS_REG, "STATUS_REG", 0, "Status Register"}, ++ {"synd", SYNDROME_REG, "SYNDROME_REG", 0, "Syndrome Register"}, + {0, 0, 0, 0, 0, 0}, + }; + +-- +2.43.0 + diff --git a/meta-oe/dynamic-layers/perl-layer/recipes-support/rasdaemon/rasdaemon_0.8.3.bb b/meta-oe/dynamic-layers/perl-layer/recipes-support/rasdaemon/rasdaemon_0.8.3.bb index 301861de38..2cc2a26acb 100644 --- a/meta-oe/dynamic-layers/perl-layer/recipes-support/rasdaemon/rasdaemon_0.8.3.bb +++ b/meta-oe/dynamic-layers/perl-layer/recipes-support/rasdaemon/rasdaemon_0.8.3.bb @@ -4,6 +4,7 @@ LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=d3070efe0afa3dc41608bd82c00bb0dc" SRC_URI = "git://github.com/mchehab/rasdaemon.git;branch=master;protocol=https \ + file://0001-rasdaemon-fix-post-processing-options.patch \ file://rasdaemon.service \ file://init"