LCOV - code coverage report
Current view: top level - sound/core - hwdep_compat.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 0 24 0.0 %
Date: 2022-04-01 14:58:12 Functions: 0 2 0.0 %
Branches: 0 24 0.0 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0-or-later
       2                 :            : /*
       3                 :            :  *   32bit -> 64bit ioctl wrapper for hwdep API
       4                 :            :  *   Copyright (c) by Takashi Iwai <tiwai@suse.de>
       5                 :            :  */
       6                 :            : 
       7                 :            : /* This file is included from hwdep.c */
       8                 :            : 
       9                 :            : #include <linux/compat.h>
      10                 :            : 
      11                 :            : struct snd_hwdep_dsp_image32 {
      12                 :            :         u32 index;
      13                 :            :         unsigned char name[64];
      14                 :            :         u32 image;      /* pointer */
      15                 :            :         u32 length;
      16                 :            :         u32 driver_data;
      17                 :            : } /* don't set packed attribute here */;
      18                 :            : 
      19                 :          0 : static int snd_hwdep_dsp_load_compat(struct snd_hwdep *hw,
      20                 :            :                                      struct snd_hwdep_dsp_image32 __user *src)
      21                 :            : {
      22                 :          0 :         struct snd_hwdep_dsp_image __user *dst;
      23                 :          0 :         compat_caddr_t ptr;
      24                 :          0 :         u32 val;
      25                 :            : 
      26                 :          0 :         dst = compat_alloc_user_space(sizeof(*dst));
      27                 :            : 
      28                 :            :         /* index and name */
      29   [ #  #  #  # ]:          0 :         if (copy_in_user(dst, src, 4 + 64))
      30                 :          0 :                 return -EFAULT;
      31         [ #  # ]:          0 :         if (get_user(ptr, &src->image) ||
      32         [ #  # ]:          0 :             put_user(compat_ptr(ptr), &dst->image))
      33                 :            :                 return -EFAULT;
      34         [ #  # ]:          0 :         if (get_user(val, &src->length) ||
      35         [ #  # ]:          0 :             put_user(val, &dst->length))
      36                 :            :                 return -EFAULT;
      37         [ #  # ]:          0 :         if (get_user(val, &src->driver_data) ||
      38         [ #  # ]:          0 :             put_user(val, &dst->driver_data))
      39                 :            :                 return -EFAULT;
      40                 :            : 
      41                 :          0 :         return snd_hwdep_dsp_load(hw, dst);
      42                 :            : }
      43                 :            : 
      44                 :            : enum {
      45                 :            :         SNDRV_HWDEP_IOCTL_DSP_LOAD32   = _IOW('H', 0x03, struct snd_hwdep_dsp_image32)
      46                 :            : };
      47                 :            : 
      48                 :          0 : static long snd_hwdep_ioctl_compat(struct file * file, unsigned int cmd,
      49                 :            :                                    unsigned long arg)
      50                 :            : {
      51                 :          0 :         struct snd_hwdep *hw = file->private_data;
      52      [ #  #  # ]:          0 :         void __user *argp = compat_ptr(arg);
      53      [ #  #  # ]:          0 :         switch (cmd) {
      54                 :          0 :         case SNDRV_HWDEP_IOCTL_PVERSION:
      55                 :            :         case SNDRV_HWDEP_IOCTL_INFO:
      56                 :            :         case SNDRV_HWDEP_IOCTL_DSP_STATUS:
      57                 :          0 :                 return snd_hwdep_ioctl(file, cmd, (unsigned long)argp);
      58                 :          0 :         case SNDRV_HWDEP_IOCTL_DSP_LOAD32:
      59                 :          0 :                 return snd_hwdep_dsp_load_compat(hw, argp);
      60                 :            :         }
      61         [ #  # ]:          0 :         if (hw->ops.ioctl_compat)
      62                 :          0 :                 return hw->ops.ioctl_compat(hw, file, cmd, arg);
      63                 :            :         return -ENOIOCTLCMD;
      64                 :            : }

Generated by: LCOV version 1.14