[PATCH] Solaris xf86OSRingBell() off-by-one error in filling iov[] array

Peter Hutterer peter.hutterer at who-t.net
Mon Feb 15 14:02:39 PST 2010


On Mon, Feb 15, 2010 at 01:42:28PM -0800, Alan Coopersmith wrote:
> When generating sound buffers for /dev/audio bells, insert waveform
> for beep *or* silence, but not both, so we don't write one entry past
> the end of the iov buffer when the final bit of soundwave ends up in
> the final entry allocated in the iov array.
> 
> Fixes OpenSolaris bug 6894890:
>  http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6894890
> 
> Signed-off-by: Alan Coopersmith <alan.coopersmith at sun.com>
> ---
>  hw/xfree86/os-support/solaris/sun_bell.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/hw/xfree86/os-support/solaris/sun_bell.c b/hw/xfree86/os-support/solaris/sun_bell.c
> index 7f146ea..05d1749 100644
> --- a/hw/xfree86/os-support/solaris/sun_bell.c
> +++ b/hw/xfree86/os-support/solaris/sun_bell.c
> @@ -126,14 +126,15 @@ xf86OSRingBell(int loudness, int pitch, int duration)
>      iovcnt = 0;
>  
>      for (cnt = 0; cnt <= repeats; cnt++) {
> -        iov[iovcnt].iov_base = (char *) samples;
> -        iov[iovcnt++].iov_len = sizeof(samples);
>          if (cnt == repeats) {
>              /* Insert a bit of silence so that multiple beeps are distinct and
>               * not compressed into a single tone.
>               */
>              iov[iovcnt].iov_base = (char *) silence;
>              iov[iovcnt++].iov_len = sizeof(silence);
> +        } else {
> +            iov[iovcnt].iov_base = (char *) samples;
> +            iov[iovcnt++].iov_len = sizeof(samples);
>          }
>          if ((iovcnt >= IOV_MAX) || (cnt == repeats)) {
>              written = writev(audioFD, iov, iovcnt);
> -- 
> 1.5.6.5
 
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
  Peter


More information about the xorg-devel mailing list