Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 18e042f0 authored by Oleg Drokin's avatar Oleg Drokin Committed by Greg Kroah-Hartman
Browse files

lustre: Correct KUC code max changelog msg size



The kernel to userspace communication routines (KUC) allocate
and limit the maximum cs_buf size to CR_MAXSIZE.  However this
fails to account for the fact that the buffer is assumed to begin
with a struct kuc_hdr.  To allocate and account for that space,
we introduce a new define, KUC_CHANGELOG_MSG_MAXSIZE.

Signed-off-by: default avatarChristopher J. Morrone <morrone2@llnl.gov>
Reviewed-on: http://review.whamcloud.com/7406
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3587


Reviewed-by: default avatarAndreas Dilger <andreas.dilger@intel.com>
Reviewed-by: default avatarjacques-Charles Lafoucriere <jacques-charles.lafoucriere@cea.fr>
Reviewed-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarOleg Drokin <oleg.drokin@intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 910827f1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -61,6 +61,8 @@ struct kuc_hdr {
	__u16 kuc_msglen;     /* Including header */
} __attribute__((aligned(sizeof(__u64))));

#define KUC_CHANGELOG_MSG_MAXSIZE (sizeof(struct kuc_hdr)+CR_MAXSIZE)

#define KUC_MAGIC  0x191C /*Lustre9etLinC */
#define KUC_FL_BLOCK 0x01   /* Wait for send */

+3 −3
Original line number Diff line number Diff line
@@ -1430,7 +1430,7 @@ static struct kuc_hdr *changelog_kuc_hdr(char *buf, int len, int flags)
{
	struct kuc_hdr *lh = (struct kuc_hdr *)buf;

	LASSERT(len <= CR_MAXSIZE);
	LASSERT(len <= KUC_CHANGELOG_MSG_MAXSIZE);

	lh->kuc_magic = KUC_MAGIC;
	lh->kuc_transport = KUC_TRANSPORT_CHANGELOG;
@@ -1503,7 +1503,7 @@ static int mdc_changelog_send_thread(void *csdata)
	CDEBUG(D_CHANGELOG, "changelog to fp=%p start "LPU64"\n",
	       cs->cs_fp, cs->cs_startrec);

	OBD_ALLOC(cs->cs_buf, CR_MAXSIZE);
	OBD_ALLOC(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE);
	if (cs->cs_buf == NULL)
		GOTO(out, rc = -ENOMEM);

@@ -1540,7 +1540,7 @@ out:
	if (ctxt)
		llog_ctxt_put(ctxt);
	if (cs->cs_buf)
		OBD_FREE(cs->cs_buf, CR_MAXSIZE);
		OBD_FREE(cs->cs_buf, KUC_CHANGELOG_MSG_MAXSIZE);
	OBD_FREE_PTR(cs);
	return rc;
}