[alsa-devel] [PATCH 3/3] ALSA: pcm: implement the ioctl/mmap filter for the anonymous dup
Takashi Iwai
tiwai at suse.de
Tue Jan 29 19:47:53 CET 2019
On Tue, 29 Jan 2019 18:59:09 +0100,
Jaroslav Kysela wrote:
>
> Create seven control bits to allow the various restrictions for the
> anonymous file descriptor.
>
> Signed-off-by: Jaroslav Kysela <perex at perex.cz>
> ---
> include/sound/pcm.h | 1 +
> include/uapi/sound/asound.h | 9 +++++
> sound/core/pcm_native.c | 85 ++++++++++++++++++++++++++++++++++++++++++++-
> 3 files changed, 94 insertions(+), 1 deletion(-)
>
> diff --git a/include/sound/pcm.h b/include/sound/pcm.h
> index 61e4c69e73c7..29d22a3a458c 100644
> --- a/include/sound/pcm.h
> +++ b/include/sound/pcm.h
> @@ -226,6 +226,7 @@ struct snd_pcm_ops {
> struct snd_pcm_file {
> struct snd_pcm_substream *substream;
> int no_compat_mmap;
> + unsigned int perm; /* file descriptor permissions */
> unsigned int user_pversion; /* supported protocol version */
> };
>
> diff --git a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h
> index ebc17d5a3490..29d3a16caa9a 100644
> --- a/include/uapi/sound/asound.h
> +++ b/include/uapi/sound/asound.h
> @@ -571,6 +571,15 @@ enum {
> #define SNDRV_CHMAP_PHASE_INVERSE (0x01 << 16)
> #define SNDRV_CHMAP_DRIVER_SPEC (0x02 << 16)
>
> +#define SNDRV_PCM_PERM_MMAP (1<<0)
> +#define SNDRV_PCM_PERM_MMAP_STATUS (1<<1)
> +#define SNDRV_PCM_PERM_MMAP_CONTROL (1<<2)
> +#define SNDRV_PCM_PERM_RW (1<<3)
> +#define SNDRV_PCM_PERM_CONTROL (1<<4)
> +#define SNDRV_PCM_PERM_STATUS (1<<5)
> +#define SNDRV_PCM_PERM_SYNC (1<<6)
> +#define SNDRV_PCM_PERM_MAX ((SNDRV_PCM_PERM_SYNC<<1)-1)
I'd name it SNDRV_PCM_PERM_MASK, and ...
> @@ -2850,10 +2851,11 @@ static int snd_pcm_anonymous_dup(struct file *file,
> int flags;
> struct file *nfile;
> struct snd_pcm *pcm = substream->pcm;
> + struct snd_pcm_file *pcm_file;
>
> if (get_user(perm, (int __user *)arg))
> return -EFAULT;
> - if (perm < 0)
> + if (perm < 0 || perm > SNDRV_PCM_PERM_MAX)
> return -ENOSYS;
... check like
if (perm & ~SNDRV_PCM_PER_MASK)
return -EINVAL;
thanks,
Takashi
More information about the Alsa-devel
mailing list