Module Name:    src
Committed By:   rin
Date:           Wed Aug 23 03:49:00 UTC 2023

Modified Files:
        src/usr.bin/mail: fio.c thread.c

Log Message:
mail: Fix regression for recent use-after-free fix

For makemessage(), do not skip thread_fix_old_links() for
newly-allocated message as before.

Thanks jun@ for report.


To generate a diff of this commit:
cvs rdiff -u -r1.44 -r1.45 src/usr.bin/mail/fio.c
cvs rdiff -u -r1.15 -r1.16 src/usr.bin/mail/thread.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/mail/fio.c
diff -u src/usr.bin/mail/fio.c:1.44 src/usr.bin/mail/fio.c:1.45
--- src/usr.bin/mail/fio.c:1.44	Thu Aug 10 20:36:28 2023
+++ src/usr.bin/mail/fio.c	Wed Aug 23 03:49:00 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: fio.c,v 1.44 2023/08/10 20:36:28 mrg Exp $	*/
+/*	$NetBSD: fio.c,v 1.45 2023/08/23 03:49:00 rin Exp $	*/
 
 /*
  * Copyright (c) 1980, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)fio.c	8.2 (Berkeley) 4/20/95";
 #else
-__RCSID("$NetBSD: fio.c,v 1.44 2023/08/10 20:36:28 mrg Exp $");
+__RCSID("$NetBSD: fio.c,v 1.45 2023/08/23 03:49:00 rin Exp $");
 #endif
 #endif /* not lint */
 
@@ -126,6 +126,7 @@ makemessage(FILE *f, int omsgCount, int 
 	struct message *omessage;	/* old message structure array */
 	struct message *nmessage;
 	ptrdiff_t off;
+	int need_init;
 
 	omessage = get_abs_message(1);
 
@@ -135,13 +136,15 @@ makemessage(FILE *f, int omsgCount, int 
 		off = 0;
 	else
 		off = dot - omessage;
+	need_init = (omessage == NULL);
 	nmessage = realloc(omessage, size);
 	if (nmessage == NULL)
 		err(EXIT_FAILURE,
 		    "Insufficient memory for %d messages", nmsgCount);
 	dot = nmessage + off;
 
-	thread_fix_old_links(nmessage, off, omsgCount);
+	if (off != 0 || need_init != 0)
+		thread_fix_old_links(nmessage, off, omsgCount);
 
 #ifndef THREAD_SUPPORT
 	message = nmessage;

Index: src/usr.bin/mail/thread.c
diff -u src/usr.bin/mail/thread.c:1.15 src/usr.bin/mail/thread.c:1.16
--- src/usr.bin/mail/thread.c:1.15	Thu Aug 10 20:36:28 2023
+++ src/usr.bin/mail/thread.c	Wed Aug 23 03:49:00 2023
@@ -1,4 +1,4 @@
-/*	$NetBSD: thread.c,v 1.15 2023/08/10 20:36:28 mrg Exp $	*/
+/*	$NetBSD: thread.c,v 1.16 2023/08/23 03:49:00 rin Exp $	*/
 
 /*-
  * Copyright (c) 2006 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #ifndef __lint__
-__RCSID("$NetBSD: thread.c,v 1.15 2023/08/10 20:36:28 mrg Exp $");
+__RCSID("$NetBSD: thread.c,v 1.16 2023/08/23 03:49:00 rin Exp $");
 #endif /* not __lint__ */
 
 #include <assert.h>
@@ -443,8 +443,6 @@ PUBLIC void
 thread_fix_old_links(struct message *nmessage, ptrdiff_t off, int omsgCount)
 {
 	int i;
-	if (off == 0)
-		return;
 
 #ifndef NDEBUG
 	message_array.t_head = nmessage; /* for assert check in thread_fix_new_links */

Reply via email to