[Cbe-oss-dev] [PATCH] libspe2: prevent segfault when SPE memory is not available

Kazunori Asayama asayama at sm.sony.co.jp
Mon Nov 19 13:22:12 EST 2007


D. Herrendoerfer wrote:
> This patch prevents libspe2 to memcpy to a
> non-mapped SPE.
> The use of memcpy is a fallback when DMA over the
> kernel interface is not possible. Although the DMA-ing
> to a non-existing SPE is an error in itself it will
> provoke a segfault in libspe2 instead of an error response.
> 
> Signed-off-by: D.Herrendoerfer <herrend at de.ibm.com>

Looks good. Please go ahead.

> 
> Index: libspe2/spebase/dma.c
> ===================================================================
> --- libspe2/spebase/dma.c	(revision 95)
> +++ libspe2/spebase/dma.c	(working copy)
> @@ -24,6 +24,7 @@
>  #include <string.h>
>  #include <unistd.h>
>  
> +#include <sys/mman.h>
>  #include <sys/poll.h>
>  
>  #include "create.h"
> @@ -102,6 +103,10 @@ static int spe_do_mfc_put(spe_context_pt
>  	}
>  	else {
>  		/* the kernel does not support DMA, so just copy directly */
> +		if (spectx->base_private->mem_mmap_base == MAP_FAILED) {
> +			errno = EINVAL;
> +			return -1;
> +		}
>  		memcpy(dst, spectx->base_private->mem_mmap_base + src, size);
>  		return 0;
>  	}
> @@ -118,6 +123,10 @@ static int spe_do_mfc_get(spe_context_pt
>  	}
>  	else {
>  		/* the kernel does not support DMA, so just copy directly */
> +		if (spectx->base_private->mem_mmap_base == MAP_FAILED) {
> +			errno = EINVAL;
> +			return -1;
> +		}
>  		memcpy(spectx->base_private->mem_mmap_base + dst, src, size);
>  		return 0;
>  	}




More information about the cbe-oss-dev mailing list