Skip to content

Commit

Permalink
ALSA: core: fix 64-bit SNDRV_PCM_IOCTL_STATUS ABI breakage
Browse files Browse the repository at this point in the history
Commit 4eeaaea (ALSA: core: add hooks for audio timestamps) added the
new audio_tstamp field to struct snd_pcm_status.  However, struct
timespec requires 64-bit alignment, so the 64-bit compiler would insert
32 bits of padding before this field, which broke SNDRV_PCM_IOCTL_STATUS
with error messages like this:

  kernel: unknown ioctl = 0x80984120

To solve this, insert the padding explicitly so that it can be taken
into account when calculating the ABI structure size.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
  • Loading branch information
Clemens Ladisch authored and Takashi Iwai committed Oct 28, 2012
1 parent 7dd7a2f commit 9c7066a
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 2 deletions.
3 changes: 2 additions & 1 deletion include/uapi/sound/asound.h
Original file line number Diff line number Diff line change
Expand Up @@ -407,8 +407,9 @@ struct snd_pcm_status {
snd_pcm_uframes_t avail_max; /* max frames available on hw since last status */
snd_pcm_uframes_t overrange; /* count of ADC (capture) overrange detections from last status */
snd_pcm_state_t suspended_state; /* suspended stream state */
__u32 reserved_alignment; /* must be filled with zero */
struct timespec audio_tstamp; /* from sample counter or wall clock */
unsigned char reserved[60-sizeof(struct timespec)]; /* must be filled with zero */
unsigned char reserved[56-sizeof(struct timespec)]; /* must be filled with zero */
};

struct snd_pcm_mmap_status {
Expand Down
3 changes: 2 additions & 1 deletion sound/core/pcm_compat.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,8 +190,9 @@ struct snd_pcm_status32 {
u32 avail_max;
u32 overrange;
s32 suspended_state;
u32 reserved_alignment;
struct compat_timespec audio_tstamp;
unsigned char reserved[60-sizeof(struct compat_timespec)];
unsigned char reserved[56-sizeof(struct compat_timespec)];
} __attribute__((packed));


Expand Down

0 comments on commit 9c7066a

Please sign in to comment.