alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
From: Takashi Sakamoto <o-takashi@sakamocchi.jp>
To: Takashi Iwai <tiwai@suse.de>
Cc: Felipe Balbi <balbi@kernel.org>,
	alsa-devel@alsa-project.org,
	Kai Vehmanen <kai.vehmanen@linux.intel.com>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Peter Ujfalusi <peter.ujfalusi@linux.intel.com>,
	Cezary Rojewski <cezary.rojewski@intel.com>,
	Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>,
	Liam Girdwood <liam.r.girdwood@linux.intel.com>,
	Mark Brown <broonie@kernel.org>,
	Ranjani Sridharan <ranjani.sridharan@linux.intel.com>,
	Bard Liao <yung-chuan.liao@linux.intel.com>
Subject: Re: [PATCH 00/11] ALSA: PCM state reference optimization
Date: Tue, 27 Sep 2022 10:22:07 +0900	[thread overview]
Message-ID: <YzJQP26l3k7yrTrs@workstation> (raw)
In-Reply-To: <20220926135558.26580-1-tiwai@suse.de>

Hi,

On Mon, Sep 26, 2022 at 03:55:47PM +0200, Takashi Iwai wrote:
> Hi,
> 
> this is a patch set for simplifying the reference to the current PCM
> state by having the local copy in runtime instead of relying on
> runtime->status indirection.  This also hardens against the attack by
> modifying the mmapped status record.
 
The overall patches looks good to me and I have no objections, while I
have some slight opinions to them in a place of sound driver developer.

> The first patch does the basic job in the core PCM side,

The main concern is indirect accessing to state field via some pointer
hops. I think addition of helper macro at first step eases centre of your
work, like:

```
diff --git a/include/sound/pcm.h b/include/sound/pcm.h
index 8c48a5bce88c..f6a160cb8135 100644
--- a/include/sound/pcm.h
+++ b/include/sound/pcm.h
@@ -669,6 +669,20 @@ void snd_pcm_stream_unlock_irqrestore(struct snd_pcm_substream *substream,
             stream <= SNDRV_PCM_STREAM_LAST;           \
             stream++)
 
+/**
+ * snd_pcm_stream_state - Return state in runtime of the PCM substream.
+ * @substream: substream to check. runtime should be attached.
+ *
+ * Return state in runtime of the PCM substream. The substream should exists and
+ * runtime should be attached to it.
+ */
+static inline snd_pcm_state_t snd_pcm_stream_state(const snd_pcm_substream *substream)
+{
+       snd_BUG_ON(!(sub) || !(sub)->runtime);
+
+       return substream->runtime->status->state;
+}
```

As we can see, sound driver programmer sometimes checks state of runtime
in their code, thus the macro could helps them as well as centre of your
change.

> and the
> second patch flips the PCM status mmap to read-only for hardening,

The patch looks good to me as well as the patch for asihpi driver, and
should be in your tree independent from the others.

> while the remaining patches are for drivers to follow the core
> change.
>
> The conversions are straightforward.  In most places, it's just
> replacing runtime->status->state with runtime->state.

The usage of mentioned macro can control the concerned access. Now
addition of new field, `state` to runtime structure can be done easily.


