diff --git a/core/modules/action/action.module b/core/modules/action/action.module
index ee2f628..fcf997e 100644
--- a/core/modules/action/action.module
+++ b/core/modules/action/action.module
@@ -34,9 +34,9 @@ function action_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function action_permission() {
+function action_permission_info() {
   return array(
     'administer actions' => array(
       'title' => t('Administer actions'),
diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index 78a8e17..01bf93f 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -113,9 +113,9 @@ function aggregator_menu_link_defaults() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function aggregator_permission() {
+function aggregator_permission_info() {
   return array(
     'administer news feeds' => array(
       'title' => t('Administer news feeds'),
diff --git a/core/modules/ban/ban.module b/core/modules/ban/ban.module
index e45ed13..58bc839 100644
--- a/core/modules/ban/ban.module
+++ b/core/modules/ban/ban.module
@@ -27,9 +27,9 @@ function ban_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function ban_permission() {
+function ban_permission_info() {
   return array(
     'ban IP addresses' => array(
       'title' => t('Ban IP addresses'),
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index e97852c..ed25591 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -82,9 +82,9 @@ function block_theme() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function block_permission() {
+function block_permission_info() {
   return array(
     'administer blocks' => array(
       'title' => t('Administer blocks'),
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index 317a885..d08cc20 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -73,9 +73,9 @@ function book_theme() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function book_permission() {
+function book_permission_info() {
   return array(
     'administer book outlines' => array(
       'title' => t('Administer book outlines'),
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 4d9cc75..7fbffc5 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -286,9 +286,9 @@ function comment_field_instance_config_delete(FieldInstanceConfigInterface $inst
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function comment_permission() {
+function comment_permission_info() {
   return array(
     'administer comments' => array(
       'title' => t('Administer comments and comment settings'),
diff --git a/core/modules/config/config.module b/core/modules/config/config.module
index 776a9fc..7299057 100644
--- a/core/modules/config/config.module
+++ b/core/modules/config/config.module
@@ -26,9 +26,9 @@ function config_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function config_permission() {
+function config_permission_info() {
   $permissions['synchronize configuration'] = array(
     'title' => t('Synchronize configuration'),
     'restrict access' => TRUE,
diff --git a/core/modules/config_translation/config_translation.module b/core/modules/config_translation/config_translation.module
index 2204689..a34cb33 100644
--- a/core/modules/config_translation/config_translation.module
+++ b/core/modules/config_translation/config_translation.module
@@ -47,9 +47,9 @@ function config_translation_menu_link_defaults() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function config_translation_permission() {
+function config_translation_permission_info() {
   return array(
     'translate configuration' => array(
       'title' => t('Translate user edited configuration'),
diff --git a/core/modules/contact/contact.module b/core/modules/contact/contact.module
index dc622ff..449b0ed 100644
--- a/core/modules/contact/contact.module
+++ b/core/modules/contact/contact.module
@@ -35,9 +35,9 @@ function contact_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function contact_permission() {
+function contact_permission_info() {
   return array(
     'administer contact forms' => array(
       'title' => t('Administer contact forms and contact form settings'),
diff --git a/core/modules/content_translation/content_translation.module b/core/modules/content_translation/content_translation.module
index b6f8f5e..bce7765 100644
--- a/core/modules/content_translation/content_translation.module
+++ b/core/modules/content_translation/content_translation.module
@@ -499,9 +499,9 @@ function content_translation_access(EntityInterface $entity, $op) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function content_translation_permission() {
+function content_translation_permission_info() {
   $permission = array(
     'administer content translation' => array(
       'title' => t('Administer translation settings'),
diff --git a/core/modules/contextual/contextual.module b/core/modules/contextual/contextual.module
index 3513f56..70cb664 100644
--- a/core/modules/contextual/contextual.module
+++ b/core/modules/contextual/contextual.module
@@ -78,9 +78,9 @@ function contextual_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function contextual_permission() {
+function contextual_permission_info() {
   return array(
     'access contextual links' => array(
       'title' => t('Use contextual links'),
diff --git a/core/modules/edit/edit.module b/core/modules/edit/edit.module
index 6394f52..6d4df54 100644
--- a/core/modules/edit/edit.module
+++ b/core/modules/edit/edit.module
@@ -15,9 +15,9 @@
 use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function edit_permission() {
+function edit_permission_info() {
   return array(
     'access in-place editing' => array(
       'title' => t('Access in-place editing'),
diff --git a/core/modules/entity/entity.module b/core/modules/entity/entity.module
index de5b1b9..74b9f7c 100644
--- a/core/modules/entity/entity.module
+++ b/core/modules/entity/entity.module
@@ -34,9 +34,9 @@ function entity_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function entity_permission() {
+function entity_permission_info() {
   return array(
     'administer display modes' => array(
       'title' => t('Add, edit, and delete custom display modes.'),
diff --git a/core/modules/field/tests/modules/field_test/field_test.module b/core/modules/field/tests/modules/field_test/field_test.module
index 5ece040..c832f7d 100644
--- a/core/modules/field/tests/modules/field_test/field_test.module
+++ b/core/modules/field/tests/modules/field_test/field_test.module
@@ -20,9 +20,9 @@
 require_once __DIR__ . '/field_test.field.inc';
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function field_test_permission() {
+function field_test_permission_info() {
   $perms = array(
     'view test_view_field content' => array(
       'title' => t('View test field content'),
diff --git a/core/modules/field_ui/field_ui.module b/core/modules/field_ui/field_ui.module
index 4279bb3..0a4b708 100644
--- a/core/modules/field_ui/field_ui.module
+++ b/core/modules/field_ui/field_ui.module
@@ -67,9 +67,9 @@ function field_ui_menu_link_defaults() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function field_ui_permission() {
+function field_ui_permission_info() {
   $permissions = array();
 
   foreach (\Drupal::entityManager()->getDefinitions() as $entity_type_id => $entity_type) {
diff --git a/core/modules/file/file.module b/core/modules/file/file.module
index ed7592f..05d8804 100644
--- a/core/modules/file/file.module
+++ b/core/modules/file/file.module
@@ -1935,9 +1935,9 @@ function file_get_file_references(File $file, $field = NULL, $age = EntityStorag
  */
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function file_permission() {
+function file_permission_info() {
   $perms = array(
     'access files overview' => array(
       'title' => t('Access the Files overview page'),
diff --git a/core/modules/filter/filter.module b/core/modules/filter/filter.module
index 2b09ea7..c1e42cc 100644
--- a/core/modules/filter/filter.module
+++ b/core/modules/filter/filter.module
@@ -115,9 +115,9 @@ function filter_menu_link_defaults() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function filter_permission() {
+function filter_permission_info() {
   $perms['administer filters'] = array(
     'title' => t('Administer text formats and filters'),
     'description' => t('Define how text is handled by combining filters into <a href="@url">text formats</a>.', array(
diff --git a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
index 09e098f..5b06f28 100644
--- a/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
+++ b/core/modules/filter/lib/Drupal/filter/Entity/FilterFormat.php
@@ -251,7 +251,7 @@ public function postSave(EntityStorageControllerInterface $storage_controller, $
       // apply the defined user role permissions when a new format is inserted
       // and has a non-empty $roles property.
       // Note: user_role_change_permissions() triggers a call chain back into
-      // filter_permission() and lastly filter_formats(), so its cache must be
+      // filter_permission_info() and lastly filter_formats(), so its cache must be
       // reset upfront.
       if (($roles = $this->get('roles')) && $permission = $this->getPermissionName()) {
         foreach (user_roles() as $rid => $name) {
diff --git a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
index 9d8f3ca..d71b69e 100644
--- a/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
+++ b/core/modules/filter/lib/Drupal/filter/Tests/FilterDefaultConfigTest.php
@@ -27,7 +27,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    // filter_permission() calls into url() to output a link in the description.
+    // filter_permission_info() calls into url() to output a link in the description.
     $this->installSchema('system', 'url_alias');
 
     $this->installSchema('user', array('users_roles'));
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 1a55bfe..8a5a382 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -416,9 +416,9 @@ function forum_node_load($nodes) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function forum_permission() {
+function forum_permission_info() {
   $perms = array(
     'administer forums' => array(
       'title' => t('Administer forums'),
diff --git a/core/modules/image/image.module b/core/modules/image/image.module
index c1420c1..0184924 100644
--- a/core/modules/image/image.module
+++ b/core/modules/image/image.module
@@ -170,9 +170,9 @@ function image_theme() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function image_permission() {
+function image_permission_info() {
   return array(
     'administer image styles' => array(
       'title' => t('Administer image styles'),
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index f196969..170fbb6 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -102,9 +102,9 @@ function language_access_language_edit_or_delete($language) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function language_permission() {
+function language_permission_info() {
   return array(
     'administer languages' => array(
       'title' => t('Administer languages'),
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index 7c3f570..e4ab266 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -191,9 +191,9 @@ function locale_menu_link_defaults() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function locale_permission() {
+function locale_permission_info() {
   return array(
     'translate interface' => array(
       'title' => t('Translate interface texts'),
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index 8eb1d34..8989383 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -52,9 +52,9 @@ function menu_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function menu_permission() {
+function menu_permission_info() {
   return array(
     'administer menu' => array(
       'title' => t('Administer menus and menu items'),
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 74dc548..2775abf 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -733,9 +733,9 @@ function theme_field__node__title($variables) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function node_permission() {
+function node_permission_info() {
   $perms = array(
     'bypass node access' => array(
       'title' => t('Bypass content access control'),
diff --git a/core/modules/node/tests/modules/node_access_test/node_access_test.module b/core/modules/node/tests/modules/node_access_test/node_access_test.module
index 9913431..59ba773 100644
--- a/core/modules/node/tests/modules/node_access_test/node_access_test.module
+++ b/core/modules/node/tests/modules/node_access_test/node_access_test.module
@@ -70,11 +70,11 @@ function node_access_test_node_access_records(NodeInterface $node) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  *
  * Sets up permissions for this module.
  */
-function node_access_test_permission() {
+function node_access_test_permission_info() {
   return array('node test view' => array('title' => 'View content'));
 }
 
diff --git a/core/modules/path/path.module b/core/modules/path/path.module
index 20d9fae..66ae490 100644
--- a/core/modules/path/path.module
+++ b/core/modules/path/path.module
@@ -41,9 +41,9 @@ function path_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function path_permission() {
+function path_permission_info() {
   return array(
     'administer url aliases' => array(
       'title' => t('Administer URL aliases'),
diff --git a/core/modules/picture/picture.module b/core/modules/picture/picture.module
index f7aecac..e17589a 100644
--- a/core/modules/picture/picture.module
+++ b/core/modules/picture/picture.module
@@ -34,9 +34,9 @@ function picture_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function picture_permission() {
+function picture_permission_info() {
   return array(
     'administer pictures' => array(
       'title' => t('Administer Pictures'),
diff --git a/core/modules/rest/lib/Drupal/rest/Plugin/ResourceInterface.php b/core/modules/rest/lib/Drupal/rest/Plugin/ResourceInterface.php
index 3f21f0d..a6653c0 100644
--- a/core/modules/rest/lib/Drupal/rest/Plugin/ResourceInterface.php
+++ b/core/modules/rest/lib/Drupal/rest/Plugin/ResourceInterface.php
@@ -26,7 +26,7 @@
   public function routes();
 
   /**
-   * Provides an array of permissions suitable for hook_permission().
+   * Provides an array of permissions suitable for hook_permission_info().
    *
    * A resource plugin can define a set of user permissions that are used on the
    * routes for this resource or for other purposes.
diff --git a/core/modules/rest/rest.module b/core/modules/rest/rest.module
index 086961a..2d6556c 100644
--- a/core/modules/rest/rest.module
+++ b/core/modules/rest/rest.module
@@ -6,9 +6,9 @@
  */
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function rest_permission() {
+function rest_permission_info() {
   $permissions = array();
   $manager = \Drupal::service('plugin.manager.rest');
   $resources = \Drupal::config('rest.settings')->get('resources');
diff --git a/core/modules/search/search.module b/core/modules/search/search.module
index e60d020..1ab4e88 100644
--- a/core/modules/search/search.module
+++ b/core/modules/search/search.module
@@ -112,9 +112,9 @@ function search_theme() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function search_permission() {
+function search_permission_info() {
   return array(
     'administer search' => array(
       'title' => t('Administer search'),
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index a97b447..9b5403f 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -43,9 +43,9 @@ function shortcut_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function shortcut_permission() {
+function shortcut_permission_info() {
   return array(
     'administer shortcuts' => array(
       'title' => t('Administer shortcuts'),
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
index 2acf138..850aaff 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/Tests/DrupalUnitTestBaseTest.php
@@ -37,10 +37,10 @@ function testSetUp() {
     $table = 'entity_test';
 
     // Verify that specified $modules have been loaded.
-    $this->assertTrue(function_exists('entity_test_permission'), 'entity_test.module was loaded.');
+    $this->assertTrue(function_exists('entity_test_permission_info'), 'entity_test.module was loaded.');
     // Verify that there is a fixed module list.
     $this->assertIdentical(array_keys(\Drupal::moduleHandler()->getModuleList()), $modules);
-    $this->assertIdentical(\Drupal::moduleHandler()->getImplementations('permission'), $modules);
+    $this->assertIdentical(\Drupal::moduleHandler()->getImplementations('permission_info'), $modules);
 
     // Verify that no modules have been installed.
     $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
@@ -56,8 +56,8 @@ function testEnableModulesLoad() {
     $this->assertFalse(\Drupal::moduleHandler()->moduleExists($module), "$module module not found.");
     $list = array_keys(\Drupal::moduleHandler()->getModuleList());
     $this->assertFalse(in_array($module, $list), "$module module not found in the extension handler's module list.");
-    $list = \Drupal::moduleHandler()->getImplementations('permission');
-    $this->assertFalse(in_array($module, $list), "{$module}_permission() in \Drupal::moduleHandler()->getImplementations() not found.");
+    $list = \Drupal::moduleHandler()->getImplementations('permission_info');
+    $this->assertFalse(in_array($module, $list), "{$module}_permission_info() in \Drupal::moduleHandler()->getImplementations() not found.");
 
     // Enable the module.
     $this->enableModules(array($module));
@@ -66,8 +66,8 @@ function testEnableModulesLoad() {
     $this->assertTrue(\Drupal::moduleHandler()->moduleExists($module), "$module module found.");
     $list = array_keys(\Drupal::moduleHandler()->getModuleList());
     $this->assertTrue(in_array($module, $list), "$module module found in the extension handler's module list.");
-    $list = \Drupal::moduleHandler()->getImplementations('permission');
-    $this->assertTrue(in_array($module, $list), "{$module}_permission() in \Drupal::moduleHandler()->getImplementations() found.");
+    $list = \Drupal::moduleHandler()->getImplementations('permission_info');
+    $this->assertTrue(in_array($module, $list), "{$module}_permission_info() in \Drupal::moduleHandler()->getImplementations() found.");
   }
 
   /**
@@ -81,8 +81,8 @@ function testEnableModulesInstall() {
     $this->assertFalse(\Drupal::moduleHandler()->moduleExists($module), "$module module not found.");
     $list = array_keys(\Drupal::moduleHandler()->getModuleList());
     $this->assertFalse(in_array($module, $list), "$module module not found in the extension handler's module list.");
-    $list = \Drupal::moduleHandler()->getImplementations('permission');
-    $this->assertFalse(in_array($module, $list), "{$module}_permission() in \Drupal::moduleHandler()->getImplementations() not found.");
+    $list = \Drupal::moduleHandler()->getImplementations('permission_info');
+    $this->assertFalse(in_array($module, $list), "{$module}_permission_info() in \Drupal::moduleHandler()->getImplementations() not found.");
 
     $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
     $schema = drupal_get_schema($table, TRUE);
@@ -95,8 +95,8 @@ function testEnableModulesInstall() {
     $this->assertTrue(\Drupal::moduleHandler()->moduleExists($module), "$module module found.");
     $list = array_keys(\Drupal::moduleHandler()->getModuleList());
     $this->assertTrue(in_array($module, $list), "$module module found in the extension handler's module list.");
-    $list = \Drupal::moduleHandler()->getImplementations('permission');
-    $this->assertTrue(in_array($module, $list), "{$module}_permission() in \Drupal::moduleHandler()->getImplementations() found.");
+    $list = \Drupal::moduleHandler()->getImplementations('permission_info');
+    $this->assertTrue(in_array($module, $list), "{$module}_permission_info() in \Drupal::moduleHandler()->getImplementations() found.");
 
     $this->assertTrue(db_table_exists($table), "'$table' database table found.");
     $schema = drupal_get_schema($table);
diff --git a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
index 69b8454..284cab2 100644
--- a/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
+++ b/core/modules/simpletest/lib/Drupal/simpletest/WebTestBase.php
@@ -622,7 +622,7 @@ protected function checkPermissions(array $permissions, $reset = FALSE) {
     $available = &drupal_static(__FUNCTION__);
 
     if (!isset($available) || $reset) {
-      $available = array_keys(\Drupal::moduleHandler()->invokeAll('permission'));
+      $available = array_keys(\Drupal::moduleHandler()->invokeAll('permission_info'));
     }
 
     $valid = TRUE;
diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module
index 8da7e4c..55d7042 100644
--- a/core/modules/simpletest/simpletest.module
+++ b/core/modules/simpletest/simpletest.module
@@ -50,9 +50,9 @@ function simpletest_menu_link_defaults() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function simpletest_permission() {
+function simpletest_permission_info() {
   return array(
     'administer unit tests' => array(
       'title' => t('Administer tests'),
diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module
index 9e780db..7d17bf4 100644
--- a/core/modules/statistics/statistics.module
+++ b/core/modules/statistics/statistics.module
@@ -32,9 +32,9 @@ function statistics_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function statistics_permission() {
+function statistics_permission_info() {
   return array(
     'administer statistics' => array(
       'title' => t('Administer statistics'),
diff --git a/core/modules/system/lib/Drupal/system/Form/ModulesListForm.php b/core/modules/system/lib/Drupal/system/Form/ModulesListForm.php
index 15d5eaf..5a53a8f 100644
--- a/core/modules/system/lib/Drupal/system/Form/ModulesListForm.php
+++ b/core/modules/system/lib/Drupal/system/Form/ModulesListForm.php
@@ -212,7 +212,7 @@ protected function buildRow(array $modules, $module, $distribution) {
 
     // Generate link for module's permission, if the user has access to it.
     $row['links']['permissions'] = array();
-    if ($module->status && user_access('administer permissions') && in_array($module->name, $this->moduleHandler->getImplementations('permission'))) {
+    if ($module->status && user_access('administer permissions') && in_array($module->name, $this->moduleHandler->getImplementations('permission_info'))) {
       $row['links']['permissions'] = array(
         '#type' => 'link',
         '#title' => $this->t('Permissions'),
diff --git a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
index d7e51c4..ed81c36 100644
--- a/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/Menu/BreadcrumbTest.php
@@ -37,7 +37,7 @@ public static function getInfo() {
   function setUp() {
     parent::setUp();
 
-    $perms = array_keys(\Drupal::moduleHandler()->invokeAll('permission'));
+    $perms = array_keys(\Drupal::moduleHandler()->invokeAll('permission_info'));
     $this->admin_user = $this->drupalCreateUser($perms);
     $this->drupalLogin($this->admin_user);
 
diff --git a/core/modules/system/lib/Drupal/system/Tests/System/AdminTest.php b/core/modules/system/lib/Drupal/system/Tests/System/AdminTest.php
index 44cccb2..d2b1545 100644
--- a/core/modules/system/lib/Drupal/system/Tests/System/AdminTest.php
+++ b/core/modules/system/lib/Drupal/system/Tests/System/AdminTest.php
@@ -36,7 +36,7 @@ function setUp() {
     // Create an administrator with all permissions, as well as a regular user
     // who can only access administration pages and perform some Locale module
     // administrative tasks, but not all of them.
-    $this->admin_user = $this->drupalCreateUser(array_keys(\Drupal::moduleHandler()->invokeAll('permission')));
+    $this->admin_user = $this->drupalCreateUser(array_keys(\Drupal::moduleHandler()->invokeAll('permission_info')));
     $this->web_user = $this->drupalCreateUser(array(
       'access administration pages',
       'translate interface',
diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index d36f5f3..1c34ca0 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -1048,7 +1048,7 @@ function hook_system_info_alter(&$info, $file, $type) {
  *
  * @see theme_user_permission_description()
  */
-function hook_permission() {
+function hook_permission_info() {
   return array(
     'administer my module' =>  array(
       'title' => t('Administer my module'),
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 67b25fe..a3a524d 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -215,9 +215,9 @@ function system_theme() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function system_permission() {
+function system_permission_info() {
   return array(
     'administer modules' => array(
       'title' => t('Administer modules'),
@@ -1702,7 +1702,7 @@ function system_get_module_admin_tasks($module, $info) {
   }
 
   // Append link for permissions.
-  if (\Drupal::moduleHandler()->implementsHook($module, 'permission')) {
+  if (\Drupal::moduleHandler()->implementsHook($module, 'permission_info')) {
     /** @var \Drupal\Core\Access\AccessManager $access_manager */
     $access_manager = \Drupal::service('access_manager');
     /** @var \Drupal\menu_link\MenuLinkStorageControllerInterface $menu_link_storage_controller */
diff --git a/core/modules/system/tests/modules/entity_test/entity_test.module b/core/modules/system/tests/modules/entity_test/entity_test.module
index bfc73b5..b123c61 100644
--- a/core/modules/system/tests/modules/entity_test/entity_test.module
+++ b/core/modules/system/tests/modules/entity_test/entity_test.module
@@ -222,9 +222,9 @@ function entity_test_field_extra_fields() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function entity_test_permission() {
+function entity_test_permission_info() {
   $permissions = array(
     'administer entity_test content' => array(
       'title' => t('Administer entity_test content'),
diff --git a/core/modules/system/tests/modules/form_test/form_test.module b/core/modules/system/tests/modules/form_test/form_test.module
index de5c2f0..69e9883 100644
--- a/core/modules/system/tests/modules/form_test/form_test.module
+++ b/core/modules/system/tests/modules/form_test/form_test.module
@@ -16,9 +16,9 @@
 use Symfony\Component\HttpFoundation\JsonResponse;
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function form_test_permission() {
+function form_test_permission_info() {
   $perms = array(
     'access vertical_tab_test tabs' => array(
       'title' => t('Access vertical_tab_test tabs'),
diff --git a/core/modules/system/tests/modules/module_test/module_test.module b/core/modules/system/tests/modules/module_test/module_test.module
index b1372c0..15df9a5 100644
--- a/core/modules/system/tests/modules/module_test/module_test.module
+++ b/core/modules/system/tests/modules/module_test/module_test.module
@@ -1,9 +1,9 @@
 <?php
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function module_test_permission() {
+function module_test_permission_info() {
   return array(
     'module_test perm' => t('example perm for module_test module'),
   );
diff --git a/core/modules/system/tests/modules/router_test_directory/router_test.module b/core/modules/system/tests/modules/router_test_directory/router_test.module
index ffbe070..c711605 100644
--- a/core/modules/system/tests/modules/router_test_directory/router_test.module
+++ b/core/modules/system/tests/modules/router_test_directory/router_test.module
@@ -1,9 +1,9 @@
 <?php
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function router_test_permission() {
+function router_test_permission_info() {
   return array(
     'access test7' =>  array(
       'title' => t('Access test7 route'),
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index d9147c0..9ec39d7 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -86,9 +86,9 @@ function taxonomy_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function taxonomy_permission() {
+function taxonomy_permission_info() {
   $permissions = array(
     'administer taxonomy' => array(
       'title' => t('Administer vocabularies and terms'),
diff --git a/core/modules/toolbar/toolbar.module b/core/modules/toolbar/toolbar.module
index 7217986..e613463 100644
--- a/core/modules/toolbar/toolbar.module
+++ b/core/modules/toolbar/toolbar.module
@@ -32,9 +32,9 @@ function toolbar_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function toolbar_permission() {
+function toolbar_permission_info() {
   return array(
     'access toolbar' => array(
       'title' => t('Use the administration toolbar'),
diff --git a/core/modules/tour/tour.module b/core/modules/tour/tour.module
index d23c6e2..4d3316d 100644
--- a/core/modules/tour/tour.module
+++ b/core/modules/tour/tour.module
@@ -28,9 +28,9 @@ function tour_help($path, $arg) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function tour_permission() {
+function tour_permission_info() {
   return array(
     'access tour' => array(
       'title' => t('Access tour'),
diff --git a/core/modules/user/lib/Drupal/user/Access/PermissionAccessCheck.php b/core/modules/user/lib/Drupal/user/Access/PermissionAccessCheck.php
index a159b1c..063e78c 100644
--- a/core/modules/user/lib/Drupal/user/Access/PermissionAccessCheck.php
+++ b/core/modules/user/lib/Drupal/user/Access/PermissionAccessCheck.php
@@ -13,7 +13,7 @@
 use Symfony\Component\HttpFoundation\Request;
 
 /**
- * Determines access to routes based on permissions defined via hook_permission().
+ * Determines access to routes based on permissions defined via hook_permission_info().
  */
 class PermissionAccessCheck implements AccessInterface {
 
diff --git a/core/modules/user/lib/Drupal/user/Form/UserPermissionsForm.php b/core/modules/user/lib/Drupal/user/Form/UserPermissionsForm.php
index 82d3829..c33e2fa 100644
--- a/core/modules/user/lib/Drupal/user/Form/UserPermissionsForm.php
+++ b/core/modules/user/lib/Drupal/user/Form/UserPermissionsForm.php
@@ -96,10 +96,10 @@ public function buildForm(array $form, array &$form_state) {
     $module_info = system_rebuild_module_data();
     $hide_descriptions = system_admin_compact_mode();
 
-    // Get a list of all the modules implementing a hook_permission() and sort by
+    // Get a list of all the modules implementing a hook_permission_info() and sort by
     // display name.
     $modules = array();
-    foreach ($this->moduleHandler->getImplementations('permission') as $module) {
+    foreach ($this->moduleHandler->getImplementations('permission_info') as $module) {
       $modules[$module] = $module_info[$module]->info['name'];
     }
     asort($modules);
@@ -122,7 +122,7 @@ public function buildForm(array $form, array &$form_state) {
     }
 
     foreach ($modules as $module => $display_name) {
-      if ($permissions = $this->moduleHandler->invoke($module, 'permission')) {
+      if ($permissions = $this->moduleHandler->invoke($module, 'permission_info')) {
         // Module name.
         $form['permissions'][$module] = array(array(
           '#wrapper_attributes' => array(
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/access/Permission.php b/core/modules/user/lib/Drupal/user/Plugin/views/access/Permission.php
index 7797913..2f6eff5 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/access/Permission.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/access/Permission.php
@@ -44,7 +44,7 @@ public function alterRouteDefinition(Route $route) {
   }
 
   public function summaryTitle() {
-    $permissions = \Drupal::moduleHandler()->invokeAll('permission');
+    $permissions = \Drupal::moduleHandler()->invokeAll('permission_info');
     if (isset($permissions[$this->options['perm']])) {
       return $permissions[$this->options['perm']]['title'];
     }
@@ -66,8 +66,8 @@ public function buildOptionsForm(&$form, &$form_state) {
     $module_info = system_get_info('module');
 
     // Get list of permissions
-    foreach (\Drupal::moduleHandler()->getImplementations('permission') as $module) {
-      $permissions = \Drupal::moduleHandler()->invoke($module, 'permission');
+    foreach (\Drupal::moduleHandler()->getImplementations('permission_info') as $module) {
+      $permissions = \Drupal::moduleHandler()->invoke($module, 'permission_info');
       foreach ($permissions as $name => $perm) {
         $perms[$module_info[$module]['name']][$name] = strip_tags($perm['title']);
       }
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php b/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php
index dc55c92..0029ee3 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/field/Permissions.php
@@ -83,7 +83,7 @@ public function preRender(&$values) {
     $uids = array();
     $this->items = array();
 
-    $permission_names = \Drupal::moduleHandler()->invokeAll('permission');
+    $permission_names = \Drupal::moduleHandler()->invokeAll('permission_info');
 
     $rids = array();
     foreach ($values as $result) {
diff --git a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php
index 7a8d340..37af167 100644
--- a/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php
+++ b/core/modules/user/lib/Drupal/user/Plugin/views/filter/Permissions.php
@@ -57,17 +57,17 @@ public function getValueOptions() {
     if (!isset($this->value_options)) {
       $module_info = system_get_info('module');
 
-      // Get a list of all the modules implementing a hook_permission() and sort by
+      // Get a list of all the modules implementing a hook_permission_info() and sort by
       // display name.
       $modules = array();
-      foreach ($this->moduleHandler->getImplementations('permission') as $module) {
+      foreach ($this->moduleHandler->getImplementations('permission_info') as $module) {
         $modules[$module] = $module_info[$module]['name'];
       }
       asort($modules);
 
       $this->value_options = array();
       foreach ($modules as $module => $display_name) {
-        if ($permissions = $this->moduleHandler->invoke($module, 'permission')) {
+        if ($permissions = $this->moduleHandler->invoke($module, 'permission_info')) {
           foreach ($permissions as $perm => $perm_item) {
             $this->value_options[$display_name][$perm] = String::checkPlain(strip_tags($perm_item['title']));
           }
diff --git a/core/modules/user/lib/Drupal/user/Tests/Views/HandlerFilterPermissionTest.php b/core/modules/user/lib/Drupal/user/Tests/Views/HandlerFilterPermissionTest.php
index ed67b16..ece5007 100644
--- a/core/modules/user/lib/Drupal/user/Tests/Views/HandlerFilterPermissionTest.php
+++ b/core/modules/user/lib/Drupal/user/Tests/Views/HandlerFilterPermissionTest.php
@@ -88,7 +88,7 @@ public function testFilterPermission() {
     foreach (array('system' => 'System', 'user' => 'User') as $module => $title) {
       $expected = array_map(function ($permission) {
         return String::checkPlain(strip_tags($permission['title']));
-      }, $this->container->get('module_handler')->invoke($module, 'permission'));
+      }, $this->container->get('module_handler')->invoke($module, 'permission_info'));
 
       $this->assertEqual($expected, $value_options[$title], 'Ensure the all permissions are available');
     }
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index a944b30..ba54385 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -466,9 +466,9 @@ function user_is_blocked($name) {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function user_permission() {
+function user_permission_info() {
   return array(
     'administer permissions' =>  array(
       'title' => t('Administer permissions'),
@@ -1384,8 +1384,8 @@ function user_role_load($rid) {
  */
 function user_permission_get_modules() {
   $permissions = array();
-  foreach (\Drupal::moduleHandler()->getImplementations('permission') as $module) {
-    $perms = \Drupal::moduleHandler()->invoke($module, 'permission');
+  foreach (\Drupal::moduleHandler()->getImplementations('permission_info') as $module) {
+    $perms = \Drupal::moduleHandler()->invoke($module, 'permission_info');
     foreach ($perms as $key => $value) {
       $permissions[$key] = $module;
     }
@@ -1618,7 +1618,7 @@ function user_modules_installed($modules) {
   if ($rid) {
     $permissions = array();
     foreach ($modules as $module) {
-      if ($module_permissions = \Drupal::moduleHandler()->invoke($module, 'permission')) {
+      if ($module_permissions = \Drupal::moduleHandler()->invoke($module, 'permission_info')) {
         $permissions = array_merge($permissions, array_keys($module_permissions));
       }
     }
diff --git a/core/modules/views/tests/modules/views_test_data/views_test_data.module b/core/modules/views/tests/modules/views_test_data/views_test_data.module
index 61c7fdb..186a4f9 100644
--- a/core/modules/views/tests/modules/views_test_data/views_test_data.module
+++ b/core/modules/views/tests/modules/views_test_data/views_test_data.module
@@ -8,9 +8,9 @@
 use Drupal\views\ViewExecutable;
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function views_test_data_permission() {
+function views_test_data_permission_info() {
   return array(
     'views_test_data test permission' => array(
       'title' => t('Test permission'),
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 944c0c9..e56ae65 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -258,9 +258,9 @@ function views_theme_suggestions_comment_alter(array &$suggestions, array $varia
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function views_permission() {
+function views_permission_info() {
   return array(
     'access all views' => array(
       'title' => t('Bypass views access control'),
diff --git a/core/modules/views_ui/views_ui.module b/core/modules/views_ui/views_ui.module
index 1d4a598..35a2e36 100644
--- a/core/modules/views_ui/views_ui.module
+++ b/core/modules/views_ui/views_ui.module
@@ -148,9 +148,9 @@ function views_ui_theme() {
 }
 
 /**
- * Implements hook_permission().
+ * Implements hook_permission_info().
  */
-function views_ui_permission() {
+function views_ui_permission_info() {
   return array(
     'administer views' => array(
       'title' => t('Administer views'),
diff --git a/core/profiles/standard/standard.install b/core/profiles/standard/standard.install
index aa0cb4a..a05d200 100644
--- a/core/profiles/standard/standard.install
+++ b/core/profiles/standard/standard.install
@@ -36,7 +36,7 @@ function standard_install() {
   user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('access comments', 'post comments', 'skip comment approval'));
 
   // Enable all permissions for the administrator role.
-  user_role_grant_permissions('administrator', array_keys(\Drupal::moduleHandler()->invokeAll('permission')));
+  user_role_grant_permissions('administrator', array_keys(\Drupal::moduleHandler()->invokeAll('permission_info')));
   // Set this as the administrator role.
   $user_settings->set('admin_role', 'administrator')->save();
 
