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

Commit 0abb60c1 authored by Jes Sorensen's avatar Jes Sorensen Committed by Greg Kroah-Hartman
Browse files

staging: unisys: visorchannel_write(): Handle partial channel_header writes

parent 36203e71
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -213,13 +213,16 @@ int
visorchannel_write(struct visorchannel *channel, ulong offset,
		   void *local, ulong nbytes)
{
	size_t size = sizeof(struct channel_header);
	size_t chdr_size = sizeof(struct channel_header);
	size_t copy_size;

	if (offset + nbytes > channel->memregion.nbytes)
		return -EIO;

	if (!offset && nbytes >= size)
		memcpy(&channel->chan_hdr, local, size);
	if (offset < chdr_size) {
		copy_size = min(chdr_size, nbytes) - offset;
		memcpy(&channel->chan_hdr + offset, local, copy_size);
	}

	memcpy_toio(channel->memregion.mapped + offset, local, nbytes);