> Takashi
> 
> ===
> 
> Takashi Iwai (11):
>   ALSA: pcm: Avoid reference to status->state
>   ALSA: pcm: Make mmap status read-only
>   ALSA: aloop: Replace runtime->status->state reference to
>     runtime->state
>   ALSA: firewire: Replace runtime->status->state reference to
>     runtime->state
>   ALSA: hda: Replace runtime->status->state reference to runtime->state
>   ALSA: asihpi: Replace runtime->status->state reference to
>     runtime->state
>   ALSA: usb-audio: Replace runtime->status->state reference to
>     runtime->state
>   ALSA: usx2y: Replace runtime->status->state reference to
>     runtime->state
>   ASoC: intel: Replace runtime->status->state reference to
>     runtime->state
>   ASoC: sh: Replace runtime->status->state reference to runtime->state
>   usb: gadget: Replace runtime->status->state reference to
>     runtime->state
> 
>  drivers/usb/gadget/function/u_uac1_legacy.c |   4 +-
>  include/sound/pcm.h                         |  20 ++-
>  sound/core/oss/pcm_oss.c                    |  42 +++----
>  sound/core/pcm.c                            |   9 +-
>  sound/core/pcm_compat.c                     |   4 +-
>  sound/core/pcm_lib.c                        |  16 +--
>  sound/core/pcm_native.c                     | 128 ++++++++++----------
>  sound/drivers/aloop.c                       |   4 +-
>  sound/firewire/bebob/bebob_pcm.c            |   4 +-
>  sound/firewire/dice/dice-pcm.c              |   4 +-
>  sound/firewire/digi00x/digi00x-pcm.c        |   4 +-
>  sound/firewire/fireface/ff-pcm.c            |   4 +-
>  sound/firewire/fireworks/fireworks_pcm.c    |   4 +-
>  sound/firewire/motu/motu-pcm.c              |   4 +-
>  sound/firewire/oxfw/oxfw-pcm.c              |   8 +-
>  sound/firewire/tascam/tascam-pcm.c          |   4 +-
>  sound/hda/hdmi_chmap.c                      |   2 +-
>  sound/pci/asihpi/asihpi.c                   |   2 +-
>  sound/soc/intel/skylake/skl-pcm.c           |   4 +-
>  sound/soc/sh/rz-ssi.c                       |   2 +-
>  sound/usb/pcm.c                             |   4 +-
>  sound/usb/usx2y/usbusx2yaudio.c             |   3 +-
>  sound/usb/usx2y/usx2yhwdeppcm.c             |   3 +-
>  23 files changed, 150 insertions(+), 133 deletions(-)
> 
> ===
> 
> Cc: Bard Liao <yung-chuan.liao@linux.intel.com>
> Cc: Cezary Rojewski <cezary.rojewski@intel.com>
> Cc: Felipe Balbi <balbi@kernel.org>
> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> Cc: Kai Vehmanen <kai.vehmanen@linux.intel.com>
> Cc: Liam Girdwood <liam.r.girdwood@linux.intel.com>
> Cc: Mark Brown <broonie@kernel.org>
> Cc: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
> Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
> Cc: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
> Cc: Takashi Sakamoto <o-takashi@sakamocchi.jp>
> 
> -- 
> 2.35.3

Regards

Takashi Sakamoto

  parent reply	other threads:[~2022-09-27  1:23 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-09-26 13:55 [PATCH 00/11] ALSA: PCM state reference optimization Takashi Iwai
2022-09-26 13:55 ` [PATCH 01/11] ALSA: pcm: Avoid reference to status->state Takashi Iwai
2022-09-26 13:55 ` [PATCH 02/11] ALSA: pcm: Make mmap status read-only Takashi Iwai
2022-09-26 13:55 ` [PATCH 03/11] ALSA: aloop: Replace runtime->status->state reference to runtime->state Takashi Iwai
2022-09-26 13:55 ` [PATCH 04/11] ALSA: firewire: " Takashi Iwai
2022-09-26 13:55 ` [PATCH 05/11] ALSA: hda: " Takashi Iwai
2022-09-26 13:55 ` [PATCH 06/11] ALSA: asihpi: " Takashi Iwai
2022-09-26 13:55 ` [PATCH 07/11] ALSA: usb-audio: " Takashi Iwai
2022-09-26 13:55 ` [PATCH 08/11] ALSA: usx2y: " Takashi Iwai
2022-09-26 13:55 ` [PATCH 09/11] ASoC: intel: " Takashi Iwai
2022-09-26 18:00   ` Mark Brown
2022-09-26 13:55 ` [PATCH 10/11] ASoC: sh: " Takashi Iwai
2022-09-26 18:01   ` Mark Brown
2022-09-26 13:55 ` [PATCH 11/11] usb: gadget: " Takashi Iwai
2022-09-26 14:05   ` Greg Kroah-Hartman
2022-09-26 15:56 ` [PATCH 00/11] ALSA: PCM state reference optimization Jaroslav Kysela
2022-09-26 16:05   ` Takashi Iwai
2022-09-27  1:22 ` Takashi Sakamoto [this message]
2022-09-27  6:26   ` Takashi Iwai
2022-09-27 14:25     ` Takashi Sakamoto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=YzJQP26l3k7yrTrs@workstation \
    --to=o-takashi@sakamocchi.jp \
    --cc=alsa-devel@alsa-project.org \
    --cc=balbi@kernel.org \
    --cc=broonie@kernel.org \
    --cc=cezary.rojewski@intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=kai.vehmanen@linux.intel.com \
    --cc=liam.r.girdwood@linux.intel.com \
    --cc=peter.ujfalusi@linux.intel.com \
    --cc=pierre-louis.bossart@linux.intel.com \
    --cc=ranjani.sridharan@linux.intel.com \
    --cc=tiwai@suse.de \
    --cc=yung-chuan.liao@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).