Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package rasdaemon for openSUSE:Factory 
checked in at 2026-08-14 22:09:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/rasdaemon (Old)
 and      /work/SRC/openSUSE:Factory/.rasdaemon.new.1258 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "rasdaemon"

Fri Aug 14 22:09:39 2026 rev:32 rq:1371214 version:0.8.5+git10.4aec37b

Changes:
--------
--- /work/SRC/openSUSE:Factory/rasdaemon/rasdaemon.changes      2026-07-13 
14:29:20.678037869 +0200
+++ /work/SRC/openSUSE:Factory/.rasdaemon.new.1258/rasdaemon.changes    
2026-08-14 22:10:08.876875685 +0200
@@ -1,0 +2,34 @@
+Fri Aug 14 10:34:58 UTC 2026 - Thomas Renninger <[email protected]>
+
+- Remove shebang in bash completions
+A There-must-be-no-shebang-in-bash-completion-scripts.patch
+- Move configs from sysconfig (/etc/rasdaemon) to distconfig
+  (/usr/etc/rasdaemon)
+- Update to version 0.8.5+git10.4aec37b:
+  * util/ras-mc-ctl.in: use "-H" as an alias for --human
+  * ras-mc-ctl: add --human to scale --layout sizes
+  * ras-mc-ctl: fix --layout column alignment with large DIMMs
+  * ras-mc-ctl: use an explicit placeholder for unknown mainboard/product info 
(bsc#1273190)
+  * ras-mc-ctl: report missing dmidecode instead of an obscure Perl error 
(bsc#1273190)
+
+-------------------------------------------------------------------
+Fri Aug 07 18:52:38 UTC 2026 - Thomas Renninger <[email protected]>
+
+- Update to version 0.8.5+git5.c551de9:
+  * Fix dangerous stack allocations in ras-report.c
+  * Introduce commit_report_common to consolidate reporting logic
+  * ras-cxl-handler: Handle missing optional DRAM event fields gracefully
+  * rasdaemon requires debugfs - add dependency to rasdaemon.service
+  * Makefile.am: install the DIMM label database
+Remove mainlined patch:
+D debugfs_service_dependency.patch
+
+-------------------------------------------------------------------
+Tue Aug  4 16:21:35 UTC 2026 - Thomas Renninger <[email protected]>
+
+- Handle ras-mc-ctl abortion more gracefully in case dmidecode is
+  not available (bsc#1273190)
+A ras-mc-ctl-report-missing-dmidecode-instead-of-an-obscure-Perl-error.patch
+A 
ras-mc-ctl-use-an-explicit-placeholder-for-unknown-mainboard-product-info.patch
+
+-------------------------------------------------------------------

Old:
----
  debugfs_service_dependency.patch
  rasdaemon-0.8.5+git0.769593b.obscpio

New:
----
  There-must-be-no-shebang-in-bash-completion-scripts.patch
  rasdaemon-0.8.5+git10.4aec37b.obscpio

----------(Old B)----------
  Old:Remove mainlined patch:
D debugfs_service_dependency.patch
----------(Old E)----------

----------(New B)----------
  New:- Remove shebang in bash completions
A There-must-be-no-shebang-in-bash-completion-scripts.patch
- Move configs from sysconfig (/etc/rasdaemon) to distconfig
----------(New E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ rasdaemon.spec ++++++
--- /var/tmp/diff_new_pack.0l5QYE/_old  2026-08-14 22:10:10.442933122 +0200
+++ /var/tmp/diff_new_pack.0l5QYE/_new  2026-08-14 22:10:10.448933342 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           rasdaemon
-Version:        0.8.5+git0.769593b
+Version:        0.8.5+git10.4aec37b
 Release:        0
 Summary:        Utility to receive RAS error tracings
 License:        GPL-2.0-only
@@ -26,8 +26,7 @@
 Source:         %{name}-%{version}.tar.xz
 # PATCH-FIX-UPSTREAM -- based on https://github.com/mchehab/rasdaemon/pull/213
 Patch0:         
rasdaemon_ras-mc-ctl_change_no_dimm_label_message_to_info_from_error.patch
-# PATCH-FIX-UPSTREAM -- based on https://github.com/mchehab/rasdaemon/pull/253
-Patch1:         debugfs_service_dependency.patch
+Patch1:         There-must-be-no-shebang-in-bash-completion-scripts.patch
 BuildRequires:  autoconf
 BuildRequires:  automake
 BuildRequires:  gettext-devel
@@ -85,6 +84,7 @@
   --enable-yitian-ns-decode    \
   --disable-signal             \
   --enable-erst                \
+  --sysconfdir=%{_distconfdir} \
   --with-sysconfdefdir=%{_sysconfdir}/sysconfig
 make %{?_smp_mflags} V=1
 
@@ -122,11 +122,12 @@
 %{_sbindir}/rcras-mc-ctl
 %{_mandir}/*/*
 %{_unitdir}/*.service
-%dir %{_sysconfdir}/ras
-%dir %{_sysconfdir}/ras/dimm_labels.d
-%dir %{_sysconfdir}/ras/triggers
-%{_sysconfdir}/ras/triggers/mc_event_trigger
-%{_sysconfdir}/ras/triggers/mem_fail_trigger
+%dir %{_distconfdir}/ras
+%dir %{_distconfdir}/ras/dimm_labels.d
+%dir %{_distconfdir}/ras/triggers
+%{_distconfdir}/ras/triggers/mc_event_trigger
+%{_distconfdir}/ras/triggers/mem_fail_trigger
+%{_distconfdir}/ras/dimm_labels.d/*
 %dir %{_localstatedir}/lib/rasdaemon
 %ghost %{_localstatedir}/lib/rasdaemon/ras-mc_event.db
 %attr (644,root,root) %{_fillupdir}/sysconfig.rasdaemon

++++++ There-must-be-no-shebang-in-bash-completion-scripts.patch ++++++
From: Thomas Renninger <[email protected]>
Subject: There must be no shebang in bash completion scripts
References: 
Patch-Mainline: ffed3ec
Git-commit: ffed3ecc89354cd1da3fe46d3d48a8027646a12d
Git-repo: git://git.infradead.org/users/mchehab/rasdaemon.git



Signed-off-by: Thomas Renninger <[email protected]>
diff --git a/completions/ras-mc-ctl.bash b/completions/ras-mc-ctl.bash
index df60cee..cca57e2 100644
--- a/completions/ras-mc-ctl.bash
+++ b/completions/ras-mc-ctl.bash
@@ -1,5 +1,3 @@
-#!/bin/bash
-
 _ras_mc_ctl() {
     local cur prev opts
     COMPREPLY=()

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.0l5QYE/_old  2026-08-14 22:10:10.618939577 +0200
+++ /var/tmp/diff_new_pack.0l5QYE/_new  2026-08-14 22:10:10.637940274 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">git://git.infradead.org/users/mchehab/rasdaemon.git</param>
-              <param 
name="changesrevision">769593be915b4f00a9a7d56569df99bc0cff249a</param></service></servicedata>
+              <param 
name="changesrevision">4aec37be20afe17895cfe8c6955c4f2584bd1e0a</param></service></servicedata>
 (No newline at EOF)
 

++++++ rasdaemon-0.8.5+git0.769593b.obscpio -> 
rasdaemon-0.8.5+git10.4aec37b.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rasdaemon-0.8.5+git0.769593b/Makefile.am 
new/rasdaemon-0.8.5+git10.4aec37b/Makefile.am
--- old/rasdaemon-0.8.5+git0.769593b/Makefile.am        2026-06-26 
12:00:07.000000000 +0200
+++ new/rasdaemon-0.8.5+git10.4aec37b/Makefile.am       2026-08-08 
13:30:53.000000000 +0200
@@ -31,6 +31,7 @@
 EXTRA_DIST += completions/ras-mc-ctl.zsh
 EXTRA_DIST += contrib/mem_fail_trigger
 EXTRA_DIST += contrib/mc_event_trigger
+EXTRA_DIST += labels
 EXTRA_DIST += misc/rasdaemon.env
 
 CLEANFILES = misc/rasdaemon.logrotate
@@ -257,6 +258,10 @@
 # custom target
 install-data-local:
        $(install_sh) -d "$(DESTDIR)@sysconfdir@/ras/dimm_labels.d"
+       for f in @abs_srcdir@/labels/*; do \
+               test -f "$$f" || continue; \
+               $(install_sh) -m 0644 "$$f" 
"$(DESTDIR)@sysconfdir@/ras/dimm_labels.d/"; \
+       done
        $(install_sh) -d "$(DESTDIR)@sysconfdir@/ras/triggers"
        install -D -p -m 0655 @abs_srcdir@/misc/rasdaemon.env 
"$(DESTDIR)@SYSCONFDEFDIR@/rasdaemon"
        $(install_sh) @abs_srcdir@/contrib/mc_event_trigger 
"$(DESTDIR)@sysconfdir@/ras/triggers/mc_event_trigger"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/rasdaemon-0.8.5+git0.769593b/misc/rasdaemon.service.in 
new/rasdaemon-0.8.5+git10.4aec37b/misc/rasdaemon.service.in
--- old/rasdaemon-0.8.5+git0.769593b/misc/rasdaemon.service.in  2026-06-26 
12:00:07.000000000 +0200
+++ new/rasdaemon-0.8.5+git10.4aec37b/misc/rasdaemon.service.in 2026-08-08 
13:30:53.000000000 +0200
@@ -4,6 +4,7 @@
 Description=RAS daemon to log the RAS events
 # only needed when not running in foreground (--foreground | -f)
 #After=syslog.target
+RequiresMountsFor=/sys/kernel/debug
 
 [Service]
 EnvironmentFile=@SYSCONFDEFDIR@/rasdaemon
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rasdaemon-0.8.5+git0.769593b/ras-cxl-handler.c 
new/rasdaemon-0.8.5+git10.4aec37b/ras-cxl-handler.c
--- old/rasdaemon-0.8.5+git0.769593b/ras-cxl-handler.c  2026-06-26 
12:00:07.000000000 +0200
+++ new/rasdaemon-0.8.5+git10.4aec37b/ras-cxl-handler.c 2026-08-08 
13:30:53.000000000 +0200
@@ -1074,7 +1074,7 @@
                               struct tep_record *record,
                               struct tep_event *event, void *context)
 {
-       int len, i, rc;
+       int len, i;
        unsigned long long val;
        struct ras_events *ras = context;
        struct ras_cxl_dram_event ev;
@@ -1117,16 +1117,16 @@
                                              ev.type)) <= 0)
                return -1;
 
-       if (tep_get_field_val(s,  event, "sub_type", record, &val, 1) < 0)
-               return -1;
-       ev.sub_type = val;
-       if (trace_seq_printf(s, "memory_event_sub_type:%s ",
-                            get_cxl_type_str(cxl_mem_event_sub_type,
-                                             
ARRAY_SIZE(cxl_mem_event_sub_type),
-                                             ev.sub_type)) <= 0)
-               return -1;
+       /* sub_type is optional - skip gracefully if missing */
+       if (tep_get_field_val(s, event, "sub_type", record, &val, 1) == 0) {
+               ev.sub_type = val;
+               trace_seq_printf(s, "memory_event_sub_type:%s ",
+                                get_cxl_type_str(cxl_mem_event_sub_type,
+                                                 
ARRAY_SIZE(cxl_mem_event_sub_type),
+                                                 ev.sub_type));
+       }
 
-       if (tep_get_field_val(s,  event, "transaction_type", record, &val, 1) < 
0)
+       if (tep_get_field_val(s, event, "transaction_type", record, &val, 1) < 
0)
                return -1;
        ev.transaction_type = val;
        if (trace_seq_printf(s, "transaction_type:%s ",
@@ -1135,159 +1135,136 @@
                                              ev.transaction_type)) <= 0)
                return -1;
 
-       if (tep_get_field_val(s, event, "hpa", record, &val, 1) < 0)
-               return -1;
-       ev.hpa = val;
-       if (trace_seq_printf(s, "hpa:0x%llx ", (unsigned long long)ev.hpa) <= 0)
-               return -1;
+       /* hpa/hpa_alias0 are optional - may not be available for all events */
+       if (tep_get_field_val(s, event, "hpa", record, &val, 1) == 0) {
+               ev.hpa = val;
+               trace_seq_printf(s, "hpa:0x%llx ", (unsigned long long)ev.hpa);
+       }
 
-       if (tep_get_field_val(s, event, "hpa_alias0", record, &val, 1) < 0)
-               return -1;
-       ev.hpa_alias0 = val;
-       if (trace_seq_printf(s, "hpa_alias0:0x%llx ", (unsigned long 
long)ev.hpa_alias0) <= 0)
-               return -1;
+       if (tep_get_field_val(s, event, "hpa_alias0", record, &val, 1) == 0) {
+               ev.hpa_alias0 = val;
+               trace_seq_printf(s, "hpa_alias0:0x%llx ", (unsigned long 
long)ev.hpa_alias0);
+       }
 
+       /* region info is optional - may not be interleaved */
        ev.region = tep_get_field_raw(s, event, "region_name", record, &len, 1);
-       if (!ev.region)
-               return -1;
-       if (trace_seq_printf(s, "region:%s ", ev.region) <= 0)
-               return -1;
+       if (ev.region)
+               trace_seq_printf(s, "region:%s ", ev.region);
 
-       ev.region_uuid = tep_get_field_raw(s, event, "region_uuid",
-                                          record, &len, 1);
-       if (!ev.region_uuid)
-               return -1;
-       ev.region_uuid = uuid_be(ev.region_uuid);
-       if (trace_seq_printf(s, "region_uuid:%s ", ev.region_uuid) <= 0)
-               return -1;
+       ev.region_uuid = tep_get_field_raw(s, event, "region_uuid", record, 
&len, 1);
+       if (ev.region_uuid) {
+               ev.region_uuid = uuid_be(ev.region_uuid);
+               trace_seq_printf(s, "region_uuid:%s ", ev.region_uuid);
+       }
 
-       if (tep_get_field_val(s,  event, "validity_flags", record, &val, 1) < 0)
-               return -1;
-       ev.validity_flags = val;
+       /* validity_flags controls optional DRAM-specific fields */
+       if (tep_get_field_val(s, event, "validity_flags", record, &val, 1) == 0)
+               ev.validity_flags = val;
 
+       /* Process conditional fields based on validity_flags - skip gracefully 
if missing */
        if (ev.validity_flags & CXL_DER_VALID_CHANNEL) {
-               if (tep_get_field_val(s,  event, "channel", record, &val, 1) < 
0)
-                       return -1;
-               ev.channel = val;
-               if (trace_seq_printf(s, "channel:%u ", ev.channel) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "channel", record, &val, 1) == 
0) {
+                       ev.channel = val;
+                       trace_seq_printf(s, "channel:%u ", ev.channel);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_SUB_CHANNEL) {
-               if (tep_get_field_val(s,  event, "sub_channel", record, &val, 
1) < 0)
-                       return -1;
-               ev.sub_channel = val;
-               if (trace_seq_printf(s, "sub_channel:%u ", ev.sub_channel) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "sub_channel", record, &val, 1) 
== 0) {
+                       ev.sub_channel = val;
+                       trace_seq_printf(s, "sub_channel:%u ", ev.sub_channel);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_RANK) {
-               if (tep_get_field_val(s,  event, "rank", record, &val, 1) < 0)
-                       return -1;
-               ev.rank = val;
-               if (trace_seq_printf(s, "rank:%u ", ev.rank) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "rank", record, &val, 1) == 0) {
+                       ev.rank = val;
+                       trace_seq_printf(s, "rank:%u ", ev.rank);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_NIBBLE) {
-               if (tep_get_field_val(s,  event, "nibble_mask", record, &val, 
1) < 0)
-                       return -1;
-               ev.nibble_mask = val;
-               if (trace_seq_printf(s, "nibble_mask:%u ", ev.nibble_mask) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "nibble_mask", record, &val, 1) 
== 0) {
+                       ev.nibble_mask = val;
+                       trace_seq_printf(s, "nibble_mask:%u ", ev.nibble_mask);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_BANK_GROUP) {
-               if (tep_get_field_val(s,  event, "bank_group", record, &val, 1) 
< 0)
-                       return -1;
-               ev.bank_group = val;
-               if (trace_seq_printf(s, "bank_group:%u ", ev.bank_group) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "bank_group", record, &val, 1) 
== 0) {
+                       ev.bank_group = val;
+                       trace_seq_printf(s, "bank_group:%u ", ev.bank_group);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_BANK) {
-               if (tep_get_field_val(s,  event, "bank", record, &val, 1) < 0)
-                       return -1;
-               ev.bank = val;
-               if (trace_seq_printf(s, "bank:%u ", ev.bank) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "bank", record, &val, 1) == 0) {
+                       ev.bank = val;
+                       trace_seq_printf(s, "bank:%u ", ev.bank);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_ROW) {
-               if (tep_get_field_val(s,  event, "row", record, &val, 1) < 0)
-                       return -1;
-               ev.row = val;
-               if (trace_seq_printf(s, "row:%u ", ev.row) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "row", record, &val, 1) == 0) {
+                       ev.row = val;
+                       trace_seq_printf(s, "row:%u ", ev.row);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_COLUMN) {
-               if (tep_get_field_val(s,  event, "column", record, &val, 1) < 0)
-                       return -1;
-               ev.column = val;
-               if (trace_seq_printf(s, "column:%u ", ev.column) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "column", record, &val, 1) == 
0) {
+                       ev.column = val;
+                       trace_seq_printf(s, "column:%u ", ev.column);
+               }
        }
 
        if (ev.validity_flags & CXL_DER_VALID_CORRECTION_MASK) {
                ev.cor_mask = tep_get_field_raw(s, event, "cor_mask", record, 
&len, 1);
-               if (!ev.cor_mask)
-                       return -1;
-               if (trace_seq_printf(s, "correction_mask:") <= 0)
-                       return -1;
-               for (i = 0; i < CXL_EVENT_DER_CORRECTION_MASK_SIZE; i++) {
-                       if (trace_seq_printf(s, "%02x ", ev.cor_mask[i]) <= 0)
-                               break;
+               if (ev.cor_mask) {
+                       trace_seq_printf(s, "correction_mask:");
+                       for (i = 0; i < CXL_EVENT_DER_CORRECTION_MASK_SIZE; i++)
+                               trace_seq_printf(s, "%02x ", ev.cor_mask[i]);
                }
        }
 
 #ifdef HAVE_MEMORY_CE_PFA
-       /* Page offline for CE when threshold is set */
-       if (!(ev.descriptor & CXL_GMER_EVT_DESC_UNCORRECTABLE_EVENT) &&
+       /* Page offline for CE threshold events - only if HPA is valid */
+       if (ev.hpa &&
+           !(ev.descriptor & CXL_GMER_EVT_DESC_UNCORRECTABLE_EVENT) &&
            (ev.descriptor & CXL_GMER_EVT_DESC_THRESHOLD_EVENT))
                ras_hw_threshold_pageoffline(ev.hpa);
 #endif
 
        if (ev.validity_flags & CXL_DER_VALID_COMPONENT_ID) {
                ev.comp_id = tep_get_field_raw(s, event, "comp_id", record, 
&len, 1);
-               if (!ev.comp_id)
-                       return -1;
-               if (trace_seq_printf(s, "comp_id:") <= 0)
-                       return -1;
-               for (i = 0; i < CXL_EVENT_GEN_MED_COMP_ID_SIZE; i++) {
-                       if (trace_seq_printf(s, "%02x ", ev.comp_id[i]) <= 0)
-                               break;
-               }
-
-               if (ev.validity_flags & CXL_DER_VALID_COMPONENT_ID_FORMAT) {
-                       if (trace_seq_printf(s, "comp_id_pldm_valid_flags:") <= 
0)
-                               return -1;
-                       if (decode_cxl_event_flags(s, ev.comp_id[0], 
cxl_pldm_comp_id_flags,
-                                                  
ARRAY_SIZE(cxl_pldm_comp_id_flags)) < 0)
-                               return -1;
-
-                       rc = ras_cxl_print_component_id(s, ev.comp_id, 
ev.entity_id, ev.res_id);
-                       if (rc)
-                               return rc;
+               if (ev.comp_id) {
+                       trace_seq_printf(s, "comp_id:");
+                       for (i = 0; i < CXL_EVENT_GEN_MED_COMP_ID_SIZE; i++)
+                               trace_seq_printf(s, "%02x ", ev.comp_id[i]);
+
+                       if (ev.validity_flags & 
CXL_DER_VALID_COMPONENT_ID_FORMAT) {
+                               trace_seq_printf(s, 
"comp_id_pldm_valid_flags:");
+                               decode_cxl_event_flags(s, ev.comp_id[0], 
cxl_pldm_comp_id_flags,
+                                                      
ARRAY_SIZE(cxl_pldm_comp_id_flags));
+                               ras_cxl_print_component_id(s, ev.comp_id, 
ev.entity_id, ev.res_id);
+                       }
                }
        }
 
+       /* Threshold event fields are conditional - skip gracefully if missing 
*/
        if (ev.descriptor & CXL_GMER_EVT_DESC_THRESHOLD_EVENT) {
-               if (tep_get_field_val(s,  event, "cme_threshold_ev_flags", 
record, &val, 1) < 0)
-                       return -1;
-               ev.cme_threshold_ev_flags = val;
-               if (trace_seq_printf(s, "Advanced Programmable CME threshold 
Event Flags:") <= 0)
-                       return -1;
-               if (decode_cxl_event_flags(s, ev.cme_threshold_ev_flags,
-                                          cxl_cme_threshold_ev_flags,
-                                          
ARRAY_SIZE(cxl_cme_threshold_ev_flags)) < 0)
-                       return -1;
-
-               if (tep_get_field_val(s,  event, "cvme_count", record, &val, 1) 
< 0)
-                       return -1;
-               ev.cvme_count = val;
-               if (trace_seq_printf(s, "CVME Count:%u ", ev.cvme_count) <= 0)
-                       return -1;
+               if (tep_get_field_val(s, event, "cme_threshold_ev_flags", 
record, &val, 1) == 0) {
+                       ev.cme_threshold_ev_flags = val;
+                       trace_seq_printf(s, "Advanced Programmable CME 
threshold Event Flags:");
+                       decode_cxl_event_flags(s, ev.cme_threshold_ev_flags,
+                                              cxl_cme_threshold_ev_flags,
+                                              
ARRAY_SIZE(cxl_cme_threshold_ev_flags));
+               }
+
+               if (tep_get_field_val(s, event, "cvme_count", record, &val, 1) 
== 0) {
+                       ev.cvme_count = val;
+                       trace_seq_printf(s, "CVME Count:%u ", ev.cvme_count);
+               }
        }
 
        /* Insert data into the SGBD */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rasdaemon-0.8.5+git0.769593b/ras-report.c 
new/rasdaemon-0.8.5+git10.4aec37b/ras-report.c
--- old/rasdaemon-0.8.5+git0.769593b/ras-report.c       2026-06-26 
12:00:07.000000000 +0200
+++ new/rasdaemon-0.8.5+git10.4aec37b/ras-report.c      2026-08-08 
13:30:53.000000000 +0200
@@ -11,7 +11,9 @@
 #include <sys/un.h>
 #include <sys/utsname.h>
 #include <unistd.h>
+#include <stdlib.h>
 
+#include "ras-logger.h"
 #include "ras-report.h"
 #include "ras-record.h"
 
@@ -41,44 +43,60 @@
 
 static int commit_report_basic(int sockfd)
 {
-       char buf[INPUT_BUFFER_SIZE];
+       char *buf;
        struct utsname un;
        int rc = -1;
 
        if (sockfd < 0)
                return rc;
 
-       memset(buf, 0, INPUT_BUFFER_SIZE);
+       buf = calloc(1, INPUT_BUFFER_SIZE);
+       if (!buf) {
+               log(TERM, LOG_ERR, "Failed to allocate memory for basic 
report\n");
+               return -1;
+       }
+
        memset(&un, 0, sizeof(struct utsname));
 
        rc = uname(&un);
-       if (rc < 0)
+       if (rc < 0) {
+               free(buf);
                return rc;
+       }
 
        /*
         * ABRT server protocol
         */
        snprintf(buf, INPUT_BUFFER_SIZE, "PUT / HTTP/1.1\r\n\r\n");
        rc = write(sockfd, buf, strlen(buf));
-       if (rc < strlen(buf))
+       if (rc < strlen(buf)) {
+               free(buf);
                return -1;
+       }
 
        snprintf(buf, INPUT_BUFFER_SIZE, "PID=%d", (int)getpid());
        rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
+       if (rc < strlen(buf) + 1) {
+               free(buf);
                return -1;
+       }
 
        snprintf(buf, INPUT_BUFFER_SIZE, "EXECUTABLE=/boot/vmlinuz-%s",
                 un.release);
        rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
+       if (rc < strlen(buf) + 1) {
+               free(buf);
                return -1;
+       }
 
        snprintf(buf, INPUT_BUFFER_SIZE, "TYPE=%s", "ras");
        rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
+       if (rc < strlen(buf) + 1) {
+               free(buf);
                return -1;
+       }
 
+       free(buf);
        return 0;
 }
 
@@ -797,15 +815,20 @@
 
 static int commit_report_backtrace(int sockfd, int type, void *ev)
 {
-       char buf[MAX_BACKTRACE_SIZE];
-       char *pbuf = buf;
+       char *buf;
+       char *pbuf;
        int rc = -1;
        int buf_len = 0;
 
        if (sockfd < 0 || !ev)
                return -1;
 
-       memset(buf, 0, MAX_BACKTRACE_SIZE);
+       buf = calloc(1, MAX_BACKTRACE_SIZE);
+       if (!buf) {
+               log(TERM, LOG_ERR, "Failed to allocate memory for backtrace 
report\n");
+               return -1;
+       }
+       pbuf = buf;
 
        switch (type) {
        case MC_EVENT:
@@ -877,828 +900,215 @@
                                                (struct ras_signal_event *)ev);
                break;
        default:
+               free(buf);
                return -1;
        }
 
-       if (rc < 0)
+       if (rc < 0) {
+               free(buf);
                return -1;
+       }
 
        buf_len = strlen(buf);
 
        for (; buf_len > INPUT_BUFFER_SIZE - 1; buf_len -= (INPUT_BUFFER_SIZE - 
1)) {
                rc = write(sockfd, pbuf, INPUT_BUFFER_SIZE - 1);
-               if (rc < INPUT_BUFFER_SIZE - 1)
+               if (rc < INPUT_BUFFER_SIZE - 1) {
+                       free(buf);
                        return -1;
+               }
 
                pbuf = pbuf + INPUT_BUFFER_SIZE - 1;
        }
 
        rc = write(sockfd, pbuf, buf_len + 1);
-       if (rc < buf_len)
+       if (rc < buf_len) {
+               free(buf);
                return -1;
+       }
 
+       free(buf);
        return 0;
 }
 
-int ras_report_mc_event(struct ras_events *ras, struct ras_mc_event *ev)
+static int commit_report_common(struct ras_events *ras, int type, void *ev, 
const char *analyzer, const char *reason)
 {
-       char buf[MAX_MESSAGE_SIZE];
+       char *buf;
        int sockfd = -1;
        int done = 0;
        int rc = -1;
 
-       memset(buf, 0, sizeof(buf));
+       buf = calloc(1, MAX_MESSAGE_SIZE);
+       if (!buf) {
+               log(TERM, LOG_ERR, "Failed to allocate memory for report\n");
+               return -1;
+       }
 
        sockfd = setup_report_socket();
-       if (sockfd < 0)
+       if (sockfd < 0) {
+               free(buf);
                return -1;
+       }
 
        rc = commit_report_basic(sockfd);
        if (rc < 0)
-               goto mc_fail;
+               goto fail;
 
-       rc = commit_report_backtrace(sockfd, MC_EVENT, ev);
+       rc = commit_report_backtrace(sockfd, type, ev);
        if (rc < 0)
-               goto mc_fail;
+               goto fail;
 
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-mc");
+       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", analyzer);
        rc = write(sockfd, buf, strlen(buf) + 1);
        if (rc < strlen(buf) + 1)
-               goto mc_fail;
+               goto fail;
 
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "EDAC driver report 
problem");
+       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", reason);
        rc = write(sockfd, buf, strlen(buf) + 1);
        if (rc < strlen(buf) + 1)
-               goto mc_fail;
+               goto fail;
 
        done = 1;
 
-mc_fail:
+fail:
        if (sockfd >= 0)
                close(sockfd);
+       free(buf);
+       return done ? 0 : -1;
+}
 
-       if (done)
-               return 0;
-
-       return -1;
+int ras_report_mc_event(struct ras_events *ras, struct ras_mc_event *ev)
+{
+       return commit_report_common(ras, MC_EVENT, ev,
+                                   "rasdaemon-mc",
+                                   "EDAC driver report problem");
 }
 
 int ras_report_aer_event(struct ras_events *ras, struct ras_aer_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto aer_fail;
-
-       rc = commit_report_backtrace(sockfd, AER_EVENT, ev);
-       if (rc < 0)
-               goto aer_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-aer");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto aer_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s",
-                "PCIe AER driver report problem");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto aer_fail;
-
-       done = 1;
-
-aer_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, AER_EVENT, ev,
+                                   "rasdaemon-aer",
+                                   "PCIe AER driver report problem");
 }
 
 int ras_report_non_standard_event(struct ras_events *ras,
                                  struct ras_non_standard_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return rc;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto non_standard_fail;
-
-       rc = commit_report_backtrace(sockfd, NON_STANDARD_EVENT, ev);
-       if (rc < 0)
-               goto non_standard_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-non-standard");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto non_standard_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s",
-                "Unknown CPER section problem");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto non_standard_fail;
-
-       rc = 0;
-
-non_standard_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       return rc;
+       return commit_report_common(ras, NON_STANDARD_EVENT, ev,
+                                   "rasdaemon-non-standard",
+                                   "Unknown CPER section problem");
 }
 
 int ras_report_arm_event(struct ras_events *ras, struct ras_arm_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return rc;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto arm_fail;
-
-       rc = commit_report_backtrace(sockfd, ARM_EVENT, ev);
-       if (rc < 0)
-               goto arm_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-arm");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto arm_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "ARM CPU report problem");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto arm_fail;
-
-       rc = 0;
-
-arm_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       return rc;
+       return commit_report_common(ras, ARM_EVENT, ev,
+                                   "rasdaemon-arm",
+                                   "ARM CPU report problem");
 }
 
 int ras_report_mce_event(struct ras_events *ras, struct mce_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto mce_fail;
-
-       rc = commit_report_backtrace(sockfd, MCE_EVENT, ev);
-       if (rc < 0)
-               goto mce_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-mce");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto mce_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s",
-                "Machine Check driver report problem");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto mce_fail;
-
-       done = 1;
-
-mce_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, MCE_EVENT, ev,
+                                   "rasdaemon-mce",
+                                   "Machine Check driver report problem");
 }
 
 int ras_report_devlink_event(struct ras_events *ras, struct devlink_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto devlink_fail;
-
-       rc = commit_report_backtrace(sockfd, DEVLINK_EVENT, ev);
-       if (rc < 0)
-               goto devlink_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-devlink");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto devlink_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s",
-                "devlink health report problem");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto devlink_fail;
-
-       done = 1;
-
-devlink_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, DEVLINK_EVENT, ev,
+                                   "rasdaemon-devlink",
+                                   "devlink health report problem");
 }
 
 int ras_report_diskerror_event(struct ras_events *ras, struct diskerror_event 
*ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto diskerror_fail;
-
-       rc = commit_report_backtrace(sockfd, DISKERROR_EVENT, ev);
-       if (rc < 0)
-               goto diskerror_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-diskerror");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto diskerror_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "disk I/O error");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto diskerror_fail;
-
-       done = 1;
-
-diskerror_fail:
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, DISKERROR_EVENT, ev,
+                                   "rasdaemon-diskerror",
+                                   "disk I/O error");
 }
 
 int ras_report_mf_event(struct ras_events *ras, struct ras_mf_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto mf_fail;
-
-       rc = commit_report_backtrace(sockfd, MF_EVENT, ev);
-       if (rc < 0)
-               goto mf_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-memory_failure");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto mf_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "memory failure problem");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto mf_fail;
-
-       done = 1;
-
-mf_fail:
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-       else
-               return -1;
+       return commit_report_common(ras, MF_EVENT, ev,
+                                   "rasdaemon-memory_failure",
+                                   "memory failure problem");
 }
 
 int ras_report_cxl_poison_event(struct ras_events *ras,
                                struct ras_cxl_poison_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_poison_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_POISON_EVENT, ev);
-       if (rc < 0)
-               goto cxl_poison_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-cxl-poison");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_poison_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "CXL poison");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_poison_fail;
-
-       done = 1;
-
-cxl_poison_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_POISON_EVENT, ev,
+                                   "rasdaemon-cxl-poison",
+                                   "CXL poison");
 }
 
 int ras_report_cxl_aer_ue_event(struct ras_events *ras,
                                struct ras_cxl_aer_ue_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_aer_ue_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_AER_UE_EVENT, ev);
