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,32 @@
 			'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 = array(
+			'width'       => false,
+			'height'      => false,
+			'flex_width'  => true,
+			'flex_height' => true,
+		);
+		$custom_logo_control_args = wp_parse_args( array_intersect_key( $custom_logo_args, $custom_logo_control_args ), $custom_logo_control_args );
+
+		// 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'] ) && ! $custom_logo_control_args['width'] && ! $custom_logo_control_args['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'] );
+		}
+
+		$custom_logo_control_args = wp_parse_args( $custom_logo_control_args, array(
+			'label'         => __( 'Logo' ),
+			'section'       => 'title_tagline',
+			'priority'      => 8,
 			'button_labels' => array(
 				'select'       => __( 'Select logo' ),
 				'change'       => __( 'Change logo' ),
@@ -1973,7 +1996,9 @@
 				'frame_title'  => __( 'Select logo' ),
 				'frame_button' => __( 'Choose logo' ),
 			),
-		) ) );
+		) );
+
+		$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' ),
