From 2178e8c27aada86ce679d90b8d6cd61dc3bc7f6b Mon Sep 17 00:00:00 2001 From: Daniel Kolesa Date: Wed, 7 Jun 2023 17:06:00 +0200 Subject: [PATCH] sh: make smark a static variable instead of a local in main() We are modifying it after setjmp and then accessing it after the jump, so it cannot be a local. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D40415 --- bin/sh/main.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/bin/sh/main.c b/bin/sh/main.c index a77f9528064d..3dd2b0d83738 100644 --- a/bin/sh/main.c +++ b/bin/sh/main.c @@ -100,7 +100,13 @@ static char *find_dot_file(char *); int main(int argc, char *argv[]) { - struct stackmark smark = {0}, smark2; + /* + * As smark is accessed after a longjmp, it cannot be a local in main(). + * The C standard specifies that the values of non-volatile local + * variables are unspecified after a jump if modified between the + * setjmp and longjmp. + */ + static struct stackmark smark, smark2; volatile int state; char *shinit;