-       if (rc < 0)
-               goto cxl_aer_ue_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-cxl-aer-uncorrectable-error");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_aer_ue_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s",
-                "CXL AER uncorrectable error");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_aer_ue_fail;
-
-       done = 1;
-
-cxl_aer_ue_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_AER_UE_EVENT, ev,
+                                   "rasdaemon-cxl-aer-uncorrectable-error",
+                                   "CXL AER uncorrectable error");
 }
 
 int ras_report_cxl_aer_ce_event(struct ras_events *ras,
                                struct ras_cxl_aer_ce_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_aer_ce_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_AER_CE_EVENT, ev);
-       if (rc < 0)
-               goto cxl_aer_ce_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-cxl-aer-correctable-error");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_aer_ce_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s",
-                "CXL AER correctable error");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_aer_ce_fail;
-
-       done = 1;
-
-cxl_aer_ce_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_AER_CE_EVENT, ev,
+                                   "rasdaemon-cxl-aer-correctable-error",
+                                   "CXL AER correctable error");
 }
 
 int ras_report_cxl_overflow_event(struct ras_events *ras,
                                  struct ras_cxl_overflow_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_overflow_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_OVERFLOW_EVENT, ev);
-       if (rc < 0)
-               goto cxl_overflow_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-cxl-overflow");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_overflow_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "CXL overflow");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_overflow_fail;
-
-       done = 1;
-
-cxl_overflow_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_OVERFLOW_EVENT, ev,
+                                   "rasdaemon-cxl-overflow",
+                                   "CXL overflow");
 }
 
 int ras_report_cxl_generic_event(struct ras_events *ras,
                                 struct ras_cxl_generic_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_generic_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_GENERIC_EVENT, ev);
