diff --git a/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php b/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php
index d88894d..1a667fa 100644
--- a/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/Views/DisplayBlockTest.php
@@ -146,6 +146,16 @@ public function testViewsBlockForm() {
     $this->drupalGet('admin/structure/block/add/views_block:test_view_block-block_1/' . $default_theme);
     $elements = $this->xpath('//input[@name="label"]');
     $this->assertTrue(empty($elements), 'The label field is not found for Views blocks.');
+    // Test that that machine name field is hidden from display and has been
+    // saved as expected from the default value.
+    $this->assertNoFieldById('edit-machine-name', 'stark.views_block__test_view_block_1', 'The machine name is hidden on the views block form.');
+    // Save the block.
+    $this->drupalPost(NULL, array(), t('Save block'));
+    $storage = \Drupal::entityManager()->getStorageController('block');
+    $blocks = $storage->load(array('stark.views_block__test_view_block_block_1'));
+    // This will only return a result if our new block has been created with the
+    // expected machine name.
+    $this->assertTrue(!empty($blocks), 'The expected block was loaded.');
   }
 
   /**
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 61826f8..7061a52 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -1814,3 +1814,28 @@ function views_cache_get($cid, $use_language = FALSE) {
 
   return cache('views_info')->get($cid);
 }
+
+/**
+ * Implement hook_form_alter for the views block form.
+ *
+ * Views overrides block configuration form elements during ViewsBlock:form()
+ * but machine_name assignment is added later by BlockFormController:form()
+ * so we provide an override for the block machine_name here.
+ */
+function views_form_block_form_alter(&$form, &$form_state) {
+  // Ensure the block-form being altered is a Views block configuration form.
+  if ($form['settings']['module']['#value'] == 'views') {
+    // Unset the machine_name provided by BlockFormController
+    unset($form['machine_name']['#machine_name']['source']);
+    // Load the Views plugin object using form_state array and create a
+    // block machine_name based on the View ID and View Display ID.
+    $block_plugin = $form_state['build_info']['callback_object']->getEntity()->getPlugin();
+    list($plugin, $delta) = explode(':', $block_plugin->getPluginId());
+    list($view_id, $display_id) = explode('-', $delta, 2);
+    // Override the Views block's machine_name by providing a default_value.
+    $form['machine_name']['#default_value'] = 'views_block__' . $view_id . '_' . $display_id;
+    // Prevent users from changing the auto-generate block machine_name.
+    $form['machine_name']['#access'] = FALSE;
+  }
+}
+
