diff --git a/include/hardware/camera_common.h b/include/hardware/camera_common.h
index 5459b6c..5697bda 100644
--- a/include/hardware/camera_common.h
+++ b/include/hardware/camera_common.h
@@ -135,7 +135,9 @@
 
     /**
      * The camera's fixed characteristics, which include all camera metadata in
-     * the android.*.info.* sections.
+     * the android.*.info.* sections. This should be a sorted metadata buffer,
+     * and may not be modified or freed by the caller. The pointer should remain
+     * valid for the lifetime of the camera module.
      *
      * Version information (based on camera_module_t.common.module_api_version):
      *
@@ -150,7 +152,7 @@
      *    otherwise.
      *
      */
-    camera_metadata_t *static_camera_characteristics;
+    const camera_metadata_t *static_camera_characteristics;
 };
 
 typedef struct camera_module {
diff --git a/tests/camera2/camera2.cpp b/tests/camera2/camera2.cpp
index 05f61ef..29eef68 100644
--- a/tests/camera2/camera2.cpp
+++ b/tests/camera2/camera2.cpp
@@ -236,13 +236,13 @@
     }
 
     void getResolutionList(int32_t format,
-            int32_t **list,
+            const int32_t **list,
             size_t *count) {
         ALOGV("Getting resolutions for format %x", format);
         status_t res;
         if (format != CAMERA2_HAL_PIXEL_FORMAT_OPAQUE) {
-            camera_metadata_entry_t availableFormats;
-            res = find_camera_metadata_entry(mStaticInfo,
+            camera_metadata_ro_entry_t availableFormats;
+            res = find_camera_metadata_ro_entry(mStaticInfo,
                     ANDROID_SCALER_AVAILABLE_FORMATS,
                     &availableFormats);
             ASSERT_EQ(OK, res);
@@ -255,17 +255,17 @@
                 << "No support found for format 0x" << std::hex << format;
         }
 
-        camera_metadata_entry_t availableSizes;
+        camera_metadata_ro_entry_t availableSizes;
         if (format == HAL_PIXEL_FORMAT_RAW_SENSOR) {
-            res = find_camera_metadata_entry(mStaticInfo,
+            res = find_camera_metadata_ro_entry(mStaticInfo,
                     ANDROID_SCALER_AVAILABLE_RAW_SIZES,
                     &availableSizes);
         } else if (format == HAL_PIXEL_FORMAT_BLOB) {
-            res = find_camera_metadata_entry(mStaticInfo,
+            res = find_camera_metadata_ro_entry(mStaticInfo,
                     ANDROID_SCALER_AVAILABLE_JPEG_SIZES,
                     &availableSizes);
         } else {
-            res = find_camera_metadata_entry(mStaticInfo,
+            res = find_camera_metadata_ro_entry(mStaticInfo,
                     ANDROID_SCALER_AVAILABLE_PROCESSED_SIZES,
                     &availableSizes);
         }
@@ -293,7 +293,7 @@
     }
 
     camera2_device    *mDevice;
-    camera_metadata_t *mStaticInfo;
+    const camera_metadata_t *mStaticInfo;
 
     MetadataQueue    mRequests;
     MetadataQueue    mFrames;
@@ -342,7 +342,7 @@
         sp<FrameWaiter> rawWaiter = new FrameWaiter();
         rawConsumer->setFrameAvailableListener(rawWaiter);
 
-        int32_t *rawResolutions;
+        const int32_t *rawResolutions;
         size_t   rawResolutionsCount;
 
         int format = HAL_PIXEL_FORMAT_RAW_SENSOR;
@@ -456,7 +456,7 @@
         sp<FrameWaiter> rawWaiter = new FrameWaiter();
         rawConsumer->setFrameAvailableListener(rawWaiter);
 
-        int32_t *rawResolutions;
+        const int32_t *rawResolutions;
         size_t    rawResolutionsCount;
 
         int format = HAL_PIXEL_FORMAT_RAW_SENSOR;
@@ -618,7 +618,7 @@
         sp<FrameWaiter> jpegWaiter = new FrameWaiter();
         jpegConsumer->setFrameAvailableListener(jpegWaiter);
 
-        int32_t *jpegResolutions;
+        const int32_t *jpegResolutions;
         size_t   jpegResolutionsCount;
 
         int format = HAL_PIXEL_FORMAT_BLOB;