-       if (rc < 0)
-               goto cxl_generic_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-cxl_generic_event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_generic_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "CXL Generic Event ");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_generic_fail;
-
-       done = 1;
-
-cxl_generic_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_GENERIC_EVENT, ev,
+                                   "rasdaemon-cxl_generic_event",
+                                   "CXL Generic Event ");
 }
 
 int ras_report_cxl_general_media_event(struct ras_events *ras,
                                       struct ras_cxl_general_media_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_general_media_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_GENERAL_MEDIA_EVENT, ev);
-       if (rc < 0)
-               goto cxl_general_media_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-cxl_general_media_event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_general_media_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "CXL General Media Event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_general_media_fail;
-
-       done = 1;
-
-cxl_general_media_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_GENERAL_MEDIA_EVENT, ev,
+                                   "rasdaemon-cxl_general_media_event",
+                                   "CXL General Media Event");
 }
 
 int ras_report_cxl_dram_event(struct ras_events *ras,
                              struct ras_cxl_dram_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_dram_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_DRAM_EVENT, ev);
-       if (rc < 0)
-               goto cxl_dram_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-cxl_dram_event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_dram_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "CXL DRAM Event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_dram_fail;
-
-       done = 1;
-
-cxl_dram_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_DRAM_EVENT, ev,
+                                   "rasdaemon-cxl_dram_event",
+                                   "CXL DRAM Event");
 }
 
 int ras_report_cxl_memory_module_event(struct ras_events *ras,
                                       struct ras_cxl_memory_module_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto cxl_memory_module_fail;
-
-       rc = commit_report_backtrace(sockfd, CXL_MEMORY_MODULE_EVENT, ev);
-       if (rc < 0)
-               goto cxl_memory_module_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-cxl_memory_module_event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_memory_module_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "CXL Memory Module Event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto cxl_memory_module_fail;
-
-       done = 1;
-
-cxl_memory_module_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, CXL_MEMORY_MODULE_EVENT, ev,
+                                   "rasdaemon-cxl_memory_module_event",
+                                   "CXL Memory Module Event");
 }
 
 int ras_report_signal_event(struct ras_events *ras,
                            struct ras_signal_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int done = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return -1;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto signal_fail;
-
-       rc = commit_report_backtrace(sockfd, SIGNAL_EVENT, ev);
-       if (rc < 0)
-               goto signal_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s",
-                "rasdaemon-signal_event");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto signal_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "SIGBUS for Hardware 
error");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto signal_fail;
-
-       done = 1;
-
-signal_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       if (done)
-               return 0;
-
-       return -1;
+       return commit_report_common(ras, SIGNAL_EVENT, ev,
+                                   "rasdaemon-signal_event",
+                                   "SIGBUS for Hardware error");
 }
 
 int ras_report_reri_event(struct ras_events *ras, struct ras_reri_event *ev)
 {
-       char buf[MAX_MESSAGE_SIZE];
-       int sockfd = 0;
-       int rc = -1;
-
-       memset(buf, 0, sizeof(buf));
-
-       sockfd = setup_report_socket();
-       if (sockfd < 0)
-               return rc;
-
-       rc = commit_report_basic(sockfd);
-       if (rc < 0)
-               goto reri_fail;
-
-       rc = commit_report_backtrace(sockfd, RERI_EVENT, ev);
-       if (rc < 0)
-               goto reri_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "ANALYZER=%s", "rasdaemon-reri");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto reri_fail;
-
-       snprintf(buf, MAX_MESSAGE_SIZE, "REASON=%s", "RISC-V RERI error 
report");
-       rc = write(sockfd, buf, strlen(buf) + 1);
-       if (rc < strlen(buf) + 1)
-               goto reri_fail;
-
-       rc = 0;
-
-reri_fail:
-
-       if (sockfd >= 0)
-               close(sockfd);
-
-       return rc;
+       return commit_report_common(ras, RERI_EVENT, ev,
+                                   "rasdaemon-reri",
+                                   "RISC-V RERI error report");
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/rasdaemon-0.8.5+git0.769593b/util/ras-mc-ctl.in 
new/rasdaemon-0.8.5+git10.4aec37b/util/ras-mc-ctl.in
--- old/rasdaemon-0.8.5+git0.769593b/util/ras-mc-ctl.in 2026-06-26 
12:00:07.000000000 +0200
+++ new/rasdaemon-0.8.5+git10.4aec37b/util/ras-mc-ctl.in        2026-08-08 
13:30:53.000000000 +0200
@@ -26,6 +26,7 @@
 my $prefix      = "@prefix@";
 my $sysconfdir  = "@sysconfdir@";
 my $dmidecode   = find_prog ("dmidecode");
+my $unknown_hw  = "<undefined>";
 
 my $has_aer = 0;
 my $has_arm = 0;
@@ -84,6 +85,7 @@
  --delay=N          Delay N seconds before writing DIMM labels.
  --labeldb=DB       Load label database from file DB.
  --layout           Display the memory layout.
+ --human, -H        With --layout, scale DIMM sizes to the largest exact unit.
  --summary          Presents a summary of the logged errors.
  --errors           Shows the errors stored at the error database.
  --error-count      Shows the corrected and uncorrected error counts using 
sysfs.
@@ -168,6 +170,7 @@
     $conf{opt}{errors} = 0;
     $conf{opt}{error_count} = 0;
     $conf{opt}{per_rank} = 0;
+    $conf{opt}{human} = 0;
     $conf{opt}{vendor_errors_summary} = 0;
     $conf{opt}{vendor_errors} = 0;
     $conf{opt}{since} = '';
@@ -191,6 +194,7 @@
                         "errors" =>          \$conf{opt}{errors},
                         "error-count" =>     \$conf{opt}{error_count},
                         "per-rank" =>        \$conf{opt}{per_rank},
+                        "human|H" =>         \$conf{opt}{human},
                         "vendor-errors-summary" =>    
\$conf{opt}{vendor_errors_summary},
                         "vendor-errors" =>   \$conf{opt}{vendor_errors},
                         "since=s" =>         \$conf{opt}{since},
@@ -211,6 +215,11 @@
        exit (1);
     }
 
