Index: src/wp-includes/class-wp-customize-manager.php
===================================================================
--- src/wp-includes/class-wp-customize-manager.php	(revision 37069)
+++ src/wp-includes/class-wp-customize-manager.php	(working copy)
@@ -1830,6 +1830,8 @@
 	 * Register some default controls.
 	 *
 	 * @since 3.4.0
+	 *
+	 * @global array $_wp_additional_image_sizes
 	 */
 	public function register_controls() {
 
@@ -1959,11 +1961,13 @@
 			'transport'      => 'postMessage',
 		) );
 
-		$this->add_control( new WP_Customize_Media_Control( $this, 'custom_logo', array(
-			'label'    => __( 'Logo' ),
-			'section'  => 'title_tagline',
-			'priority' => 8,
-			'mime_type' => 'image',
+		// Get custom logo settings and extend defaults with it.
+		$custom_logo_args         = get_theme_support( 'custom-logo' );
+		$custom_logo_args         = (array) $custom_logo_args[0];
+		$custom_logo_control_args = wp_parse_args( $custom_logo_args, array(
+			'label'         => __( 'Logo' ),
+			'section'       => 'title_tagline',
+			'priority'      => 8,
 			'button_labels' => array(
 				'select'       => __( 'Select logo' ),
 				'change'       => __( 'Change logo' ),
@@ -1973,7 +1977,33 @@
 				'frame_title'  => __( 'Select logo' ),
 				'frame_button' => __( 'Choose logo' ),
 			),
-		) ) );
+		) );
+
+		// If no width/height were defined but there is a custom image size, use that.
+		if (
+			! empty( $custom_logo_args['size'] ) &&
+			has_image_size( $custom_logo_args['size'] ) &&
+			! isset( $custom_logo_control_args['width'] ) &&
+			! isset( $custom_logo_control_args['height'] ) &&
+			! isset( $custom_logo_control_args['flex_width'] ) &&
+			! isset( $custom_logo_control_args['flex_height'] )
+		) {
+			global $_wp_additional_image_sizes;
+			$custom_logo_size = $custom_logo_args['size'];
+
+			$custom_logo_control_args['width']       = $_wp_additional_image_sizes[ $custom_logo_size ]['width'];
+			$custom_logo_control_args['height']      = $_wp_additional_image_sizes[ $custom_logo_size ]['height'];
+			$custom_logo_control_args['flex_width']  = empty( $_wp_additional_image_sizes[ $custom_logo_size ]['crop'] );
+			$custom_logo_control_args['flex_height'] = empty( $_wp_additional_image_sizes[ $custom_logo_size ]['crop'] );
+
+		// Otherwise fall back to these defaults.
+		} else {
+			$custom_logo_control_args['width']       = false;
+			$custom_logo_control_args['height']      = false;
+			$custom_logo_control_args['flex_width']  = true;
+			$custom_logo_control_args['flex_height'] = true;
+		}
+		$this->add_control( new WP_Customize_Cropped_Image_Control( $this, 'custom_logo', $custom_logo_control_args ) );
 
 		$this->selective_refresh->add_partial( 'custom_logo', array(
 			'settings'            => array( 'custom_logo' ),
