From: Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> Signed-off-by: Jes Sorensen <Jes.Sorensen@xxxxxxxxxx> Signed-off-by: Benjamin Romer <benjamin.romer@xxxxxxxxxx> --- drivers/staging/unisys/visorbus/visorchannel.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/staging/unisys/visorbus/visorchannel.c b/drivers/staging/unisys/visorbus/visorchannel.c index cae62fed..da7bd9c 100644 --- a/drivers/staging/unisys/visorbus/visorchannel.c +++ b/drivers/staging/unisys/visorbus/visorchannel.c @@ -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); -- 2.1.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel