diff options
Diffstat (limited to 'test/msan/Linux/ioctl_sound.cc')
-rw-r--r-- | test/msan/Linux/ioctl_sound.cc | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/test/msan/Linux/ioctl_sound.cc b/test/msan/Linux/ioctl_sound.cc new file mode 100644 index 000000000000..fb36c52f2e7e --- /dev/null +++ b/test/msan/Linux/ioctl_sound.cc @@ -0,0 +1,29 @@ +// RUN: %clangxx_msan -O0 -g %s -o %t && %run %t +// RUN: %clangxx_msan -O3 -g %s -o %t && %run %t + +#include <assert.h> +#include <fcntl.h> +#include <sound/asound.h> +#include <stdio.h> +#include <stdlib.h> +#include <sys/ioctl.h> +#include <sys/socket.h> +#include <unistd.h> + +#include <sanitizer/msan_interface.h> + +int main(int argc, char **argv) { + int fd = open("/dev/snd/controlC0", O_RDONLY); + if (fd < 0) { + printf("Unable to open sound device."); + return 0; + } + const unsigned sz = sizeof(snd_ctl_card_info); + void *info = malloc(sz + 1); + assert(__msan_test_shadow(info, sz) == 0); + assert(ioctl(fd, SNDRV_CTL_IOCTL_CARD_INFO, info) >= 0); + assert(__msan_test_shadow(info, sz + 1) == sz); + close(fd); + free(info); + return 0; +} |