Merge the 2018-09-05 SPL branch from AOSP-Partner

* security-aosp-nyc-mr2-release:

Change-Id: I9541085ce5310f72cfbbd72352768e891055e877
diff --git a/Android.mk b/Android.mk
index 0c42e13..578baf4 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,73 +1,100 @@
 LOCAL_PATH:= $(call my-dir)
 
 include $(CLEAR_VARS)
+
+ifeq ($(TARGET_TINY_ALSA_IGNORE_SILENCE_SIZE),true)
+   LOCAL_CFLAGS += -DIGNORE_SILENCE_SIZE
+endif
+
 LOCAL_C_INCLUDES:= external/tinyalsa/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_SRC_FILES:= mixer.c pcm.c
 LOCAL_MODULE := libtinyalsa
 LOCAL_SHARED_LIBRARIES:= libcutils libutils
 LOCAL_MODULE_TAGS := optional
 LOCAL_CFLAGS += -Werror
 
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
 include $(BUILD_SHARED_LIBRARY)
 
 ifeq ($(HOST_OS), linux)
 include $(CLEAR_VARS)
 LOCAL_C_INCLUDES:= external/tinyalsa/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_SRC_FILES:= mixer.c pcm.c
 LOCAL_MODULE := libtinyalsa
 LOCAL_STATIC_LIBRARIES:= libcutils libutils
 LOCAL_CFLAGS += -Werror
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
 include $(BUILD_HOST_STATIC_LIBRARY)
 endif
 
 include $(CLEAR_VARS)
 LOCAL_C_INCLUDES:= external/tinyalsa/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_SRC_FILES:= tinyplay.c
 LOCAL_MODULE := tinyplay
 LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa
 LOCAL_MODULE_TAGS := optional
-LOCAL_CFLAGS += -Werror
+LOCAL_CFLAGS += -Werror -Wno-missing-field-initializers
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
 
 include $(BUILD_EXECUTABLE)
 
 ifeq ($(HOST_OS), linux)
 include $(CLEAR_VARS)
 LOCAL_C_INCLUDES:= external/tinyalsa/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_SRC_FILES:= tinyplay.c
 LOCAL_MODULE := tinyplay
 LOCAL_STATIC_LIBRARIES:= libcutils libutils libtinyalsa
 LOCAL_MODULE_TAGS := optional
-LOCAL_CFLAGS += -Werror
+LOCAL_CFLAGS += -Werror -Wno-missing-field-initializers
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
 
 include $(BUILD_HOST_EXECUTABLE)
 endif
 
 include $(CLEAR_VARS)
 LOCAL_C_INCLUDES:= external/tinyalsa/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_SRC_FILES:= tinycap.c
 LOCAL_MODULE := tinycap
 LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa
 LOCAL_MODULE_TAGS := optional
-LOCAL_CFLAGS += -Werror
+LOCAL_CFLAGS += -Werror -Wno-missing-field-initializers
+
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
 
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
 LOCAL_C_INCLUDES:= external/tinyalsa/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_SRC_FILES:= tinymix.c
 LOCAL_MODULE := tinymix
 LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa
 LOCAL_MODULE_TAGS := optional
 LOCAL_CFLAGS += -Werror
 
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
 include $(BUILD_EXECUTABLE)
 
 include $(CLEAR_VARS)
 LOCAL_C_INCLUDES:= external/tinyalsa/include
+LOCAL_C_INCLUDES += $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr/include
 LOCAL_SRC_FILES:= tinypcminfo.c
 LOCAL_MODULE := tinypcminfo
 LOCAL_SHARED_LIBRARIES:= libcutils libutils libtinyalsa
 LOCAL_MODULE_TAGS := optional
 LOCAL_CFLAGS += -Werror
 
+LOCAL_ADDITIONAL_DEPENDENCIES := $(TARGET_OUT_INTERMEDIATES)/KERNEL_OBJ/usr
+
 include $(BUILD_EXECUTABLE)
diff --git a/include/tinyalsa/asoundlib.h b/include/tinyalsa/asoundlib.h
index 97ee4f3..b789573 100644
--- a/include/tinyalsa/asoundlib.h
+++ b/include/tinyalsa/asoundlib.h
@@ -106,7 +106,9 @@
     unsigned int start_threshold;
     unsigned int stop_threshold;
     unsigned int silence_threshold;
+#ifndef IGNORE_SILENCE_SIZE
     unsigned int silence_size;
+#endif
 
     /* Minimum number of frames available before pcm_mmap_write() will actually
      * write into the kernel buffer. Only used if the stream is opened in mmap mode
diff --git a/mixer.c b/mixer.c
index c4e6765..a02c790 100644
--- a/mixer.c
+++ b/mixer.c
@@ -418,11 +418,18 @@
         ev.value.integer.value[id] = !!value;
         break;
 
-    case SNDRV_CTL_ELEM_TYPE_INTEGER:
+    case SNDRV_CTL_ELEM_TYPE_INTEGER: {
+        int min = mixer_ctl_get_range_min(ctl);
+        int max = mixer_ctl_get_range_max(ctl);
+        if (min < max && (value < min || value > max))
+            return -EINVAL;
         ev.value.integer.value[id] = value;
         break;
+    }
 
     case SNDRV_CTL_ELEM_TYPE_ENUMERATED:
+        if (value < 0 || (value >= 0 && (unsigned int)value >= mixer_ctl_get_num_enums(ctl)))
+            return -EINVAL;
         ev.value.enumerated.item[id] = value;
         break;
 
diff --git a/pcm.c b/pcm.c
index 78e1cea..612d068 100644
--- a/pcm.c
+++ b/pcm.c
@@ -959,7 +959,11 @@
 
     sparams.xfer_align = config->period_size / 2; /* needed for old kernels */
     sparams.silence_threshold = config->silence_threshold;
+#ifdef IGNORE_SILENCE_SIZE
+    sparams.silence_size = 0;
+#else
     sparams.silence_size = config->silence_size;
+#endif
     pcm->boundary = sparams.boundary = pcm->buffer_size;
 
     while (pcm->boundary * 2 <= INT_MAX - pcm->buffer_size)
diff --git a/tinycap.c b/tinycap.c
index 3e709b2..951f1e7 100644
--- a/tinycap.c
+++ b/tinycap.c
@@ -185,7 +185,7 @@
                             enum pcm_format format, unsigned int period_size,
                             unsigned int period_count)
 {
-    struct pcm_config config;
+    struct pcm_config config = {0};
     struct pcm *pcm;
     char *buffer;
     unsigned int size;
diff --git a/tinyplay.c b/tinyplay.c
index 88c54ae..7422554 100644
--- a/tinyplay.c
+++ b/tinyplay.c
@@ -212,7 +212,7 @@
                  unsigned int rate, unsigned int bits, unsigned int period_size,
                  unsigned int period_count)
 {
-    struct pcm_config config;
+    struct pcm_config config = {0};
     struct pcm *pcm;
     char *buffer;
     int size;