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@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