ALSA: Avoid using timespec for struct snd_timer_tread
authorBaolin Wang <baolin.wang@linaro.org>
Tue, 24 Apr 2018 12:06:13 +0000 (20:06 +0800)
committerArnd Bergmann <arnd@arndb.de>
Fri, 13 Dec 2019 10:25:57 +0000 (11:25 +0100)
commit07094ae6f9527279de6fd0c59e88f6d0423585b1
treef16c82589808423b029add3f3fb426247f416141
parentd9e5582c4bb219f3459e39f65410f0e5128fbe91
ALSA: Avoid using timespec for struct snd_timer_tread

The struct snd_timer_tread will use 'timespec' type variables to record
timestamp, which is not year 2038 safe on 32bits system.

Since the struct snd_timer_tread is passed through read() rather than
ioctl(), and the read syscall has no command number that lets us pick
between the 32-bit or 64-bit version of this structure.

Thus we introduced one new command SNDRV_TIMER_IOCTL_TREAD64 and new
struct snd_timer_tread64 replacing timespec with s64 type to handle
64bit time_t. That means we will set tu->tread = TREAD_FORMAT_64BIT
when user space has a 64bit time_t, then we will copy to user with
struct snd_timer_tread64. Otherwise we will use 32bit time_t variables
when copying to user.

Moreover this patch replaces timespec type with timespec64 type and
related y2038 safe APIs.

Signed-off-by: Baolin Wang <baolin.wang@linaro.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
include/uapi/sound/asound.h
sound/core/timer.c
sound/core/timer_compat.c