diff --git a/src/flake8/options/config.py b/src/flake8/options/config.py
index d7519df..7cba936 100644
--- a/src/flake8/options/config.py
+++ b/src/flake8/options/config.py
@@ -8,6 +8,7 @@ from typing import List
 from typing import Optional
 from typing import Tuple
 
+from flake8 import exceptions
 from flake8.options.manager import OptionManager
 
 LOG = logging.getLogger(__name__)
@@ -60,7 +61,10 @@ def load_config(
 
     cfg = configparser.RawConfigParser()
     if config is not None:
-        cfg.read(config)
+        if not cfg.read(config):
+            raise exceptions.ExecutionError(
+                f"The specified config file does not exist: {config}"
+            )
         cfg_dir = os.path.dirname(config)
     else:
         cfg_dir = pwd

diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py
index b351e9d..fe254b7 100644
--- a/tests/integration/test_main.py
+++ b/tests/integration/test_main.py
@@ -386,3 +386,21 @@ def test_early_keyboard_interrupt_does_not_crash(capsys):
     out, err = capsys.readouterr()
     assert out == "... stopped\n"
     assert err == ""
+
+
+def test_config_file_not_found(tmpdir, capsys):
+    """Ensure that an explicitly specified config file which is not found is an
+    error"""
+
+    expected = """\
+There was a critical error during execution of Flake8:
+The specified config file does not exist: missing.cfg
+"""
+
+    with tmpdir.as_cwd():
+        tmpdir.join("t.py").write("print('hello hello world')\n")
+        assert cli.main(["--config", "missing.cfg", "t.py"]) == 1
+
+    out, err = capsys.readouterr()
+    assert out == expected
+    assert err == ""
diff --git a/tests/unit/test_options_config.py b/tests/unit/test_options_config.py
index b288de0..c5d1476 100644
--- a/tests/unit/test_options_config.py
+++ b/tests/unit/test_options_config.py
@@ -2,6 +2,7 @@ import configparser
 
 import pytest
 
+from flake8 import exceptions
 from flake8.main.options import register_default_options
 from flake8.options import config
 from flake8.options.manager import OptionManager
@@ -164,3 +165,8 @@ def test_parse_config_ignores_unknowns(tmp_path, opt_manager, caplog):
             'Option "wat" is not registered. Ignoring.',
         )
     ]
+
+
+def test_load_config_missing_file_raises_exception(capsys):
+    with pytest.raises(exceptions.ExecutionError):
+        config.load_config("foo.cfg", [])

A missing explicitly specified config file is silently ignored
*Please describe how you installed Flake8*

```console
$ virtualenv venv
$ . venv/bin/activate
$ pip install flake8
```

*Please provide the exact, unmodified output of `flake8 --bug-report`*

```cnosole
$ flake8 --bug-report
{
  "dependencies": [],
  "platform": {
    "python_implementation": "CPython",
    "python_version": "3.8.8",
    "system": "Linux"
  },
  "plugins": [
    {
      "is_local": false,
      "plugin": "mccabe",
      "version": "0.6.1"
    },
    {
      "is_local": false,
      "plugin": "pycodestyle",
      "version": "2.8.0"
    },
    {
      "is_local": false,
      "plugin": "pyflakes",
      "version": "2.4.0"
    }
  ],
  "version": "4.0.1"
}
```

*Please describe the problem or feature*

flake8 silently ignores the specified config file if it is missing

```console
$ rm -f foo
$ touch t.py
$ flake8 --config foo t.py
$ echo $?
0
```

*If this is a bug report, please explain with examples (and example code) what you expected to happen and what actually happened.*

An error should be raised if the specified config file is missing.

Looks like the culprit is `configparser.read()`: ["If a file named in filenames cannot be opened, that file will be ignored"](https://docs.python.org/3/library/configparser.html#configparser.ConfigParser.read)
tests/integration/test_main.py::test_config_file_not_found tests/unit/test_options_config.py::test_load_config_missing_file_raises_exception
tests/integration/test_main.py::test_diff_option tests/integration/test_main.py::test_form_feed_line_split tests/integration/test_main.py::test_e101_indent_char_does_not_reset tests/integration/test_main.py::test_statistics_option tests/integration/test_main.py::test_show_source_option tests/integration/test_main.py::test_extend_exclude tests/integration/test_main.py::test_malformed_per_file_ignores_error tests/integration/test_main.py::test_tokenization_error_but_not_syntax_error tests/integration/test_main.py::test_tokenization_error_is_a_syntax_error tests/integration/test_main.py::test_bug_report_successful tests/integration/test_main.py::test_benchmark_successful tests/integration/test_main.py::test_specific_noqa_does_not_clobber_pycodestyle_noqa tests/integration/test_main.py::test_specific_noqa_on_line_with_continuation tests/integration/test_main.py::test_physical_line_file_not_ending_in_newline tests/integration/test_main.py::test_physical_line_file_not_ending_in_newline_trailing_ws tests/integration/test_main.py::test_obtaining_args_from_sys_argv_when_not_explicity_provided tests/integration/test_main.py::test_cli_config_option_respected tests/integration/test_main.py::test_cli_isolated_overrides_config_option tests/integration/test_main.py::test_file_not_found tests/integration/test_main.py::test_output_file tests/integration/test_main.py::test_early_keyboard_interrupt_does_not_crash tests/unit/test_options_config.py::test_config_not_found_returns_none tests/unit/test_options_config.py::test_config_file_without_section_is_not_considered tests/unit/test_options_config.py::test_config_file_with_parse_error_is_not_considered tests/unit/test_options_config.py::test_config_file_with_encoding_error_is_not_considered tests/unit/test_options_config.py::test_find_config_file_exists_at_path[setup.cfg] tests/unit/test_options_config.py::test_find_config_file_exists_at_path[tox.ini] tests/unit/test_options_config.py::test_find_config_file_exists_at_path[.flake8] tests/unit/test_options_config.py::test_find_config_either_section[flake8] tests/unit/test_options_config.py::test_find_config_either_section[flake8:local-plugins] tests/unit/test_options_config.py::test_find_config_searches_upwards tests/unit/test_options_config.py::test_load_config_config_specified_skips_discovery tests/unit/test_options_config.py::test_load_config_no_config_file_does_discovery tests/unit/test_options_config.py::test_load_config_no_config_found_sets_cfg_dir_to_pwd tests/unit/test_options_config.py::test_load_config_isolated_ignores_configuration tests/unit/test_options_config.py::test_load_config_append_config tests/unit/test_options_config.py::test_parse_config_no_values tests/unit/test_options_config.py::test_parse_config_typed_values tests/unit/test_options_config.py::test_parse_config_ignores_unknowns