]> git.ipfire.org Git - thirdparty/mdadm.git/commitdiff
variable "sigterm" must be volatile sig_atomic_t
authorCristian Rodríguez <cristian@rodriguez.im>
Wed, 10 Dec 2025 19:30:00 +0000 (16:30 -0300)
committerXiaoNi87 <xni@redhat.com>
Wed, 4 Feb 2026 13:44:54 +0000 (21:44 +0800)
Signals handlers can only read/write to volatile sig_atomic_t variables
or atomic lock-free ones.
Anything else results in undefined behaviour.

Signed-off-by: Cristian Rodríguez <cristian@rodriguez.im>
Grow.c
mdmon.c
mdmon.h

diff --git a/Grow.c b/Grow.c
index b2cdd89338ee00835163555f17904c12448e4867..083b1c264df17303ae55bbf6bc4bc5441855dc61 100644 (file)
--- a/Grow.c
+++ b/Grow.c
@@ -2985,7 +2985,7 @@ static int impose_level(int fd, int level, char *devname, int verbose)
        return 0;
 }
 
-int sigterm = 0;
+volatile sig_atomic_t sigterm = 0;
 static void catch_term(int sig)
 {
        sigterm = 1;
diff --git a/mdmon.c b/mdmon.c
index a16647c6a85f75f92538dc4349f8de78920e4115..302d0248b8ad312f7da2fe8f9049383e810b53ed 100644 (file)
--- a/mdmon.c
+++ b/mdmon.c
@@ -74,7 +74,7 @@ struct active_array *pending_discard;
 
 int mon_tid, mgr_tid;
 
-int sigterm;
+volatile sig_atomic_t sigterm;
 
 #ifdef USE_PTHREADS
 static void *run_child(void *v)
diff --git a/mdmon.h b/mdmon.h
index ce6218a2fafed0f59a7b852ea20891d7e8fe890e..37f5841aa0e767604ce184aa3a7688b8bb93046f 100644 (file)
--- a/mdmon.h
+++ b/mdmon.h
@@ -81,7 +81,7 @@ extern struct md_generic_cmd *active_cmd;
 void remove_pidfile(char *devname);
 void do_monitor(struct supertype *container);
 void do_manager(struct supertype *container);
-extern int sigterm;
+extern volatile sig_atomic_t sigterm;
 
 int read_dev_state(int fd);
 bool is_container_member(struct mdstat_ent *mdstat, char *container);