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 */