[alsa-devel] [PATCH] ALSA: compress: avoid integer overflow for long duration offload playback

Takashi Iwai tiwai at suse.de
Tue Jun 18 10:45:40 CEST 2019


On Tue, 18 Jun 2019 10:02:59 +0200,
Pierre-Louis Bossart wrote:
> 
> On 6/18/19 9:44 AM, bgoswami at codeaurora.org wrote:
> > From: Banajit Goswami <bgoswami at codeaurora.org>
> >
> > Currently a 32 bit variable is used for storing number of bytes
> > copied to DSP, which can overflow when playback continues for a long
> > duration.
> > Change data type for this variable to __u64 to prevent overflow.
> 
> This clearly looks like a bug, the number of bytes transferred is
> stored as u64 in the runtime. I have no memories of this being
> intentional.
> 
> That said, it seems odd to me that you have an overflow on the number
> of bytes but not on the number of PCM frames. Shouldn't both the
> pcm_frames and pcm_io_frames fields also be changed to u64 while we
> are at it?
> 
> And the second issue is that this may impact apps. This is a ABI
> change, isn't it?

Yes, it breaks ABI, and we can't take this as is.

If we need 64bit values, a new ioctl must be provided while keeping
the old one still working.


thanks,

Takashi

> >
> > Signed-off-by: Dhananjay Kumar <dhakumar at codeaurora.org>
> > Signed-off-by: Banajit Goswami <bgoswami at codeaurora.org>
> > ---
> >   include/uapi/sound/compress_offload.h | 2 +-
> >   sound/core/compress_offload.c         | 2 +-
> >   2 files changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/include/uapi/sound/compress_offload.h b/include/uapi/sound/compress_offload.h
> > index 56d9567..db5edf3 100644
> > --- a/include/uapi/sound/compress_offload.h
> > +++ b/include/uapi/sound/compress_offload.h
> > @@ -67,7 +67,7 @@ struct snd_compr_params {
> >    */
> >   struct snd_compr_tstamp {
> >   	__u32 byte_offset;
> > -	__u32 copied_total;
> > +	__u64 copied_total;
> >   	__u32 pcm_frames;
> >   	__u32 pcm_io_frames;
> >   	__u32 sampling_rate;
> > diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c
> > index a1a6fd7..2d0a709 100644
> > --- a/sound/core/compress_offload.c
> > +++ b/sound/core/compress_offload.c
> > @@ -184,7 +184,7 @@ static int snd_compr_update_tstamp(struct snd_compr_stream *stream,
> >   	if (!stream->ops->pointer)
> >   		return -ENOTSUPP;
> >   	stream->ops->pointer(stream, tstamp);
> > -	pr_debug("dsp consumed till %d total %d bytes\n",
> > +	pr_debug("dsp consumed till %d total %llu bytes\n",
> >   		tstamp->byte_offset, tstamp->copied_total);
> >   	if (stream->direction == SND_COMPRESS_PLAYBACK)
> >   		stream->runtime->total_bytes_transferred = tstamp->copied_total;
> >
> 
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel at alsa-project.org
> https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 


More information about the Alsa-devel mailing list