-----Original Message----- From: Intel-xe <[email protected]> On Behalf Of Matthew Brost Sent: Wednesday, July 31, 2024 2:32 PM To: [email protected]; [email protected] Cc: [email protected]; Vivi, Rodrigo <[email protected]> Subject: [PATCH v4 2/3] drm/printer: Allow NULL data in devcoredump printer > > Useful to determine size of devcoreump before writing it out. > > Cc: Maarten Lankhorst <[email protected]> > Signed-off-by: Matthew Brost <[email protected]>
It seems this patch prevents us from copying strings into the data field if the data field hasn't been initialized. I'm not certain if it could ever be uninitialized at this point, but I recognize it as good practice to check just in case regardless. Reviewed-by: Jonathan Cavitt <[email protected]> -Jonathan Cavitt > --- > drivers/gpu/drm/drm_print.c | 13 ++++++++----- > 1 file changed, 8 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/drm_print.c b/drivers/gpu/drm/drm_print.c > index cf24dfdeb6b2..a1a4de9f9c44 100644 > --- a/drivers/gpu/drm/drm_print.c > +++ b/drivers/gpu/drm/drm_print.c > @@ -100,8 +100,9 @@ void __drm_puts_coredump(struct drm_printer *p, const > char *str) > copy = iterator->remain; > > /* Copy out the bit of the string that we need */ > - memcpy(iterator->data, > - str + (iterator->start - iterator->offset), copy); > + if (iterator->data) > + memcpy(iterator->data, > + str + (iterator->start - iterator->offset), > copy); > > iterator->offset = iterator->start + copy; > iterator->remain -= copy; > @@ -110,7 +111,8 @@ void __drm_puts_coredump(struct drm_printer *p, const > char *str) > > len = min_t(ssize_t, strlen(str), iterator->remain); > > - memcpy(iterator->data + pos, str, len); > + if (iterator->data) > + memcpy(iterator->data + pos, str, len); > > iterator->offset += len; > iterator->remain -= len; > @@ -140,8 +142,9 @@ void __drm_printfn_coredump(struct drm_printer *p, struct > va_format *vaf) > if ((iterator->offset >= iterator->start) && (len < iterator->remain)) { > ssize_t pos = iterator->offset - iterator->start; > > - snprintf(((char *) iterator->data) + pos, > - iterator->remain, "%pV", vaf); > + if (iterator->data) > + snprintf(((char *) iterator->data) + pos, > + iterator->remain, "%pV", vaf); > > iterator->offset += len; > iterator->remain -= len; > -- > 2.34.1 > >