+    if ($conf{opt}{human} && !$conf{opt}{display_memory_layout}) {
+       log_error ("Only use --human with --layout\n");
+       exit (1);
+    }
+
     if ($conf{opt}{since}) {
        if ($conf{opt}{since} !~ /^20\d\d-[01]\d-[0-3]\d/) {
            log_error ("--since requires a date like yyyy-mm-dd where yyyy is 
the year, mm the month, and dd the day\n");
@@ -423,17 +432,17 @@
        ($vendor, $model) = guess_vendor_model ();
     }
 
-    $conf{mainboard}{vendor} = $vendor;
-    $conf{mainboard}{model}  = $model;
+    $conf{mainboard}{vendor} = $vendor || $unknown_hw;
+    $conf{mainboard}{model}  = $model  || $unknown_hw;
 
     ($pvendor, $pname) = guess_product ();
     # since product vendor is rare, use mainboard's vendor
     if ($pvendor) {
        $conf{mainboard}{product_vendor} = $pvendor;
     } else {
-       $conf{mainboard}{product_vendor} = $vendor;
+       $conf{mainboard}{product_vendor} = $conf{mainboard}{vendor};
     }
-    $conf{mainboard}{product_name} = $pname if $pname;
+    $conf{mainboard}{product_name} = $pname || $unknown_hw;
 }
 
 sub guess_vendor_model_dmidecode {
@@ -441,6 +450,8 @@
     my ($system_vendor, $system_model);
     my $line = 0;
 
+    return (undef, undef) if ($dmidecode eq "");
+
     $< == 0 || die "Must be root to run dmidecode\n";
 
     open (DMI, "$dmidecode |") or die "failed to run $dmidecode: $!\n";
@@ -549,6 +560,8 @@
 }
 
 sub guess_dimm_label {
+    die "Can't guess DIMM labels: dmidecode not found in PATH\n" if 
($dmidecode eq "");
+
     open (DMI, "$dmidecode |") or die "failed to run $dmidecode: $!\n";
 
   LINE:
@@ -866,7 +879,19 @@
        if (!$size) {
            $size = 0;
        }
-       my $s = sprintf "  %4i MB  |", $size;
+       my $s;
+       if ($conf{opt}{human}) {
+           my @units = ('MB', 'GB', 'TB', 'PB');
+           my $i = 0;
+           my $scaled = $size;
+           while ($scaled >= 1024 && $i < $#units) {
+               $scaled /= 1024;
+               $i++;
+           }
+           $s = sprintf "  %4i %s  |", $scaled, $units[$i];
+       } else {
+           $s = sprintf "  %6i MB  |", $size;
+       }
        $item_size = length($s);
        return $s;
     }

++++++ rasdaemon.obsinfo ++++++
--- /var/tmp/diff_new_pack.0l5QYE/_old  2026-08-14 22:10:11.091956925 +0200
+++ /var/tmp/diff_new_pack.0l5QYE/_new  2026-08-14 22:10:11.105957438 +0200
@@ -1,5 +1,5 @@
 name: rasdaemon
-version: 0.8.5+git0.769593b
-mtime: 1782468007
-commit: 769593be915b4f00a9a7d56569df99bc0cff249a
+version: 0.8.5+git10.4aec37b
+mtime: 1786188653
+commit: 4aec37be20afe17895cfe8c6955c4f2584bd1e0a
 

Reply via email to