[Crash-utility] [PATCH v3] x86_64_exception_frame only performs EFRAME_VERIFY if it is the only flag

David Mair dmair at suse.com
Wed Sep 9 16:35:59 UTC 2020


Hi Kazu,

I swear that last week I couldn't build past:

verify_addr = (local - bt->stackbuf) + bt->stackbase;

without a gcc error on the two char * in the parentheses being
used in a ulong assignment. Last week it required casts on both
char * to build for me. This week build of the same workspace
of expanded source works through the same line without any casts.
Below is a patch to replace the one in this thread's header post.
It is cleaned of the casts I previously had in the line above.
It builds fixes the problems I described in this thread's header
and is unmodified other than removal of the casts I previously
had in the line above.

I'm sorry for the trouble getting it tidy.

Signed-off-by: David Mair <dmair at suse.com>
--- 
diff --git a/x86_64.c b/x86_64.c
index fc05e8a..dec3730 100644
--- a/x86_64.c
+++ b/x86_64.c
@@ -4412,15 +4412,20 @@ x86_64_exception_frame(ulong flags, ulong kvaddr, char *local,
         long r8, r9, r10, r11, r12, r13, r14, r15;
 	struct machine_specific *ms;
 	struct syment *sp;
-	ulong offset;
+	ulong offset, verify_addr;
 	char *pt_regs_buf;
 	long verified;
 	long err;
 	char buf[BUFSIZE];
 
-	if (flags == EFRAME_VERIFY) {
-		if (!accessible(kvaddr) || 
-		    !accessible(kvaddr + SIZE(pt_regs) - sizeof(long)))
+	if (flags & EFRAME_VERIFY) {
+		if (kvaddr)
+			verify_addr = kvaddr;
+		else
+			verify_addr = (local - bt->stackbuf) + bt->stackbase;
+
+		if (!accessible(verify_addr) || 
+		    !accessible(verify_addr + SIZE(pt_regs) - sizeof(long)))
 			return FALSE;
 	}
 




More information about the Crash-utility mailing list