git: 3fb51f85c5f3 - main - net/samba416: Patch to prevent abnormal smbd abort

From: Joseph Mingrone <jrm_at_FreeBSD.org>
Date: Sun, 11 Feb 2024 04:23:53 UTC
The branch main has been updated by jrm:

URL: https://cgit.FreeBSD.org/ports/commit/?id=3fb51f85c5f397a427eca02936c935cba048a06e

commit 3fb51f85c5f397a427eca02936c935cba048a06e
Author:     Joseph Mingrone <jrm@FreeBSD.org>
AuthorDate: 2023-12-24 14:41:30 +0000
Commit:     Joseph Mingrone <jrm@FreeBSD.org>
CommitDate: 2024-02-11 04:20:00 +0000

    net/samba416: Patch to prevent abnormal smbd abort
    
    Update a call to memcpy() because readdir() only guarantees memory up to
    result+result->d_reclen is readable.  Under certain conditions,
    result+sizeof(struct dirent) landed in unmapped memory.
    
    Most of the legwork to pinpoint the problem, as well as a solution
    similar to the one applied here, was submitted by uratan@miomio.jp.
    Martin Simmons <martin@lispworks.com> contributed to understanding the
    problem and wrote a useful test case.
    
    PR:             275597
    Approved by:    maintainer timeout
    Sponsored by:   The FreeBSD Foundation
    Differential Revision:  https://reviews.freebsd.org/D43171
---
 net/samba416/Makefile                               |  2 +-
 net/samba416/files/patch-source3_modules_vfs__cap.c | 14 ++++++++++++++
 2 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/net/samba416/Makefile b/net/samba416/Makefile
index 79b06f99eeb1..65536326cbdb 100644
--- a/net/samba416/Makefile
+++ b/net/samba416/Makefile
@@ -1,6 +1,6 @@
 PORTNAME=			${SAMBA4_BASENAME}416
 PORTVERSION=			${SAMBA4_VERSION}
-PORTREVISION=			3
+PORTREVISION=			4
 CATEGORIES?=			net
 MASTER_SITES=			SAMBA/samba/stable SAMBA/samba/rc
 DISTNAME=			${SAMBA4_DISTNAME}
diff --git a/net/samba416/files/patch-source3_modules_vfs__cap.c b/net/samba416/files/patch-source3_modules_vfs__cap.c
new file mode 100644
index 000000000000..8e40492bf70d
--- /dev/null
+++ b/net/samba416/files/patch-source3_modules_vfs__cap.c
@@ -0,0 +1,14 @@
+--- source3/modules/vfs_cap.c.orig	2022-01-24 10:26:59 UTC
++++ source3/modules/vfs_cap.c
+@@ -112,7 +112,10 @@ static struct dirent *cap_readdir(vfs_handle_struct *h
+ 		return NULL;
+ 	}
+ 	talloc_set_name_const(newdirent, "struct dirent");
+-	memcpy(newdirent, result, sizeof(struct dirent));
++	/* See FreeBSD bug #275597 for an explanation of this patch. */
++	/* memcpy(newdirent, result, sizeof(struct dirent)); */
++	memcpy(newdirent, result, result->d_reclen);
++	/*******************************************************************/
+ 	memcpy(&newdirent->d_name, newname, newnamelen);
+ 	return newdirent;
+ }