On Fri, 2018-02-16 at 10:43 +0100, Norbert Manthey wrote: > The current implementation will leak a byte to the log via memmove. The > specified 27 bytes are off-by-one, as the payload is 25 bytes, and the > termination character is only one byte large. To avoid this, factor out > the error message, and furthermore make the second parameter of the > append_entry function const. > > Fixes: 4562236b3bc0 ("drm/amd/dc: Add dc display driver (v2)") > > The full trace is as follows: > > In function ‘memmove’, >    from ‘append_entry’ at >         drivers/gpu/drm/amd/display/dc/basics/logger.c:257:2, >    from ‘dm_logger_append_va’ at >         drivers/gpu/drm/amd/display/dc/basics/logger.c:348:4 >    detected read beyond size of object passed as 2nd parameter > > Signed-off-by: Norbert Manthey That same code exists in a different form in at least 4.15 so Cc: stable@vger.kernel.org > Cc: Alex Deucher > Cc: "Christian König" > Cc: "David (ChunMing) Zhou" > Cc: David Airlie > Cc: Harry Wentland > Cc: Tony Cheng > Cc: Yongqiang Sun > Cc: Aric Cyr > Cc: Colin Ian King > Cc: Corbin McElhanney > Cc: Jordan Lazare > Cc: Dmytro Laktyushkin > Cc: amd-gfx@lists.freedesktop.org > Cc: dri-devel@lists.freedesktop.org > Cc: linux-kernel@vger.kernel.org > > --- >  drivers/gpu/drm/amd/display/dc/basics/logger.c | 6 ++++-- >  1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/amd/display/dc/basics/logger.c b/drivers/gpu/drm/amd/display/dc/basics/logger.c > index 180a9d6..958070c 100644 > --- a/drivers/gpu/drm/amd/display/dc/basics/logger.c > +++ b/drivers/gpu/drm/amd/display/dc/basics/logger.c > @@ -243,7 +243,7 @@ static void log_heading(struct log_entry *entry) >   >  static void append_entry( >   struct log_entry *entry, > - char *buffer, > + const char *buffer, >   uint32_t buf_size) >  { >   if (!entry->buf || > @@ -345,7 +345,9 @@ void dm_logger_append_va( >   if (size < LOG_MAX_LINE_SIZE - 1) { >   append_entry(entry, buffer, size); >   } else { > - append_entry(entry, "LOG_ERROR, line too long\n", 27); > + static const char msg[] = "LOG_ERROR, line too long\n"; > + > + append_entry(entry, msg, sizeof(msg)); >   } >   } >  }