git: 5145a7927845 - stable/13 - lindebugfs: Fix write

From: Emmanuel Vadot <manu_at_FreeBSD.org>
Date: Sat, 05 Mar 2022 11:34:14 UTC
The branch stable/13 has been updated by manu:

URL: https://cgit.FreeBSD.org/src/commit/?id=5145a7927845688e34d597b4312a13ac66817b26

commit 5145a7927845688e34d597b4312a13ac66817b26
Author:     Emmanuel Vadot <manu@FreeBSD.org>
AuthorDate: 2022-01-31 13:46:16 +0000
Commit:     Emmanuel Vadot <manu@FreeBSD.org>
CommitDate: 2022-03-05 11:12:43 +0000

    lindebugfs: Fix write
    
    For write operation pseudofs creates an sbuf with the data.
    Use this data instead of the uio as it's not usable anymore after
    uiomove.
    
    Reviewed by:    hselasky
    MFC after:      1 week
    Sponsored by:   Beckhoff Automation GmbH & Co. KG
    Differential Revision:  https://reviews.freebsd.org/D34114
    
    (cherry picked from commit 867b4decb4d50579152e52c594632cdc0f6266ff)
---
 sys/compat/lindebugfs/lindebugfs.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/sys/compat/lindebugfs/lindebugfs.c b/sys/compat/lindebugfs/lindebugfs.c
index 63161eedf14f..8eaa41412fd2 100644
--- a/sys/compat/lindebugfs/lindebugfs.c
+++ b/sys/compat/lindebugfs/lindebugfs.c
@@ -130,8 +130,14 @@ debugfs_fill(PFS_FILL_ARGS)
 	if ((rc = linux_set_current_flags(curthread, M_NOWAIT)))
 		return (rc);
 	vn.v_data = d->dm_data;
-	buf = uio->uio_iov[0].iov_base;
-	len = min(uio->uio_iov[0].iov_len, uio->uio_resid);
+	if (uio->uio_rw == UIO_READ) {
+		buf = uio->uio_iov[0].iov_base;
+		len = min(uio->uio_iov[0].iov_len, uio->uio_resid);
+	} else {
+		sbuf_finish(sb);
+		buf = sbuf_data(sb);
+		len = sbuf_len(sb);
+	}
 	off = 0;
 	lf.private_data = NULL;
 	rc = d->dm_fops->open(&vn, &lf);